Hi Vielleicht kann mir ja jemand ein paar hilfreiche Ratschläge zu meinen Überlegungen geben. Das würde mich sehr freuen. Die nachfolgenden Überlegungen möchte ich gerne auf einem ARM Cortex M3 realisieren (nicht in Echtzeit). Es geht um Folgendes: Aus einem digitalen Mikrofon kommt ein Signal, das eine bestimmte Frequenz und einige Störfrequenzen und Rauschen enthält. Die Frequenz, auf die es mir ankommt, kann über eine zweite Quelle bestimmt werden (Periodenmessung eines "Triggersignals"). Ich möchte nun über einen relativ großen Bereich die Amplitude der Frequenzlinie im Spektrum des Mikrofonsignals messen und dachte mir, dass ich über die gemessene, einzelne Frequenz ganz gut an die Spektrallinie im Messsignal heran kommen könnte. Die Frage ist jetzt, ob ich nur über einen schmalbandigen und sehr steilen Bandpass an die Linie im Spektrum heran komme, ob es vielleicht eine andere Möglichkeit gibt, die Referenzfrequenz und das Messsignal zu verbinden, um möglichst störfrei die Amplitude auswerten zu können? Die Banalste Idee, die ich hatte war die, nach der FFT des Referenzsignals das Spektrum nach dem Maximum zu durchsuchen, mir den Index zu merken und im Spektrum des Messsignals an gleicher Indexstelle die Amplitude auszuwerten. Ich weiß nur nicht, wie sicher das funktioniert. In einer Matlabsimulation sah das bisher ganz gut aus. Was für die ganze Auswertung auch noch wichtig sein wird, ist ein guter SNR, um wie gewünscht über einen breiten Bereich die Amplitude bestimmen zu können. Da die Bandbreite, in der die zu untersuchende Spektrallinie befindet, ca. 10 bis 15 kHz groß ist, ist es hier schwierig einen tollen und steilflankigen Tiefpassfilter einzusetzen. Was unter Matlab augenschcheinlich ganz gute erfolge gebracht hat, war die Autokorrelation des Messsignals. Vielleicht hat ja jemand ein paar hilfreiche Gedanken. Wenn noch Fragen offen sind, einfach stellen. Schöne Grüße
Das geht mit dem hier dargestellten Verfahren sehr gut: Beitrag "Re: Phasenverschiebung messen (us Bereich)" Du bestimmst damit die Frequenz, Amplitude und Phase des Sinus, geht auch gut in Rauschen. Cheers detlef
Hi Danke für deine Antwort. Aus dem Code werde ich aber noch nicht ganz schlau. Magst du ihn mir erklären und vielleicht auch das Verfahren, das dahinter steckt, nennen?
Das Verfahren habe ich erwähnt:
>>>>Verfahren. Dieses Verfahren hat Prony erfunden.
Hier nochmal mit mehr Kommentar:
clear
w=15.3*2*pi/128
sig = 1.34*sin(w*(0:127)+0.123);
n=length(sig);
% Hier habe ich ein Testsignal gebastelt.
% Frequenz, Amplitude will ich wiederfinden
% Die Differenzengleichung eines ungedämpften diskreten Systems lautet
%sig(n+1)=2*cos(w)*sig(n)-sig(n-1);
%Das läßt sich umstellen:
%sig(n-1)+sig(n+1)=2*cos(w)*sig(n);
% Der Faktor 2*cos(w) bildet also sig(n) auf sig(n-1)+sig(n+1) ab
% Diesen linearen Faktor suche ich jetzt
% Das ist die Summe
s1=sig(1:n-2)+sig(3:n);
% Das ist der zwischenliegende wert
s2=sig(2:n-1);
%Jetzt mit linearer Regression den Faktor bestimmen
% Regression s1 auf s2
M= [s2.' ones(length(s1),1)];
coff=inv(M'*M)*M'*s1.';
%Den Faktor in die Frequenz umrechnen
wn=acos(coff(1)/2);
% Dieser rotierende Zeiger hat Amplitude und Phase
% darauf nochmal lineare regression anwenden
M=[cos((0:n-1)*wn).' sin((0:n-1)*wn).'];
coff=inv(M'*M)*M'*sig.';
%fertig
cc=coff(2)+j*coff(1);
amp=abs(cc);
ph=angle(cc);
Probier das mit Deinen Signalen aus, das geht.
Cheers
Detlef
Hi Danke für die Kommentierung des Codes. Mir ist das Verfahren vollkommen unbekannt und deswegen ist es leider immer noch ein bisschen kniffelig hinter den Grundgedanken des Verfahrens zu steigen. Ich habe es mal mit meinem Signal ausprobiert, aber sobald ich additives Rauschen oder eine zweite Frequenz im Signal habe, kommt bei der Amplitude aber nur noch unsinniges raus. Ist das von dir hier beschriebene Verfahren das gleich, wie im folgenden Link ab Seite 23? http://www.siart.de/lehre/spektralschaetzung.pdf Uwe schrieb: > Lockin Verstärker Den Lock-In Verstärker will ich gerade ersetzen. Die Frage ist, wie?! Und das am besten effizient und Ressourcensparend, da das ganze wie gesagt auf einem Cortex M3 laufen soll.
Andre, >>Ist das von dir hier beschriebene Verfahren das gleich, wie im folgenden Das Verfahren verstehe ich nicht anhand des PDFs. So wie ich das beschrieben habe, geht es um EINE Frequenz. Prony geht auch mit mehreren Frequenzen, kann sein, dass das so in den Folien vorgestellt wird, erschließt sich mir aber nicht daraus. >>aber sobald ich additives Rauschen mail mal ein Datenfile. Cheers Detlef
Detlef _a schrieb: >>>aber sobald ich additives Rauschen > > mail mal ein Datenfile.
1 | clear; |
2 | |
3 | Fs = 48000; |
4 | Ts = 1/Fs; |
5 | |
6 | N = 2^12; |
7 | |
8 | f1 = 1938; |
9 | f2 = 16000; |
10 | t = (0:N-1)*Ts; |
11 | df = Fs/N; |
12 | f = (1:N/2)*df; |
13 | |
14 | LSD = 0.1; |
15 | noise = sqrt(LSD/Ts)*randn(1,length(t)); |
16 | |
17 | sig = sin(2*pi*f1*t) + sin(2*pi*f2*t) + 0.01*noise; |
"sig" wäre jetzt ein typisches Beispiel. Zwei harmonische Schwinungen überlagert von breitbandigem Rauschen.
André M. schrieb: > der FFT des Referenzsignals > > das Spektrum nach dem Maximum zu durchsuchen, mir den Index zu merken > > und im Spektrum des Messsignals an gleicher Indexstelle die Amplitude > > auszuwerten. Ich weiß nur nicht, wie sicher das funktioniert. Wird durchaus so gemacht, allerdings ist eine FFT genügender Feinheit recht aufwändig.
Was war das früher (tm) doch einfach. Da hat man zwei Synchrongleichrichter für sin() und cos() genommen, jeweils einen Tiefpaß dahinter geschaltet und konnte dann aus den beiden Signalen Amplitude und Phase ablesen.
Hi, >>Was für die ganze Auswertung auch noch wichtig sein wird, ist ein guter >>SNR, Yo, stimmt. In Deinem geposteten Beispiel ist Signal und Rauschen ca. gleich groß, das ist kein guter SNR. Außerdem hast Du im Beispiel zwei Frequenzen, nicht eine wie oben dargelegt. Ich hatte nicht richtig gelesen, dass Du die Frequenzen ja kennst. Dann geht die Bestimmung der Amplitude mit dem Goertzel-Verfahren so gut wie das miese SNR es zuläßt. Länger messen macht die Bestimmung dann besser. Der Goertzel als ungedämpftes IIR 2.Ordnung macht Dir ein schmalbandiges Filter auf Deiner Wunschfrequenz. Code unten anbei. Cheers Detlef clear; Fs = 48000; Ts = 1/Fs; N = 2^12; f1 = 1938; f2 = 16000; t = (0:N-1)*Ts; df = Fs/N; f = (1:N/2)*df; LSD = 0.1; noise = sqrt(LSD/Ts)*randn(1,length(t)); sig = 1.2345*sin(2*pi*f1*t) + 1.4567*sin(2*pi*f2*t) + 0.01*noise; %sig = 1.234*sin(2*pi*f1*t) + 0.01*noise; w=(2*pi*f1/Fs); q1=0; q2=0; for(k=1:length(sig)-1) q0=2*cos(w)*q1-q2+sig(k); q2=q1; q1=q0; end; bb=((q1-q2*cos(w))+i*q2*sin(w)); amplitude=2*abs(bb(end))/length(sig)
Hi Danke für die Antworten. Der Goertzel-Algorithmus macht einen guten Eindruck. Ich werde ihn für meine Zwecke testen. Wenn vielleicht noch jemand gute Literaturquellen zum Thema Lock-In Verstärker hat oder eine sehr gute Onlinequlle kennt (habe schon selber gegooglt), würde ich mich darüber auch sehr freuen. Schöne Grüße
André M. schrieb: > Wenn vielleicht noch jemand gute Literaturquellen zum Thema Lock-In > Verstärker hat Was suchst du denn an weiteren Infos? Hier steht doch schon mal ein Aufhänger: http://de.wikipedia.org/wiki/Lock-in-Verst%C3%A4rker Statt einer variablen Phasenverschiebung für das Referenzsignal kannst du die ganze Mimik auch zwei mal aufbauen, einmal mit fester Verschiebung 0° und einen zweiten Zweig mit fester Verschiebung 90°. Dann bekommst du auch die Phaseninformation.
Wolfgang schrieb: > André M. schrieb: >> Wenn vielleicht noch jemand gute Literaturquellen zum Thema Lock-In >> Verstärker hat > Was suchst du denn an weiteren Infos? Hier steht doch schon mal ein > Aufhänger: > http://de.wikipedia.org/wiki/Lock-in-Verst%C3%A4rker > > Statt einer variablen Phasenverschiebung für das Referenzsignal kannst > du die ganze Mimik auch zwei mal aufbauen, einmal mit fester > Verschiebung 0° und einen zweiten Zweig mit fester Verschiebung 90°. > Dann bekommst du auch die Phaseninformation. Danke für deine Antwort. Im Kern suche ich Informationen zur praktischen Realisierung eines Lock-In Verstärkers. Könntest du mir das Vorgehen mit den beiden festen Phasenverschiebungen und der darauß möglichen Bestimmung der realen Phasenverschiebung etwas ausführlicher erklären? Wie geht das genau?
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.