Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Goertzel Algorithmus (Frequenz + Phase) (https://www.delphipraxis.net/162396-goertzel-algorithmus-frequenz-phase.html)

stoxx 20. Aug 2011 20:59


Goertzel Algorithmus (Frequenz + Phase)
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo liebe Delphianer :)


wisst ihr zufällig, wo man im Goertzel Algorithmus die Phase (und Amplitude) herbekommt?

hab den Algorithmus mal in Delphi umgesetzt, die Frequenzbestimmung funktioniert soweit wie gewünscht. (Projekt im Anhang)
In diesem PDF steht leider nur, dass man die Phase bei der reinen Frequenzbestimmung ja nicht bräuchte .. hmm :(

http://www.ti.com/lit/an/spra096a/spra096a.pdf

ich bin jetzt in Mathe so tief leider nicht gleich so fit, das zu verstehen.
Vielleicht kann ja jemand helfen ?


Delphi-Quellcode:
function Goertzel(const x : TDoubleArray; frequency : Double; SampleRate : Integer) : Extended;
var Skn, Skn1, Skn2 : Extended;
    i : Integer;
    WNk : Extended;
    coeff : Extended;
    power : Extended;
begin

  Skn := 0; Skn1 := 0; skn2 := 0;
  coeff := 2 * Cos( 2 * Pi * frequency / SampleRate);
  for I := 0 to Length(x)- 1  do begin

    Skn := x[i] + (coeff * Skn1) - Skn2 ;
    Skn2 := Skn1;
    Skn1 := Skn;

  end; // for I
 result := Skn2 * Skn2 + Skn1 * Skn1 - coeff * Skn1*skn2;
end;
Danke ! :)

Peter1999 20. Aug 2011 21:48

AW: Goertzel Algorithmus (Frequenz + Phase)
 
Hallo,

guck mal hier,

da steht neben der "schnellen" Berechnung der Amplitude auch die Berechnung der komplexen Transformierten.
Damit hast dann Real- und Imaginärteil, um deine Phase zu berechnen (arctan(Im/Re)).

Viele Grüße...

stoxx 21. Aug 2011 03:37

AW: Goertzel Algorithmus (Frequenz + Phase)
 
Das klappt leider alles immer noch nicht so richtig.
Die Winkelberechnung funktioniert manchmal, wenn die Soundlänge genau 1000 ms lang ist.
hast Du den Algorithmus schonmal umgesetzt?
weißt Du, wo und wie da korrekt normiert werden muss?

stoxx 21. Aug 2011 05:09

AW: Goertzel Algorithmus (Frequenz + Phase)
 
....

Peter1999 21. Aug 2011 17:49

AW: Goertzel Algorithmus (Frequenz + Phase)
 
Liste der Anhänge anzeigen (Anzahl: 1)
So,
du hattest mit der Normierung recht, das ist auch leicht unübersichtlich, wenn man sich so im Internet umsieht. Da ich mich sonst auch eher mit FFTs beschäftige, war das jetzt auch etwas ungewohnt und ich übernehme keine Garantie ;) . Egal...

Dass die Phase bei einem einzelnen Signal keine Aussage besitzt, ist dir aber schon klar? Die wird erst sinnvoll, wenn du Frequenzgänge bestimmen willst (mind. 2 synchrone Signale).

Ich habe mal ein eigenes kleines Beispielprogramm geschrieben, bei dem ich nun davon ausgehe, dass es (ungefähr) funktioniert.
Das ganze sollte zwar noch etwas aufgeräumt und ordentlich in eine Klasse verpackt werden, macht aber ansonsten, was es soll.

Auch die Frequenzfindung kann noch deutlich verbessert werden, wenn man weiß, dass man wirklich nur eine diskrete Spektrallinie im Signal hat. Bei einem kontinuierlichen Spektrum kannst du das natürlich vergessen. Dann gibt es nicht viel zu Optimieren (außer der Frequenzauflösung vielleicht?).

Du kannst es dir ja mal anschauen.

Viele Grüße...

stoxx 21. Aug 2011 18:59

AW: Goertzel Algorithmus (Frequenz + Phase)
 
Liste der Anhänge anzeigen (Anzahl: 2)
vielen Dank ! .. also erstmal .. vor allen Dingen für die Mühe, ist recht praktisch gemacht, das Programm :-)
die Signalfindung soll nich verbessert werden, es geht um das prüfen einiger (an der hand abzählbarer) Frequenzen.

wie ich jetzt so gelesen habe, soll gerade der Vorteil vom Goertzel Algorithmus sein, dass man an kein festes Fenster gebunden ist, sondern sogar ein beliebiges großes (einziges) Datenarray berechnen kann. (Somit unterscheidet sich das Fenster hier glaub ich etwas)

aber nun zum den Problemen .. siehe bild ..
vor dem Problem steh ich schon die ganze Zeit .. man variiert mal bissl die Samplefrequenz, und die Abtastfrequenz und dann kommt nur Quatsch raus.
Die Amplitude ist ständig falsch (manchmal sogar in Anhängigkeit von der Phase kommt was anderes raus.. )
Die Phase sollte aber auch bei Null beginnen, wie meinst Du das, sie hätte keine Bedeutung? Lässt sie sich nicht korrekt berechnen?

Es scheint, als wäre das alles komplizierter, als gedacht ...
hier wird von Korrekturfaktoren geredet, aber ich versteh nix !

http://www.dsprelated.com/showmessage/87369/1.php

http://www.nntpnews.info/threads/695...ctral-response



Von Mathworks hab ich mal noch in Delphi implementiert, funktioniert aber auch nicht wie gewünscht. Manchmal kommt auch murx raus.
Zum Finden der Frequenzen sind die Verfahren alle geeignent, nur beim richtigen Imaginär und Realteil versagen sie. ich vermute ja immer noch, dass etwas eine Korrektur notwendig ist, oder noch was normiert werden muss, er also irgendwie zu hoch oder zu tief rechnet.

(vielleicht hab ich auch noch einen Fehler drin ... hmm)
ist im anhang, da ist auch ein Algo drin, wenn man die fenster overlappen möchte.
Das wird an anderer Stelle irgendwo empfohlen, da an den Fensterrändern Fehler entstehen ..


http://www.mathworks.com/matlabcentr...ent/goertzel.m

stoxx 21. Aug 2011 19:17

AW: Goertzel Algorithmus (Frequenz + Phase)
 
ahso .. das wichtigste vergessen.

http://www.mstarlabs.com/dsp/goertzel/goertzel.html

dieser Algo im Link unterscheidet sich von dem in Deinem Link etwas.
Der liefert aber wenigistens stabile (also von der reingesteckten Phase) unabhängige Amplituden. (sollte auch so sein :)

da die Formel leicht anders aussieht, vor allen Dingen beim Bestimmen des Im und Re Teils, könnte also auch viel Murks im Internet unterwegs sein...

Allerdings stimmt hier die Phase auch noch nicht !

Peter1999 21. Aug 2011 19:44

AW: Goertzel Algorithmus (Frequenz + Phase)
 
Liste der Anhänge anzeigen (Anzahl: 1)
Das Ergebnis im Bild wird doch (höchst wahrscheinlich sogar) stimmen.
Die ermittelte Frequenz liegt bei 193,6 Hz, die tatsächliche aber bei 200 Hz. Damit siehst du nicht die exakte Spektrallinie, sondern ein "verschmiertes" Nebenband. Dass dort die Amplitude deutlich geringer ist, ist ja bei einem einfachen Sinussignal normal. Wo soll die Signalleistung abseits der 200Hz auch herkommen. Nur wenn du die Frequenz besser bestimmst (also möglichst wirklich die 200Hz), bekommst du das exakte Ergebnis.

Gib mal für die Goertzel-Frequenz von Hand die 200Hz vor und klicke auf den Goertzel-Button, dann siehst du, dass es wirklich nur daran liegt, dass du auf dem Seitenband gelandet bist.

Zur besseren Bestimmung der Frequenz musst du aber ein Optimierungsproblem lösen. Das ist es, was ich mit verbesserter Frequenzsuche meinte.

Einfachstes Verfahren:
Der Algorithmus müsste also die 2 größten Amplituden finden. Den Bereich dazwischen wieder in äquidistante (im Frequenzbereich) Stücke einteilen --> da wieder die 2 größten Amplituden finden --> dann wieder neu einteilen usw. ...

Das ganze musst du dann machen bis ein Konvergenzkriterium erreicht ist, z.B. sich die Max.-Amplitude nicht mehr als 0,1% von der letzten Max.-Amplitude unterscheidet.

Wie gesagt, bei der Amplitude ist das durchaus sinnvoll. Die Phase ist aber immer nur die Phase eines Sinus bezüglich deines gewählten Zeitfensters. Was du also damit machen willst, ist mir noch schleierhaft, solange du nicht mehrere Kanäle oder synchrone Daten vergleichen willst.

Du schreibst von einer Korrektur, die nötig sein könnte. Das ist falsch! Die DFT, Goertzel oder FFT sind immer eindeutig und exakt umkehrbar! Was mit der Korrektur gemeint ist, ist folgendes: Man kann aus der Breite des verschmierten Spektrums den Maximalwert abschätzen (siehe Modalanalyse). Man kann auch durch geeignete Fensterfunktionen (Hanning, Blackman,...) das Verschmieren reduzieren. Das würde ich dir aber alles nicht empfehlen, sondern (wie gesagt) lieber die Frequenz richtiger bestimmen. Dann gibt es das Problem nämlich nicht.

Zusammenfassung:
Dein Problem ist die Frequenzauflösung. Wenn du diese verbesserst, triffst du die exakte Frequenz besser und bekommst auch bessere Ergebnisse! Ich empfehle dir also wirklich, diesen "einfachen" Weg zu gehen.



PS. Mein Programm liefert natürlich von der Phase unabhängige Amplituden! ;)

Im übrigen liefert mein Programm auch deine 200 Hz exakt + Phase + Amplitude! Vorausgesetzt natürlich dein Zeitfenster ist nicht länger als dein Signal (0,05 s) siehe Bild ;)

stoxx 21. Aug 2011 20:21

AW: Goertzel Algorithmus (Frequenz + Phase)
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hi Peter,

Dein Text trägt zum Verständnis bei, trotzdem funktioniert es nicht :-)

ich hab jetzt mal Deine Normierung unten beim Goertzel Button rausgenommen, so dass man auch eine Frequenz eingeben kann, ohne dass sie verändert wird.

ich gebe ein
300 Hz
3 Amplituede
45 Phase
48000 Abtastfrequenz
0,02 Signaldauer

er findet dann erstmal 288
das änder ich auf 300 und drücke den Goertzel Button

errechnen tut er:

0,0038360000 Amplitude
450 Phase


Hat es einen bestimmten wichtigen Grund, warum Du die den Zähler im Goertzer rückwärts zählst?
(btw wäre besser von Fenstergröße-1 bis null zu iterieren)

Peter1999 21. Aug 2011 20:43

AW: Goertzel Algorithmus (Frequenz + Phase)
 
Das kann ja auch nicht gehen ;)

Wenn du mit 48000 Punkten / Sek eine Signaldauer von 0,02 Sek vorgibst, dann sind das nur 960 Stützstellen! Die Fenstergröße muss dann also kleiner als 960 sein. (Es wundert mich, dass das nicht in eine Exception läuft, aber egal, da müsste ich jetzt mal den Debugger anwerfen). Nimm mal 800 und schon geht's. Sowas habe ich hier in dem Beispiel noch nicht abgefangen.

Das ist ja gerade das Problem bei allen Frequenzbereichsverfahren: höhere Frequenzauflösung benötigt immer längere Signale.

stoxx 21. Aug 2011 21:12

AW: Goertzel Algorithmus (Frequenz + Phase)
 
Liste der Anhänge anzeigen (Anzahl: 1)
es funktioniert auch mit 800 nicht, warum glaubt mir niemand :-)
(wie Du schon sagst, wenn die Fenstergröße zu groß ist, rechnet er einfach ins leere weiter ..)


ich überlege gerade, ob es entscheidend ist, rückwärts zu zählen.
aus einem Buch über Numerische Mathematik bei google books hab ich entnommen, das es wohl so ist.
Da drin sieht man auch, ich nehme an, dass der Autor Ahnung hat, dass man um den Real Teil auszurechnen, cosine mit Q1 multiplizieren muss. in dem Link ist es gerade vertauscht (und falsch) und führt also auch zu diesen Problemen.

http://www.eetimes.com/design/embedd...tzel-Algorithm

Trotzdem geht aber die Phase immer noch nicht :cry:

Vielleicht probier ich das mal, mit dem Index rückwärts laufen lassen.

In dem Buch für Numerische Mathematik steht auch, dass der Algorithmus nicht gutartig wäre, was auch immer das heißt.
Es wird der Algorithmus von Reinsch empfohlen.
der macht bei kleinem Epsilon ? weniger Fehler .. ob das wichtig ist?
oder sind das trotzdem nur kleine Fehler?
was denkst Du?

Peter1999 21. Aug 2011 21:28

AW: Goertzel Algorithmus (Frequenz + Phase)
 
Liste der Anhänge anzeigen (Anzahl: 1)
Doch, ich glaube dir schon ;) .
Man macht sich ja nicht freiwillig das Leben schwer ;) .

Ich kann das Problem nur nicht nachvollziehen, da es ja mit deinen Werten funktioniert, wenn ich mit einer Fenstergröße von 800 Punkten rechne (siehe Bild).

Ob man rückwärts zählen muss (oder nur kann) weiß ich nicht, ich habe den Algorithmus nicht erfunden. Und ich glaube, es ist jetzt auch zu spät, um noch schnell die Herleitung zu verstehen ;) (Habe auch gerade kein vollständiges Lehrbuch zur Hand ;) ).

Willst du nicht einfach die Variante aus meinem Beispiel übernehmen und gut ist's?
Ich habe jedenfalls noch keinen Fall gefunden (der plausibel ist) der nicht funktioniert.

stoxx 21. Aug 2011 21:47

AW: Goertzel Algorithmus (Frequenz + Phase)
 
tut mir Leid .. ich hatte mich vorhin bei den Zahlen verschrieben.

(wegen unzureichend getesteter Software wird irgendwann sicher nochmal die Welt untergehen ;)

gib mal ein
Frequenz 300
Amplitude 3
Phase 50
abtastfrequenz 8000
Signaldauer 0,04 oder so

dann Du sehen :)

Peter1999 21. Aug 2011 21:56

AW: Goertzel Algorithmus (Frequenz + Phase)
 
Das geht auch ;) !!

8000 Punkte / Sek * 0,04 Sek = 320 Punkte

--> gewählt Fenstergröße 300 Punkte (weil < 320)

--> gefundene Frequenz 292,333 Hz, das ist natürlich nicht so gut (daher mein Vorschlag mit der Optimierung)

--> Häckchen entfernt: 300 Hz vorgegeben (die würde die Optimierung dann ja auch automatisch finden)

und schwups: Korrektes Ergebnis für Ampl + Phase!

stoxx 21. Aug 2011 23:20

AW: Goertzel Algorithmus (Frequenz + Phase)
 
Liste der Anhänge anzeigen (Anzahl: 1)
schick mal bitte einen Screenshot ..
oder hat Intel jetzt wieder einen Rechenfehler in seiner CPU?
Da der Algo noch "falscher" ist bei Dir, kanns eigentlich gar nich gehen 8-)

stoxx 21. Aug 2011 23:35

AW: Goertzel Algorithmus (Frequenz + Phase)
 
so .. diesen Fehler hab ich jetzt gefunden .. interessant.
Dein altes Delphi7 compiliert (zum Glück) anders .. sonst hätte man das Problem wohl nicht gleich gefunden .. bzw lag es genau daran, was im Buch besprochen wurde, dass es kein "guter" Algorithmus wäre, wegen Fehleranfällgikeit. (hier Fehlerfortpflanzung)

soo .. Deine Normierung werde ich mir also jetzt mal genauer ansehen !

hab vielen Dank ! .. meine Nacht ist gerettet :)
(Die klammer in der For Schleife)


Mit einer Klammer, die Du sicherheitshalber auch noch setzen kannst, geht es auch jetzt bei mir. erstaunlich..


Delphi-Quellcode:
  q1 := 0;
  q2 := 0;
  for i := Fenstergroesse downto 0 do
  begin                              
    q3 := Signal[i]+ ( alpha*q1-q2 );
    q2 := q1;
    q1 := q3;
  end;


  re := q1-(alpha*q2)/2;
  imag := q2 * sin(2 * Pi * Frequenz);

  re := re / Fenstergroesse * 2;
  imag := imag / Fenstergroesse * 2;
im Prinzip kann man sich aber bei diesem Algo die Fenstergröße sparen ...

stoxx 22. Aug 2011 09:10

AW: Goertzel Algorithmus (Frequenz + Phase)
 
Hi Peter,

darf ich Dich noch bissl nerven und Dir nich ein paar Fragen stellen?

wenn ich eine Frequenz von 300 Hz erzeuge, und dann eine Abfrage erstelle, dann kommt für Frequenzen von 750 bis 850 folgendes raus:
Was mich dabei stört, der der Amplitudenwert schwankt zwischen 0,82 und 5 .. obwohl da gar keine Frequenz vorhanden ist.
Meine Vermutung ist jetzt, dass es mit der unpassenden Fenstergröße zusammenhängt.
Was ist also mathematisch die korrekte nächst kleinere Fenstergröße um einen minimalen Fehler zu bekommen?
Hat das was mit diesem Fehler zu tun, von dem hier gesprochen wird?


http://www.dsprelated.com/showmessage/87369/1.php

Und dann noch eine Frage ..
Und weißt Du, ob man den Algorithmus umbauen könnte, die Amplitude zu bestimmen, wenn ich eine Frequenz auf einer bestimmten Phase suche?
Wir haben den Fall, dass wenn im Signal 300 Hz drin sind, mit einer stark abweichenden Phase, dass man dann, wenn man exakt diese Frequenz abfragt, nicht mehr das korrekte Amplitudenmaximum errechnet werden kann. scheinbar fragt der Algo immer Phase Null ab..

Danke Dir schon mal wieder ;)


Delphi-Quellcode:
frequenz: 756 ;real: -2,91582615873547 ;imag: -2,57019064576388 ;Amp: 3,89
frequenz: 760 ;real: -2,33132644235365 ;imag: -4,34704698053365 ;Amp: 4,94
frequenz: 764 ;real: -0,578012729919608 ;imag: -4,99372967714084 ;Amp: 5,03
frequenz: 768 ;real: 1,03 ;imag: -4,03398585057834 ;Amp: 4,17
frequenz: 772 ;real: 1,31 ;imag: -2,18667224046469 ;Amp: 2,55
frequenz: 776 ;real: 0,07 ;imag: -0,815913068896486 ;Amp: 0,82
frequenz: 780 ;real: -1,74999260357873 ;imag: -0,912931983818342 ;Amp: 1,98
frequenz: 784 ;real: -2,79015995586682 ;imag: -2,36906710716151 ;Amp: 3,67
frequenz: 788 ;real: -2,29737731999792 ;imag: -4,07268794135492 ;Amp: 4,68
frequenz: 792 ;real: -0,65868231160542 ;imag: -4,74592185313099 ;Amp: 4,8
frequenz: 796 ;real: 0,9 ;imag: -3,89177044592188 ;Amp: 4
frequenz: 800 ;real: 1,23 ;imag: -2,150048665788 ;Amp: 2,48
frequenz: 804 ;real: 0,1 ;imag: -0,807807734222314 ;Amp: 0,82
frequenz: 808 ;real: -1,63655987839042 ;imag: -0,838429931342038 ;Amp: 1,84
frequenz: 812 ;real: -2,67535127160256 ;imag: -2,18643363723128 ;Amp: 3,46
frequenz: 816 ;real: -2,26671759674278 ;imag: -3,82308911553845 ;Amp: 4,45
frequenz: 820 ;real: -0,733016523832668 ;imag: -4,52076309233921 ;Amp: 4,58
frequenz: 824 ;real: 0,78 ;imag: -3,76345212910821 ;Amp: 3,85
frequenz: 828 ;real: 1,15 ;imag: -2,11850443555382 ;Amp: 2,41
frequenz: 832 ;real: 0,12 ;imag: -0,802207476643857 ;Amp: 0,82
frequenz: 836 ;real: -1,53194381311629 ;imag: -0,771490400560849 ;Amp: 1,72
frequenz: 840 ;real: -2,56954942411791 ;imag: -2,01972832187638 ;Amp: 3,27
frequenz: 844 ;real: -2,23856498360031 ;imag: -3,59452992539954 ;Amp: 4,24
frequenz: 848 ;real: -0,801801997439787 ;imag: -4,31466545944052 ;Amp: 4,39

Peter1999 22. Aug 2011 11:51

AW: Goertzel Algorithmus (Frequenz + Phase)
 
Hallo,

ich versuchs nochmal ganz von Anfang ;) .
Ich muss aber dazu sagen, ich bin KEIN Mathematiker, es kann also alles falsch sein, was ich hier von mir gebe.

1. Du brauchst unbedingt eine Fensterung! Ich weiß ja nicht, wie lang deine Signale sind, aber die DFT (bzw.) der Gortzel benötigt N^2 Rechenoperationen. Wenn du da das ganze Signal als Fenster nimmst, bist du bei 5min*60sek/min*48000samples/sek ganz schnell am Ende des machbaren. HINWEIS: Auch das ganze Signal ist ein Zeitfenster, eben ein Rechteckfenster der max. Größe.
Daher wurde ja die FFT erfunden mit "nur" NlogN Rechenoperationen.

2. Der Goertzel ist KEIN Verfahren zur Frequenzbestimmung! Es ist ein einfacher Algorithmus zur Transformation aus dem Zeit- in den Frequenzbereich. Was hier gemacht wird ist eigentlich eine "Vergewaltigung" des Verfahrens. ANNAHME: es existiert genau EIN (oder mehrere, dann aber im Frequnzbereich weit von einander eintfernte, typischer Fall: Analogtechnik) Signal, einer Frequenz, dessen Amplitude deutlich größer ist als die der Störungen. Was wir hier machen ist also: Suche den gesamten Amplitudengang ab bis du das Maximum gefunden hast und merke dir die zugehörige Frequenz.

3. Da du es IMMER mit einem Zeitfenster zu tun hast (größe hin oder her), hast du es auch IMMER mit den typischen Problemen zu tun. Das wäre in erster Linie die Periodisierung aufgrund der Disketisierung. Daraus folgt der "Abschneidefehler", der mit verschiedenen Fensterfunktionen reduziert werden kann. Häufigstes Beispiel: Hanning. Du hast es also IMMER mit Seitenbändern zu tun. (Schau dir dazu mal den Amplitudengang eines normierten Rechteckfensters an (numerisch oder Laplacetransformierte...ist egal), dann siehst du das Abklingen mit dem Abstand von der "echten" Frequenz.

4. Ich vermute, was du hier geplottet hast ist genau der Effekt der Nebenbänder. Das kann ich aber nicht sicher sagen, da ich deine Parameter nicht genau kenne. Ich habe in meinem Programm mal etwas gespielt, da lande ich bei höheren Frequenzen in der Größenordnung 1% der "echten" Amplitude. Vielleicht ist bei dir aber auch noch ein Fehler im Quelltext ;)

5. Nein, es ist nicht möglich, zu einer Phase die Amplitude zu finden. Jedenfalls ist es nicht sinnvoll. Dann müsstest du den gesamten Phasengang bestimmen (so wie wir es jetzt für die Amplitude machen), bei einer bestimmten Phasenüberschreitung anhalten und dir dann die Amplitude und Frequenz ausgeben lassen. Wenn man so etwas machen will, ist man wieder bei der FFT, die da deutlich schneller ist.

6. Den Goeztzel würde ich eigentlich nur verwenden, wenn ich die Frequenz schon vorher kenne (z.B. Sender-Frequenz) oder wenn ich zwischen zwei Spektrallinien einer FFT eine Interpolation durchführen möchte. Dann kann man sich schnell und mit wenig Aufwand ein paar Stützstellen berechnen, aber KEIN ganzes Spektrum!

7. Du beachtest aber schon die ganze Zeit deinen max. Frequenzinhalt? Es gilt natürlich Shannon! Also Abtastfrequenz / 2 ist deine maximal auswertbare Frequenz. Danach greift wieder die Periodisierung des Spektrums und du bekommst die berühmten Spiegelfrequenzen. Also niedrige Frequenzen tauchen bei höheren Frequenten wieder auf. (vielleicht ist das auch das Problem deiner Amplituden)

8. Die Frequenzauflösung ist immer fest mit der Fenstergröße verbunden! Wenn du also nicht genau auf der richtigen Frequenz landest, geht deine Amplitude nach unten und die Phase läuft dir weg. delta f = 1 / T .

9. Willst du auch diesen Fall absichern, musst du, wie gesagt, ganz anders vorgehen und aus dem Verlauf des Amplitudengangs das Maximum und dem Phasengang die zugehörige Phase bestimmen. (Damit wären wir bei der Eigenfrequenzbestimmung und der modalen Dämpfung ;) ) Das ist dann aber ein ganz anderes Kapitel.

10. Probier mal, ob dein Problem mit den Amplituden auch in meinem Programm auftritt (wenn du die Sachen wie Shannon & Fenstergröße beachtest).

11. Ich habe mein Programm mit Delphi 2009 UND Delphi 7 geschrieben und kompiliert, es funktionieren beide EXEn gleich.

12. Was mir heute morgen eingefallen ist: Es ist natürlich logisch, das die Phasen falsch werden, wenn man am falschen Ende des Zeitfensters anfängt. Das ist dann ja von der Signalfrequenz und der Fenstergröße abhängig. Und deine Buchseite sagte ja auch, man solle rückwärts Summieren.


So, damit habe nun eigentlich alles aufgeschrieben, was ich dir so aus dem Kopf sagen kann. Viel mehr kann ich dir dann sicher auch nicht helfen. Ich kann dir aber noch ein altes DDR-Buch empfehlen: "Experimentelle Festkorpermechanik", VEB Fachbuchverlag, Leipzig 1986. Da ist die Frequenzbereichstransformation schön übersichtlich mit vielen Bildchen für Dummies (damit meine ich mich) erklärt ;)

Viel Glück ;)

stoxx 22. Aug 2011 13:30

AW: Goertzel Algorithmus (Frequenz + Phase)
 
ja .. es ist eine Vergewaltigung des Verfahrens.
ABER
ich kenn mich mit FFT nicht aus, und ich kann nur nachplappern, was ich gelesen habe.
Man braucht bei der FFT immer eine Fensterung .. Genau die entfällt hier.
(Vorteil, da ich einen ganzen Bereich analysieren kann)

Deswegen gibr es auch kein "abflachen" am Fensterrand.
Außerdem ist man bei FFT auf Frequenzen mit Potenzen von 2 beschränkt.
Stimmt das eigentlich, oder wie umgeht man das dann?

Zeitkritisch sind die Sachen erstmal nicht, von daher sind die Rechenoperationen egal.

> 1% der "echten" Amplitude

ja .. das ist zuviel. Ein Algorithmus sollte nicht abhängig von dem Verhälltnis Samplerate/Targetfrequenz sein.

ich werde jetzt folgendes probieren, ich werde die nächst kleinere Fenstergröße wählen, einmal links ansetzen, einmal rechts ansetzen, und den Mittelwert davon bilden.
mal sehen, was dabei rauskommt, somit habe ich alle daten aus dem Fenster, aber mit besserer Amplitude.

> Dann müsstest du den gesamten Phasengang bestimmen

das heißt? .. wüsstest Du denn, wie das geht? würde das auch mit Goertzel gehen?


> aber KEIN ganzes Spektrum!

wie gesagt, da ich den Algo zweckentfremden möchte, ich aber keine Ahnung von FFT habe, würde ich sie nie anwenden, wenn ich nicht das Teil komplett verstanden, also selbst entwickelt habe.
Von daher fällt FFT flach, sonst kommt nur Murcks dabei raus.

Ich hab z.b. jetzt ein Array mit daten, und wenn ich die ersten 2 Elemente weglasse, kann ich über den Phasenwinkel die Verschiebung berechnen, und komme auf "2 Elemente verschoben" .. das ist toll und macht mich glücklich :)

oder andere Frage .. könnte denn die FFT das Gleiche?
Also zu JEDER Frequenz die Amplitude und Phase und zu bestimmen?
In EINEM Rechteck.

Danke für Deine ausführlichen Erklärungen :)

TiGü 22. Aug 2011 15:44

AW: Goertzel Algorithmus (Frequenz + Phase)
 
Zitat:

Zitat von stoxx (Beitrag 1118608)
ja .. es ist eine Vergewaltigung des Verfahrens.
ABER
ich kenn mich mit FFT nicht aus, und ich kann nur nachplappern, was ich gelesen habe.
Man braucht bei der FFT immer eine Fensterung .. Genau die entfällt hier.
(Vorteil, da ich einen ganzen Bereich analysieren kann)

Du brauchst auch eine Fensterung. Zur Zeit hast du ein riesiges Rechteckfenster. Begründung siehe 1. von Peter1999.

Zitat:

Zitat von stoxx (Beitrag 1118608)
Deswegen gibr es auch kein "abflachen" am Fensterrand.

Unkritisch, denn so wie ich verstanden habe, hast du eine handvoll Frequenzen in einer überschaubaren Bandbreite.
Ich rate dringend sich mit elementarer digitaler Signalverarbeitung auseinanderzusetzen. Findet sich genug im Netz dazu.

Zitat:

Zitat von stoxx (Beitrag 1118608)
Außerdem ist man bei FFT auf Frequenzen mit Potenzen von 2 beschränkt.
Stimmt das eigentlich, oder wie umgeht man das dann?

Das stimmt so nicht!
Der Algorithmus arbeitet effizient wenn die Anzahl der Stützstellen / Abtastwerte eine Potenz von zwei ist.

Zitat:

Zitat von stoxx (Beitrag 1118608)
Ein Algorithmus sollte nicht abhängig von dem Verhälltnis Samplerate/Targetfrequenz sein.

Mein Nachrichtentechnik-Studium liegt schon ein bissel zurück, aber was du forderst sehe ich nicht.
Vielleicht missverständlich ausgedrückt?
Kann ja schließlich kein 20 MHz Signal mit 500 Hz abtasten!
Liest sich so, als ob ein Auto unabhängig von Sprit immer gleich gut, weit und schnell fahren soll.


Zitat:

Zitat von stoxx (Beitrag 1118608)
wie gesagt, da ich den Algo zweckentfremden möchte, ich aber keine Ahnung von FFT habe, würde ich sie nie anwenden, wenn ich nicht das Teil komplett verstanden, also selbst entwickelt habe.
Von daher fällt FFT flach, sonst kommt nur Murcks dabei raus.

Schau dir das mal an:
http://www.delphipraxis.net/87967-ff...gorithmus.html

Ansonsten Google -> Delphi + FFT

Des Weiteren gibt es genügend Beispiele für Implementationen in anderen Programmiersprachen.

Wozu brauchst du das eigentlich?

Medium 22. Aug 2011 16:01

AW: Goertzel Algorithmus (Frequenz + Phase)
 
Zitat:

Zitat von stoxx (Beitrag 1118608)
j
oder andere Frage .. könnte denn die FFT das Gleiche?
Also zu JEDER Frequenz die Amplitude und Phase und zu bestimmen?
In EINEM Rechteck.

Genau dafür ist die FT gedacht. Genau dafür. Du kannst die genau so mit einem Rechteck-Fenster voller Breite bestimmen wie den Goertzel. Und auch die Phasen bekommst du da raus. Alles was du so schreibst, klingt nach FFT ;)

Nur die Sache mit Samplerate/Frequenz: Bei Google suchenNyquist Theorem <- einer der elementarsten Grundsätze der Signalverarbeitung. Da kommst du ums Verrecken nicht drum rum, egal wie man sich dreht und wendet. Nicht in diesem Universum.

TiGü 22. Aug 2011 16:03

AW: Goertzel Algorithmus (Frequenz + Phase)
 
Und wenn doch kann er gleich nach Stockholm und sich den Nobelpreis geben lassen. :wink:

stoxx 22. Aug 2011 21:08

AW: Goertzel Algorithmus (Frequenz + Phase)
 
Liste der Anhänge anzeigen (Anzahl: 1)
ups , .. jetzt hab ich ausversehen meinen letzten Post gelöscht ..
wollte eigentlich was ergänzen.

also hier stand im groben .. dass mir das Nyquist Abtasttheorem natürlich klar ist,
und ich was anderes meinte..
nur diese Hügel im spektrum müssen noch raus, und ich überlege noch, wie das ohne irgendwelche Hammingfenster und Glättungen geht .. :)

stoxx 22. Aug 2011 22:50

AW: Goertzel Algorithmus (Frequenz + Phase)
 
Hallo Peter,

ich hab nochmal eine Frage zu Deinem Code.


Also wenn ich einfach Deine Demo so in Delphi starte, und einen Phasenwinkel von 0 einstelle. die Frequenz erzeuge, dann suche.

und wenn ich dann auf Goertzel Button gehe.

dann kommt ein realteil von 0 und ein Imaginäranteil von 7500 raus.
Das entspricht einem Winkel von 90.

und dann korrigierst Du diesen Winkel aber um 90 Grad, so dass ein (zufällig) richtiger Phasenwinkel von 0 rauskommt.

Delphi-Quellcode:
phas := 90 - 180 / Pi * (arctan(imag/re));

Das ist sehr eigenartig. warum stimmt der imaginäre Anteil nicht?
Darf ich fragen, wo Du die Formel her hast?
der Code funktioniert soweit, erstmal .. bei einfachen Frequenzen.
Aber bei vielen Überlagerungen, stimmt das dann auch noch?
Der Imaginärteil bei einem Phasenwinkel von 0 müsste doch Null sein, und der Realteil irgendein positiver Wert, oder bin ich da falsch gewickelt?
Welche Formel hast Du dafür jetzt verwendet?
irgendwie stimmt da was noch nicht, oder was denkst Du?

Medium 23. Aug 2011 00:33

AW: Goertzel Algorithmus (Frequenz + Phase)
 
Zitat:

Zitat von stoxx (Beitrag 1118726)
nur diese Hügel im spektrum müssen noch raus, und ich überlege noch, wie das ohne irgendwelche Hammingfenster und Glättungen geht .. :)

Vergiss es. Schau dir mal die Frequenzantwort eines Rechtecksignals an abs(Bei Google suchensinc) - fällt dir was auf? Genau. Das ist dein Fenster. Anders geht es nicht. Du musst filtern, fenstern, Toleranzen einbauen, einfach intelligentere Logik ansetzen. Das sind einfach Grenzen der Signalverarbeitung. Das kann man doof finden, oder auch nicht. Die sind einfach mal da ;)

stoxx 23. Aug 2011 00:47

AW: Goertzel Algorithmus (Frequenz + Phase)
 
Zitat:

Zitat von Medium (Beitrag 1118749)
Vergiss es. Schau dir mal die Frequenzantwort eines Rechtecksignals an abs(Bei Google suchensinc) - fällt dir was auf? Genau. Das ist dein Fenster. Anders geht es nicht. Du musst filtern, fenstern, Toleranzen einbauen, einfach intelligentere Logik ansetzen. Das sind einfach Grenzen der Signalverarbeitung. Das kann man doof finden, oder auch nicht. Die sind einfach mal da;)

okay :-)

Medium 23. Aug 2011 01:26

AW: Goertzel Algorithmus (Frequenz + Phase)
 
Zitat:

Zitat von stoxx (Beitrag 1118751)
Was meinst Du mit Frequenzantwort eines Rechtecksignals?

Die beiden Bilder rechts: Die Fourier-Transformierte Rechteckfunktion ist (im Realanteil) sinc(x), und abs(sinc(x)) schaut deiner "dreckigen" Funktion extrem ähnlich. Daher scheinen deine "Hügel" schlicht das Ergebnis des mit ältesten Problems der Signalanalyse zu sein: Aliasing. Lösung: Fenstern! Tut mir ja leid. Sinc-ähnliche Spektren sind täglich Brot in der Analyse, und sicherlich schon für viele ein Ärgernis gewesen. Ich spreche da aus Erfahrung :evil:. Fenster sind einfach dein Freund - wobei es da leider eben kein "gut oder schlecht" gibt, sondern nur "der Anforderung entsprechend günstig".

Daher insbesondere, aber auch mal so generell: Du schreibst viel, aber nicht was du überhaupt erreichen willst. Deine Kombi aus ungenauer Beschreibung und Neuheit in Sachen Signalverarbeitung (bzw. der daraus resultierenden Ambivalenzen in der Terminologie) machen das alles hier etwas schwierig. Was genau willst du am Ende haben, und was kommt rein? Bisher scheint mir ja nach wie vor eine günstig gefensterte FFT auf dem gesamten Signal mit anschließender lokaler Maximasuche eine gute Sache zu sein, aber wirklich bewerten kann man das aufgrund deiner Ausführungen nicht so in echt ;)

stoxx 23. Aug 2011 01:38

AW: Goertzel Algorithmus (Frequenz + Phase)
 
Zitat:

Zitat von Medium (Beitrag 1118753)
Fenstern! Tut mir ja leid. Sinc-ähnliche Spektren sind täglich Brot in der Analyse, und sicherlich schon für viele ein Ärgernis gewesen. Ich spreche da aus Erfahrung :evil:. Fenster sind einfach dein Freund - wobei es da leider eben kein "gut oder schlecht" gibt, sondern nur "der Anforderung entsprechend günstig".

da werde ich wohl noch zu tun haben.

Medium 23. Aug 2011 02:39

AW: Goertzel Algorithmus (Frequenz + Phase)
 
Du bleibst schwammig. Du willst einen Nulldurchgang? Nicht? Wann? Wo? Was genau willst du tun!? Feststellen, ob eine ganz bestimmte Frequenz in einem Signal vorliegt? Feststellen, zu welchem Anteil eine bestimmte Frequenz in einem Signal vorliegt? Feststellen, welche Frequenz in einem Signal maximal vorliegt? Feststellen, welche Frequenzen in einem Signal dominieren? Frequenzen suchen, die in bekannter Phase sind? Phasen suchen, in denen eine Frequenz im Signal vorliegt? WAS!? Ein Nulldurchgang ist einfach*, das weisst du ja. Aber was willst du mit diesem anfangen? Ich glaube, du bist so tief in deinem Problem, dass dir das verständliche Erklären des Gesamtproblems für Aussenstehende abhanden gekommen ist. Geht mir selbst öfter als mir lieb ist auch so, aber allein dies zu tun ist oft ja schon 50% der Lösungsfindung - oft dann sogar schon von allein.
Aber ich weiss, trotz Verfolgung des Threads, grad echt nicht, wo bei dir die Glocken hängen. Oder wo sie hängen sollten. Oder klingen sollten :)

*) Eben bei Sign(Signal(t)) <> Sign(Signal(t-1)) bzw. Signal(t) = 0; bei komplexen Signalen (lies: von sin(t) verschieden) aber wird es halt doch scho nwieder ekelig, da dir ein Berg bzw. Tal einer Frequenz den eigentlichen Nulldurchgang einer anderen ins Positive bzw. Negative verschubsen kann (und wird). Und da liegt ja der Hund begraben. Wenn das so einfach wäre, gäb es das sicherlich schon. Für einfache Sinusschwingungen langt doch das Merken ob man einen pos/neg Wechsel hatte, und der Nulldurchgang danach ist's. Aber nochmals: Was für Signale hast du, und was für eine Aussage willst du über dieses treffen?

stoxx 23. Aug 2011 03:12

AW: Goertzel Algorithmus (Frequenz + Phase)
 
Zitat:

Zitat von Medium (Beitrag 1118756)
Du bleibst schwammig. Du willst einen Nulldurchgang? Nicht? Wann? Wo? Was genau willst du tun!? Feststellen, ob eine ganz bestimmte Frequenz in einem Signal vorliegt? Feststellen, zu welchem Anteil eine bestimmte Frequenz in einem Signal vorliegt? Feststellen, welche Frequenz in einem Signal maximal vorliegt? Feststellen, welche Frequenzen in einem Signal dominieren? Frequenzen suchen, die in bekannter Phase sind? Phasen suchen, in denen eine Frequenz im Signal vorliegt? WAS!? Ein Nulldurchgang ist einfach*, das weisst du ja. Aber was willst du mit diesem anfangen? Ich glaube, du bist so tief in deinem Problem, dass dir das verständliche Erklären des Gesamtproblems für Aussenstehende abhanden gekommen ist. Geht mir selbst öfter als mir lieb ist auch so, aber allein dies zu tun ist oft ja schon 50% der Lösungsfindung - oft dann sogar schon von allein.
Aber ich weiss, trotz Verfolgung des Threads, grad echt nicht, wo bei dir die Glocken hängen. Oder wo sie hängen sollten. Oder klingen sollten :)




Was ich möchte? .. Freqenzen finden, bestimmte .. die wichtigsten Frequenzen.
Rauschen rauschschneiden (Tiefpassfilter) und Signalrekonstruktion aus den übriggebliebenen und gewählten Frequenzen.

TiGü 23. Aug 2011 08:49

AW: Goertzel Algorithmus (Frequenz + Phase)
 
Zitat:

Zitat von stoxx (Beitrag 1118758)
Was ich möchte? .. Freqenzen finden, bestimmte .. die wichtigsten Frequenzen.
Rauschen rauschschneiden (Tiefpassfilter) und Signalrekonstruktion aus den übriggebliebenen und gewählten Frequenzen.

1. Welche Bandbreite hat das Signal?
2. Welche Frequenzen sind gesucht?
3. Kann man das konkretisieren, also weißt du welche Frequenzen GENAU gesucht werden?
4. Willst du den Phasenunterschied zwischen zwei oder mehr Frequenzen wissen?
5. Wenn ja, wozu?
6. Gibt es Einschränkungen für die Abtastrate?
7. Mit welchen SNR ist zu rechnen?
8. Ist das Rauschen frequenzmäßig immer kleiner als die gesuchten Frequenzen?

Mich beschleicht das Gefühl, dass du dich in einer Lösung verrannt hast und nicht mehr das große Ganze siehst bzw. dich auf den Goertzel-Algorithmus versteift hast.

Am besten wäre es, wenn du mit MATLAB bzw. Scilab erstmal eine funktionierende Lösung bastelst.
So kannst dich voll und ganz auf das Problem konzentrieren, ohne dich mit den Feinheiten der Delphi-Programmierung bzw. der verwendeten Algorithmen auseinandersetzen zu müssen.

stoxx 23. Aug 2011 10:32

AW: Goertzel Algorithmus (Frequenz + Phase)
 
doch noch kurz zu Deinen Fragen ...

Zitat:

Zitat von TiGü (Beitrag 1118806)
1. Welche Bandbreite hat das Signal?

das möchte ich ja herausfinden :-)

Zitat:

Zitat von TiGü (Beitrag 1118806)
1. Welche Bandbreite hat das Signal?

das sehe ich erst dann, im Moment sehe ich nur per "Auge" eine zyklik, die ich näher bestimmen möchte.

Zitat:

Zitat von TiGü (Beitrag 1118806)
4. Willst du den Phasenunterschied zwischen zwei oder mehr Frequenzen wissen?

ja, sehr wichtig.

Zitat:

Zitat von TiGü (Beitrag 1118806)
7. Mit welchen SNR ist zu rechnen?

darf ich fragen, was das ist?

Zitat:

Zitat von TiGü (Beitrag 1118806)
8. Ist das Rauschen frequenzmäßig immer kleiner als die gesuchten Frequenzen?

nicht unbedingt ..


der korrekte Goertzel Algo, der auch den korrenten imaginär und realteil liefert, steht überigens auf der Buchseite, die ich hier schon gepostet habe vor ein paar Tagen ;-)
man muss nur lesen können ..

TiGü 23. Aug 2011 12:52

AW: Goertzel Algorithmus (Frequenz + Phase)
 
Zitat:

Zitat von stoxx (Beitrag 1118852)
Zitat:

Zitat von TiGü (Beitrag 1118806)
1. Welche Bandbreite hat das Signal?

das möchte ich ja herausfinden :-)

Nein, sowas weiß man vorher!

Hast du es mit Audiofrequenzen zu tun? Seismische Wellen? Hoch- Höchst- oder Mikrowellensignalen?
Hast du ein Tiefpasssignal oder musst du erst was von einer Trägerfrequenz demodulieren?

Ich nehme an, zumindest interpretiere ich so die vorigen Posts, du hast Audiosamples als Dateien bzw. direkt von der Soundkarte.
Hier wäre eine Abtastrate von min. 44,1 kHz zu empfehlen

Zitat:

Zitat von stoxx (Beitrag 1118852)
Zitat:

Zitat von TiGü (Beitrag 1118806)
1. Welche Bandbreite hat das Signal?

das sehe ich erst dann, im Moment sehe ich nur per "Auge" eine zyklik, die ich näher bestimmen möchte.

Ist wohl die Antwort auf Frage zwei.
Was möchtest du da näher bestimmen?

Zitat:

Zitat von stoxx (Beitrag 1118852)
Zitat:

Zitat von TiGü (Beitrag 1118806)
4. Willst du den Phasenunterschied zwischen zwei oder mehr Frequenzen wissen?

ja, sehr wichtig.

Warum ist das sehr wichtig?

Zitat:

Zitat von stoxx (Beitrag 1118852)
Zitat:

Zitat von TiGü (Beitrag 1118806)
7. Mit welchen SNR ist zu rechnen?

darf ich fragen, was das ist?

Du darst, und zwar Mr. Google.
Hör mal, wir können dir nicht die Grundlagen von (digitaler) Signaltheorie und -Verarbeitung beibringen, dass musst du schon selber tun.
Das Internet ist voller Informationen dazu.
Bspw. http://books.google.de/books?id=_Ep5...page&q&f=false
Seite 160 würde ich mir mal an deiner Stelle genauer anschauen.

Zitat:

Zitat von stoxx (Beitrag 1118852)
Zitat:

Zitat von TiGü (Beitrag 1118806)
8. Ist das Rauschen frequenzmäßig immer kleiner als die gesuchten Frequenzen?

nicht unbedingt ..

Was heißt das, dass klingt sehr schwammig! Aber die Frage korrespondiert mit Frage eins und zwei.

Zitat:

Zitat von stoxx (Beitrag 1118852)
der korrekte Goertzel Algo, der auch den korrenten imaginär und realteil liefert, steht überigens auf der Buchseite, die ich hier schon gepostet habe vor ein paar Tagen ;-)
man muss nur lesen können ..

Das ist sehr schön für dich, bringt dich aber keinen Deut weiter.

Soweit ich das deinen spärlichen Erklärungen entnehmen kann, hast du ein Signal mit unbekannter Bandbreite, daher auch keine Information über die notwendige Abtastfrequenz, so dass du diese so hoch wie möglich ansetzen musst.
Des Weiteren weißt du nicht die konkreten Werte der gesuchten Frequenzen, diese scheinen zufällig zu sein.
Du willst aber diese finden, über deren SNR.
Wenn irgendwelche Frequnzen über einen Peak sichtbar werden, also deutlich über dem allgemeinen Rauschen liegt, dann hast du die von dir gewünschte "Zyklik", richtig?

Wenn du die gesuchten Frequenzen nicht genau weißt, dann hast du mit den Goertzel-Algorithmus das falsche Werkzeug gewählt.
Dieser wurde entwickelt, um BESTIMMTE und VORHER BEKANNTE Frequenzen aus einen Signal zu filtern.
Das hätte aber durch ein aufmerksames Lesen bei der deutschen und englischen Wikipedia eigentlich klar sein müssen.

Ich hoffe du machst das nicht für eine Diplomarbeit oder ähnliches, denn dann hättest du ziemlich viel Zeit verplempert!

stoxx 23. Aug 2011 18:43

AW: Goertzel Algorithmus (Frequenz + Phase)
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von TiGü (Beitrag 1118931)
Nein, sowas weiß man vorher!

ja .. natürlich weiß ich die Bandbreite in etwa vorher, soviel geben die Daten ja auch nicht her. bzw nicht alles ist sinnvoll. Hab mich da wohl etwas missverständlich ausgedrückt.

Zitat:

Zitat von TiGü (Beitrag 1118931)
Hast du es mit Audiofrequenzen zu tun? Seismische Wellen? Hoch- Höchst- oder Mikrowellensignalen?
Hast du ein Tiefpasssignal oder musst du erst was von einer Trägerfrequenz demodulieren?

ich muss gar nichts, ich möchte Finanzzeitreihen auseinander dröseln. 8-)


Zitat:

Zitat von TiGü (Beitrag 1118806)
1. Welche Bandbreite hat das Signal?

jee nach Auflösung die man haben will, da es ja keine Audiofrequenzen sind, muss das eh noch umgerechnet werden auf Zyklen ( Wellenlänge der Frequenz)

Zitat:

Zitat von TiGü (Beitrag 1118806)
Warum ist das sehr wichtig?

na sehr wichtig, sonst Murks

Zitat:

Zitat von TiGü (Beitrag 1118806)
Hör mal, wir können dir nicht die Grundlagen von (digitaler) Signaltheorie und -Verarbeitung beibringen, dass musst du schon selber tun.
Das Internet ist voller Informationen dazu.
Bspw. http://books.google.de/books?id=_Ep5...page&q&f=false
Seite 160 würde ich mir mal an deiner Stelle genauer anschauen.


also für die schöne Buchempfehlung lässt man sich ja gern mal runtermachen ! :-D
Ich nehms nicht persönlich. Aber danke, das Buch schaut wirklich gut verständlich geschrieben aus.


Zitat:

Zitat von TiGü (Beitrag 1118806)
Das ist sehr schön für dich, bringt dich aber keinen Deut weiter.

ich finde, Du bist sehr gefangen in Deinem Denken.
Was bitte hätte die FFT für Vorteile?
gar keine, weder für mich, noch für Dich.
der Goertzel Algorithmus ist sehr robust. Ich brauch keine Fensterung, nix .
im Gegenteil, jetzt lässt sich sehr simpel ein Sliding Goertzel Algo implementieren.

Zitat:

Zitat von TiGü (Beitrag 1118806)
daher auch keine Information über die notwendige Abtastfrequenz, so dass du diese so hoch wie möglich ansetzen musst.

zu hoch ist bei Finanzzeitreihen nicht sinnvoll. Alles eine Frage der "machbarkeit" und Umsetzbarkeit.


Zitat:

Zitat von TiGü (Beitrag 1118806)
Des Weiteren weißt du nicht die konkreten Werte der gesuchten Frequenzen, diese scheinen zufällig zu sein.
Du willst aber diese finden, über deren SNR.
Wenn irgendwelche Frequnzen über einen Peak sichtbar werden, also deutlich über dem allgemeinen Rauschen liegt, dann hast du die von dir gewünschte "Zyklik", richtig?

Zitat:

Zitat von TiGü (Beitrag 1118806)
Wenn du die gesuchten Frequenzen nicht genau weißt, dann hast du mit den Goertzel-Algorithmus das falsche Werkzeug gewählt.

Wiiiieso? .. er arbeitet perfekt !


Zitat:

Zitat von TiGü (Beitrag 1118806)
Ich hoffe du machst das nicht für eine Diplomarbeit oder ähnliches, denn dann hättest du ziemlich viel Zeit verplempert!

Du bist ganz schön überheblich, aber ich nehm es Dir nicht übel. ich bin Querdenker, jawohl ...

Dann die Preisfrage .. um Dich wieder runter zu bringen.
Nimm das Beispielprogramm von Peter. bastel eine FFT da rein. (aber bitte ohne Zerstückelung und Fensterung)
dann überlager 2 Schwingungen mit 2 Frequenzen. 50 und 100 Hertz.
einmal amplitude 3 und amplitude 4.

Und gib Dir mal schnell das Spektrum aus.
Schafft das die FFT genauso sauber, mathematisch korrekt wie der Goertzel?
(Bild im Anhang)
Und dann rekonstruiere die Funktion!
oder sind Handstände nötig? komische Hanning oder Blackman Fenster?

Und das wichtigste, bekommst Du die exakten Phasen und Amplituden dazu?
also kannst Du die Funktion aus Rekonstruieren?

TiGü 23. Aug 2011 21:26

AW: Goertzel Algorithmus (Frequenz + Phase)
 
http://www.scilab.org/products/scilab/download

Runterladen -> Installieren -> Öffnen
Im Menü auf 'Applications' klicken -> SciNotes

im Editorfenster folgendes eingeben:

Code:
clc
clf()

f1 = 50
f2 = 100
a1 = 3
a2 = 4
sample_rate = 1000

t = 0: 1/sample_rate : 1/8 * %pi

N = size(t,'*')
f = sample_rate * (0:(N/4))/N
n = size(f,'*')

w1 = 2 * %pi * f1
w2 = 2 * %pi * f2

y1 = a1 * sin(w1*t)
y2 = a2 * sin(w2*t)
y3 = y2 + y1

spekt = fft(y3)

ispekt = ifft(spekt)

subplot(311)
plot(t,y3);

subplot(312)
plot(f,abs(spekt(1:n)))

subplot(313)
plot(ispekt)
Abspeicheren -> auf den Play Button drücken -> Fertig!

Peter1999 23. Aug 2011 22:13

AW: Goertzel Algorithmus (Frequenz + Phase)
 
Also ich habe jetzt mal mit Absicht ein Weilchen nix mehr geschrieben und nur mitgelesen.

Wahrscheinlich bekomme ich jetzt auch Schläge für meine Meinung, aber egal.

stoxx, was immer du vor hast (mir ist es noch immer nicht zu 100% klar) ist scheinbar nicht "mal schnell" mit dem Abtippen eines bestehenden Algorithmus getan. Erst dachte ich, es ginge um eine diskrete Frequenz, inzwischen sind wir fast bei Breitband-Rauschsignalen. Jetzt kommt plötzlich auch noch die Filterung ins Spiel. Was denn da wieder: Quasi-Analogfilter ala Butterworth / Chebychev oder FFT-Filter? Hast du eigentlich eine Vorstellung, um wie viel schwieriger eine Rekonstruktion eines "beliegigen" Signals aus dem Frequenzbereich ist, wenn nach der Fenster-Zerstückelung wieder etwas brauchbares herauskommen soll.
Für mich schreit hier alles nach FFT (vergiss den Gortzel). Danach solltest du dich intensiv mit der spektralen Leistungsdichte beschäftigen, dann mit dem Leakage-Effekt (Fensterfunktionen), dann mit den Folgen der Fensterung (Amplitudenverfälschung!) und DANN anfangen zu programmieren. Die Frage, was du mit einer Phase willst, die logischerweise für jedes Zeitfenster (typische Überlappung 50 %, typische Größe 1024-4096 Samples) reine Willkür ist, hast du auch noch nicht klar beantwortet.

Das klingt vielleicht böse, aber man besucht ja nicht (nur) aus Spaß 1-4 Semester zur digitalen Signalverarbeitung. Das ist eben nicht ganz so einfach. Und mir stellt sich gerade die Frage, ob dieses Forum hier geeignet ist, eine Grundlagenvorlesung zu vermitteln.

Bitte nicht steinigen ;) , aber ich glaube, du hast inzwischen viele Hinweise für ein Selbststudium bekommen und hier wird sich niemand finden, der dir dein Programm schreibt.

Sorry ;)

stoxx 23. Aug 2011 22:24

AW: Goertzel Algorithmus (Frequenz + Phase)
 
Hi Tigü
gut .. ich glaub Dir auch so. :)
das mach ich später mal irgendann, scheint ein interessantes Programm zu sein.


wobei ich nicht weiß, wie dort die Fensterung stattfand ..
ich mag lieber sachen, in denen ich mich irgendwie auskenne.

.. es funktioniert, vielen Dank allen.

stoxx 23. Aug 2011 22:34

AW: Goertzel Algorithmus (Frequenz + Phase)
 
Zitat:

Zitat von Peter1999 (Beitrag 1119126)
Also ich habe jetzt mal mit Absicht ein Weilchen nix mehr geschrieben und nur mitgelesen.

Wahrscheinlich bekomme ich jetzt auch Schläge für meine Meinung, aber egal.

stoxx, was immer du vor hast (mir ist es noch immer nicht zu 100% klar) ist scheinbar nicht "mal schnell" mit dem Abtippen eines bestehenden Algorithmus getan. Erst dachte ich, es ginge um eine diskrete Frequenz, inzwischen sind wir fast bei Breitband-Rauschsignalen. Jetzt kommt plötzlich auch noch die Filterung ins Spiel. Was denn da wieder: Quasi-Analogfilter ala Butterworth / Chebychev oder FFT-Filter? Hast du eigentlich eine Vorstellung, um wie viel schwieriger eine Rekonstruktion eines "beliegigen" Signals aus dem Frequenzbereich ist, wenn nach der Fenster-Zerstückelung wieder etwas brauchbares herauskommen soll.
Für mich schreit hier alles nach FFT (vergiss den Gortzel). Danach solltest du dich intensiv mit der spektralen Leistungsdichte beschäftigen, dann mit dem Leakage-Effekt (Fensterfunktionen), dann mit den Folgen der Fensterung (Amplitudenverfälschung!) und DANN anfangen zu programmieren. Die Frage, was du mit einer Phase willst, die logischerweise für jedes Zeitfenster (typische Überlappung 50 %, typische Größe 1024-4096 Samples) reine Willkür ist, hast du auch noch nicht klar beantwortet.



Sorry ;)

Danke für die vielen Hinweise. interssante Stichworte.
Allerdings sagt mir der Text auch, dass Du mir meine eigenen Wünsche ausreden willst.
Na klar ist die Phase wichtig, ich muss doch relativ zum Bezugspunkt wissen, wo eine Schwingung startet.
Ich wollte gar nicht mehr wissen und nur den Goetzel Algorithmus zum Funktionieren bringen.
Er tut alles, was eine FFT auch kann, vielleicht etwas langsamer. Denkbar.
Für die Anwendungen habe ich schon Ideen, und das ist wichtig.

Wenn ich ein Signal habe, was Sinusförmig aussieht, dann wollte ich eben mal für die Erkennung nix selbst Gebasteltes, sondern einfach mal was anderes.
Leakage Effect gibts hier nicht, da ich ein großes Fenster betrachte, keine Zerstückelung.

stoxx 24. Aug 2011 01:45

AW: Goertzel Algorithmus (Frequenz + Phase)
 
Liste der Anhänge anzeigen (Anzahl: 2)
Zitat:

Zitat von TiGü (Beitrag 1119115)
http://www.scilab.org/products/scilab/download

Runterladen -> Installieren -> Öffnen
Im Menü auf 'Applications' klicken -> SciNotes

bevor ich ein halbes Gigabyte installiere .. kannst Du bitte nochmal schnell ein Screenshot vom Spektrumverlauf machen?

Ist der Spektrumverlauf wirklich auch so spitz verlaufend wie in meinem Bild?
oder runde Berge?
wie breit sind die zwei Bänder?
oder nur erkannte Frequenzen in Form von zwei Histogrammbalken?

Ich wette, mit der FFT bekommt man nur so einen Quatsch hin wie im Bild im Anhang, was man dann Glätten muss.
Ich weiß, ihr glaubt mir nicht, aber der Goertzel kann leakagefrei programmiert werden.
ich weiß es irgendwie einfach, ich weiß auch, wie ich den leakage Effekt vermieden habe, und ich denke, das geht nur bei diesem Algorithmus, sonst hätte man es bei de FFT schon längst getan, und müsste sich nicht mit Blackman und anderen Hamming Windows rumägern.
man, was da eine Wissenschaft draus gemacht wird .. tsss
Und vor allen Dingen hat man schon in der allerersten Stufe der Verarbeitung schon nicht mehr das Original Signal.
Ich denke, wenn es um die Auswertung von empfindlichen Daten geht, ist das sehr wichtig.
Wenn man nur ein Pipsignal erkennen will, dann ist das natürlich völlig egal.

nun gut :)
einfach vergleichen ob rund oder spitz :)

ich denke, alle bekommen nur sowas hin:

http://www.mstarlabs.com/dsp/goertzel/goertzel.html

(bin über die Arroganz gegenüber einem Nicht so Versierten und vermeintlich dummen Entwickler etwas verärgert, aber ich sage nicht, wie ich das gelöst habe, das Forum ist nicht dazu da, Expertenwissen zu vermitteln)
.. ich bin mir seehr sicher .. dass das der exakte Verlauf des Spektrums ist !

stoxx 24. Aug 2011 02:29

AW: Goertzel Algorithmus (Frequenz + Phase)
 
hier sieht man nochmal interaktiv, wie mit schwerem Gerät der Leakage Effect bearbeitet werden will.

http://heliso.tripod.com/java_hls/gccs/leakage.htm

(diese Hügel gibts bei meiner Goertzelprogrammierung nicht mehr)

Und so ganz trivial scheint es bei der normalen FFT nicht zu sein !
hier im Patent wird auch nur von "low leakage" gesprochen, nicht von komplett weg.

http://www.docstoc.com/docs/53506511...Patent-6882947


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:38 Uhr.
Seite 1 von 3  1 23      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz