Hallo zusammen, ich versuche mit Hilfe des Goertzel Algorithmus ein Signal mit einer bekannten Frequenz aus einem Frequenzspektrum herauszufiltern. Die anderen Störsignale mit unterschiedlichen Frequenzen kann ich einzeln zuschalten bzw. abschalten. Es handelt sich hierbei um eine Simulink Simulation. Habe ich kein Störsignal aufgeschaltet, gibt der Algorithmus den richtigen Wert für die Amplitude aus. Schalte ich die Störsignale zu, ergibt sich ein um bis 30 % überhöhter Wert. Hier bin ich auf der Suche nach möglichen Ursachen? Hier habe ich meine Parameter: %Goertzel Algorithm N = 2000; target_freq = 240; sample_rate = 1000; k = 0.5+(N*target_freq/sample_rate); omega = 2*pi*k/N; sine = sin(omega); cosine = cos(omega); coeff = 2.0 * cosine;
Leckeffekt, Aliasing, ... Wieso zeigst du nicht dein Modell, dann müssten wir nicht die Glaskugel bemühen.
:
Bearbeitet durch User
Beitrag #6355431 wurde vom Autor gelöscht.
Hier habe ich einen Screenshot von meinem Algorithmus. Auf der nicht verbundenen Leitung kommt das zu filternde Signal.
Welchen Pegel Deiner Nutzfrequenz hat denn das Störsignal allein?
An sich habe ich ein Nutzsignal und zwei Störsignale. Deren Frequenzen sind Vielfache der Frequenz des Nutzsignals. Das eine Störsignal hat fast genau die gleiche Amplitude wie das Nutzsignal, das andere Störsignal ist ca. 1/4 kleiner.
Alexander K. schrieb: > Deren Frequenzen > sind Vielfache der Frequenz des Nutzsignals Wie viel vielfach? Bei einer Samplerate von 1000 und Nutzfrequenz von 240 wirst du ja schon bei 3-facher Frequenz Aliasing haben. Mach mal was Walter geschrieben hat, trenne das Nutzsignal und füttere nur die Störsignale rein und dann schau nach wie viel Leistung bei der Nutzfrequenz liegt.
:
Bearbeitet durch User
Die Störungen besitzen die zweifache und dreifache Frequenz. Das heißt Aliasing dürfte tatsächlich ein Problem sein. Habe die Abtastrate um den Faktor 10 erhöht. Jetzt sind die Ergebnisse deutlich besser. Wenn ich jetzt die unterschiedlichen Störungen aufschalte, variieren die Ergebnisse nur noch um 0,01. Zum Vergleich, bei der davor gewählten Abtastfrequenz lag die Abweichung noch bei ca. 0,08 teilweise. Die tatsächliche Amplitude des Nutzsignals sollte bei o,15 liegen. Jetzt frage ich mich ob so eine gewisse Abweichung bei dem Goertzel Algorithmus normal ist oder ob, wenn er richtig arbeitet, er auch immer exakt das gleiche Ergebnis liefern sollte? Ich hatte auch mal das Nutzsignal abgeschaltet und nur die Störsignale aufgeschaltet. Bei der alten Abtastfrequenz wie auch bei der neuen ergibt sich eine Amplitude von 0,04. Weiteres erhöhen der Abtastrate brachte keine Verbesserung mehr.
Alexander K. schrieb: > Jetzt > frage ich mich ob so eine gewisse Abweichung bei dem Goertzel > Algorithmus normal ist oder ob, wenn er richtig arbeitet, er auch immer > exakt das gleiche Ergebnis liefern sollte? Dann wäre jetzt das Verhältnis zwischen Abtastrate und den Signalfrequenzen interessant.
Das Verhältnis zwischen Abtastrate und den jeweiligen Signalfrequenzen beträgt: 41,6 und 20,83 und 13,8
Dann kennst Du jetzt mal schauen, welche Mischfrequenzen zwischen Abtastrate und Nutz- und Störsignalen noch in die Bandbreite fallen.
Die Bandbreite beim Goertzel Algorithmus berechnet sich doch mit Fs/N. Fs ist die Abtastrate und N die Anzahl der Messwerte. Dabei komme ich auf eine Bandbreite von nur 0,5 Hz. Von diesem Band um das Nutzsignal sind die anderen Frequenzen ja weit entfernt.
Walter T. schrieb: > Mischfrequenzen zwischen Abtastrate und Nutz- und Störsignale Nicht vergessen: Außerhalb der Bandbreite bedeutet nicht, dass das Signal auf Null abgefallen ist.
Stimmt, das ist wohl ähnlich wie beim Hoch-/Tiefpassfilter. Aber wie kann ich beim Goertzel Algorithmus etwas dagegen machen?
Alexander K. schrieb: > Die Bandbreite beim Goertzel Algorithmus berechnet sich doch mit Fs/N. Das ist die Frequenzauflösung. Es fällt mir schwer in diesem Thread die bruchstückhafte Information zusammenzukramen, aber du scheinst 2000 Samples bei einer Samplerate von 10000/s zu haben. Keine deiner Frequenzen scheint aber genau periodisch mit 2000 Samples zu sein, also wirst du durch die Fensterung (ich nehme an, du schneidest einfach ab = Rechteckfenster) eine Faltung mit der si-Funktion im Frequenzbereich bekommen. Dadurch taucht auch Leistung auf deiner gesuchten Frequenz auf, die bei einem unendlichen Betrachtungszeitraum nicht da wäre.
Ja, die infos kommen spärlich vom TO. Wie Felix sagte, wenn Du keine ganzzahlige Anzahl der Wellen der Fundamentalfrequenz erwischt, dann 'lecken' diese Welle und auch alle Oberwellen aus. Das ist dann im Spektrum keine Nadel mehr sondern wird breiter. Bei 240Hz und samplefrequenz 1000samples/sec kiegst du 1000/240=25/6 samples pro Welle, bei 25 samples Fensterbreite also genau 6 Wellen. Die Fensterbreite muss ganzzahliges Vielfaches von 25 sein, das ist für eine FFT natürlich nicht so günstig, weil 25 in doppelter Hinsicht keine Potenz von 2 ist :))). Goertzel berechnet die FFT für EINE Spektrallinie, so kann man den auch testen. Das Gesagte gilt also auch für Goertzel. Das 'Lecken' kann man durch eine geeignete Fensterfunktion beliebig hoch unterdrücken. Das Problem hat man immer, wenn die Abtastung nicht mit der Signalfrequenz synchron ist. Aber das ist Dir ja egal, weil Du ehe mit Goertzel rechnest. Du mußt nur nach der richtigen Anzahl Werte aufhören. Dein Simulink Goertzel Modell kann man übrigens noch schicker machen, wenn man q1 und q2 anders wählt: q1(n+1)=q1(n)*cosw-q2(n)*sinw q2(n+1)=q1(n)*sinw+q2(n)*cosw q1+j*q2 ist dann direkt der komplexe Phasor, von dem kann man einfach Betrag und Phase bestimmen aufkosten von 4 Multiplikationen statt einer. math rulez! Cheers Detlef
Detlef _. schrieb: > Wie Felix sagte, wenn Du keine ganzzahlige Anzahl der Wellen der > Fundamentalfrequenz erwischt, dann 'lecken' diese Welle und auch alle > Oberwellen aus Sicher? Ich muss zugeben: So genau habe ich mir über den Goertzel noch nie Gedanken gemacht, weil ich ihn noch nie in einem Projekt verwendet habe, aber das sieht für mich erst einmal nach einer IIR-Struktur 2. Ordnung aus. Damit gäbe es - im Gegensatz zu einer FFT - kein echtes Fenster, weil nicht auf einer endlichen Sample-Größe gearbeitet wird.
:
Bearbeitet durch User
Also ich habe eine Simulationslaufzeit von 0.2 sec. Die Abtastrate beträgt 10000 Hz und die Anzahl der Samples 2000. Was meinst du mit periodisch? Meine Nutzfrequenz liegt bei 240 HZ. Die Störfrequenzen sind vielfache davon. Da passt doch meine Nutzsignal genau 48 mal in das 0.2 sec Zeitfenster?
>>>Da passt doch meine Nutzsignal genau 48 mal in das 0.2 sec Zeitfenster? Ja, paßt, 2000*240/10000=48, da leckt nichts. Ist auch genügend hoch abgetastet. >>>aber das sieht für mich erst einmal nach einer IIR-Struktur 2. Ordnung aus. Der Goertzel ist ein IIR 2.Ordnung mit konjugiert komplexen Polen auf dem Einheitskreis, also ein ungedämpft schwingfähiges System. Und genau das macht die FFT ja auch, die stellt ein System dar als Summe ungedämpfter harmonischer Schwingungen. Goertzel pickt Dir da einen einzigen raus. Die Funker nennen den gleichen hack 'Mischen mit komplexem Träger'. Die Frequenzen 10000Hz und 240Hz stimmen auch gut, Promille oder so? Der 'coeff' bei Deinem Goertzel ist richtig? Wie gesagt, den Goertzel kann man testen indem man einfach ne komplette FFT von den 2000 Werten macht. Jedes Körbchen ist dann 10000/2000=5 Hz auseinander, an Stelle 48 steht der Wert für 240Hz, der muß auch bei Deinem Görtzel rauskommen. Vorsicht mit der Zählung bei Matlab, der Wert mit dem Index 1 ist DC entsprechend 0*5Hz, also bei Spektrum(49) schauen. Zeig mal das Nutz- und Störsignal. Cheers Detlef
:
Bearbeitet durch User
Detlef _. schrieb: > Der Goertzel ist ein IIR 2.Ordnung mit konjugiert komplexen Polen auf > dem Einheitskreis, also ein ungedämpft schwingfähiges System. Den Blickpunkt hatte ich noch nie. So wird das ja richtig anschaulich.
Alexander K. schrieb: > An sich habe ich ein Nutzsignal und zwei Störsignale. Deren Frequenzen > sind Vielfache der Frequenz des Nutzsignals. OMG Hast du dir auch nur mal die Kennlinie eines Goertzel angeschaut? Dann springt dir die Erklärung für den Effekt mit dem nackten Arsch förmlich in Gesicht. Ja, man kann das natürlich auch mit komplexen Formeln, Nullstellen und Polen und dem ganzen Quatsch ausdrücken, aber ein kompetente Bildbetrachtung geht viel schneller... Beispiel siehe Anhang.
Alexander K. schrieb: > Also ich habe eine Simulationslaufzeit von 0.2 sec. Die Abtastrate > beträgt 10000 Hz und die Anzahl der Samples 2000. Was meinst du mit > periodisch? Und welche Fensterfunktion benutzt du?
Leider stimmt das mit Optimierung von simulink nicht. Das Formula welche hier genutzt wurde ist die optimierte Variante. Hier wurden zwei Programmierung Trick angewandt 1- ganze Formula inkrementel berechnet (IIR Filter) Dadurch ist das Formel sehr kompakt und Optimiert für Embedded 2- Sqrt wurde vermieden durch Magnitude^2 Hier sollte das Wert mit Schwelle verglichen werden Gruss
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.