AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Goertzel Algorithmus (Frequenz + Phase)

Ein Thema von stoxx · begonnen am 20. Aug 2011 · letzter Beitrag vom 4. Okt 2011
Antwort Antwort
Benutzerbild von stoxx
stoxx

Registriert seit: 13. Aug 2003
1.111 Beiträge
 
#1

Goertzel Algorithmus (Frequenz + Phase)

  Alt 20. Aug 2011, 21:59
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 !
Angehängte Dateien
Dateityp: zip Goertzel.zip (224,6 KB, 65x aufgerufen)
Phantasie ist etwas, was sich manche Leute gar nicht vorstellen können.

Geändert von stoxx (20. Aug 2011 um 22:29 Uhr)
  Mit Zitat antworten Zitat
Peter1999

Registriert seit: 13. Dez 2007
Ort: Dresden
88 Beiträge
 
Delphi XE2 Professional
 
#2

AW: Goertzel Algorithmus (Frequenz + Phase)

  Alt 20. Aug 2011, 22:48
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...
  Mit Zitat antworten Zitat
Benutzerbild von stoxx
stoxx

Registriert seit: 13. Aug 2003
1.111 Beiträge
 
#3

AW: Goertzel Algorithmus (Frequenz + Phase)

  Alt 21. Aug 2011, 04:37
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?
Phantasie ist etwas, was sich manche Leute gar nicht vorstellen können.

Geändert von stoxx (21. Aug 2011 um 07:37 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von stoxx
stoxx

Registriert seit: 13. Aug 2003
1.111 Beiträge
 
#4

AW: Goertzel Algorithmus (Frequenz + Phase)

  Alt 21. Aug 2011, 06:09
....
Phantasie ist etwas, was sich manche Leute gar nicht vorstellen können.

Geändert von stoxx (21. Aug 2011 um 07:07 Uhr)
  Mit Zitat antworten Zitat
Peter1999

Registriert seit: 13. Dez 2007
Ort: Dresden
88 Beiträge
 
Delphi XE2 Professional
 
#5

AW: Goertzel Algorithmus (Frequenz + Phase)

  Alt 21. Aug 2011, 18:49
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...
Angehängte Dateien
Dateityp: rar Goertzel.rar (228,5 KB, 77x aufgerufen)
  Mit Zitat antworten Zitat
Benutzerbild von stoxx
stoxx

Registriert seit: 13. Aug 2003
1.111 Beiträge
 
#6

AW: Goertzel Algorithmus (Frequenz + Phase)

  Alt 21. Aug 2011, 19:59
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
Angehängte Grafiken
Dateityp: png 2011 (08) 21.Aug [19-43-20].png (29,8 KB, 85x aufgerufen)
Angehängte Dateien
Dateityp: pas uCalc_Goertzel_Mathworks.pas (4,8 KB, 45x aufgerufen)
Phantasie ist etwas, was sich manche Leute gar nicht vorstellen können.

Geändert von stoxx (21. Aug 2011 um 20:20 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:41 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz