www.mikrocontroller.net

Forum: Digitale Signalverarbeitung / DSP Goertzel-Algorithmus

Autor: Andy (Gast)
Datum: 26.11.2006 16:25

Hallo!

Hat schon mal jemand versucht mit einem AVR einen Goertzel-Algorithmus
zu implementieren (in ASM oder C), wie er von einem DTFM-Demodulator
verwendet wird?
Ich möchte aus einer Folge von Samples des A/D-Wandlers den
50Hz-Brummton-Anteil nach Amplitude herausrechnen und damit
Näherungssensor realisieren. (Metallplatte + AC-gekoppelter
Darlington-Vorverstärker => A/D-Wandler).
Leider hab ich im Internet viele Dokumente gefunden, die den Algorithmus
als solches beschreiben, aber keine vernünftige Implementierung.

Danke schonmal im voraus!
Autor: Klaus B (Gast)
Datum: 26.11.2006 18:31

Autor: ajax (Gast)
Datum: 26.11.2006 21:00

Um den Brumton herauszurechnen brauchst Du keinen Goertzel-Algorithmus.
Einen gleitenden Mittelwert über 20ms reicht. Damit wird der 50 Hz Ton
exakt weggemittelt. So wird das üblicherweise in der Meßtechnik gemacht.
Autor: Björn (Gast)
Datum: 27.11.2006 10:18

Ein gleitener Mittelwert ist doch nichts anderes als ein
FIR-Tiefpassfilter. In Abhängigkeit der Abtastrate werden die 50 Hz (und
alle höhren Frequenzen eben auch) mehr oder weniger gedämpft - DAS ist
ja in der Regel eben nicht das was man will.
IIR-Filter als Bandsperre kann eine Lösung sein bzw. wenn unter 50 Hz
nichts passiert, einfach einen Hochpass. Goertzel ist im Prinzip ja ne
Bandpass...
Autor: ajax (Gast)
Datum: 27.11.2006 17:50

> In Abhängigkeit der Abtastrate werden die 50 Hz (und
> alle höhren Frequenzen eben auch) mehr oder weniger gedämpft - DAS ist
> ja in der Regel eben nicht das was man will.

Doch, dass ist in der Regel genau das was man will. Wenn man einen
gleitenden Mittelwertfilter als FIR-Filter analysiert und die
Übertragungsfunktion betrachtet, sieht man das sie bei 50 Hz exakt Mull
ist.

Für die oben genannte Anwendung zu Filterung des Signals eines
Näherungssensors dürfte dieses Verfahren ausreichend sein, wenn man
keine Reaktionszeit schneller als 50ms fordert.
Autor: sati (Gast)
Datum: 06.03.2007 16:17

weisst jemand mit welchem  Parameterschätzung Algorithmus ich ein
bestimmte frequenz detektieren kann?danke im vorraus.
Autor: Läubi Mail@laeubi.de (laeubi) Benutzerseite
Datum: 16.04.2008 10:41

Ich kram den Thread nochmal hervor ;)
Hab nämlich ne Frage zum Algorithmus die anscheined nirgends erwähnung
findet (zu leicht??) und zwar, muß man die Meßwerte der A/D Wandlung
irgenwie transformieren?
Oder kann ich einfach den Wert des ADC Wandlers des AVRs in den
Algorithmus geben und gut ist?
Autor: Christoph Kessler (Firma db1uq) (christoph_kessler)
Datum: 16.04.2008 12:11

Ich vermute, der muß in eine "signed" Festkommazahl umgewandelt werden.
ich meine das geht mit zweimal decrementieren des oberen Byte der 10 Bit
vom ADC:
$03FF -> $01FF = +511, $0000 -> $FE00 = -512
Autor: Läubi Mail@laeubi.de (laeubi) Benutzerseite
Datum: 16.04.2008 16:04

Naja das ich das ganze irgenwei in einen "anderen" Datentyp qutsche hab
ich mir schon gedacht aber so ganz klar ist mir nicht ob das reicht,
oder ob ich das ganze auf z.B. ein -1 .. 1 Intervall abbilden muss.

Mein "Plan" ist, ich möchte so eine Aussteuerungsanzeige wie bei Winamp
aber nur für eine Frequenz.
Daher wollte ich das Audiosignal abtasten und mit dem Goertzel
Algorithmus die Ausstuerhöhe berechnen.
Autor: Helmut Lenzen (helmi1)
Datum: 18.04.2008 17:55

Beitrag "Wo Welchen DTMF Decoder"

Goertzel Algo fuer DTMF

Gruss Helmi
Autor: Läubi Mail@laeubi.de (laeubi) Benutzerseite
Datum: 23.04.2008 14:30

So, das hab ich jezt soweit verstanden habe nurnoch ein "Problem".
Jezt habe ich ja das Ergebnis nach Realteil ( = Amplitude??) und
Imaginärteil (Phase).
Muß ich jezt mit wurzel(re² + im²) noch rumrechnen für eine Aussteuerung
al'a WinAmp? Oder reicht mir da im Prinzip der Absolutwert des
Realteils?

So ganz steig ich da leider jezt nicht durch, bei den ganzen DTMF
Beispielen wird ja einfach nur geguckt ob das Ergebnis > einem Wert ist,
ich würde aber halt gerne irgenwie ne Beziehung Wert <--> Aussteuerung
herstellen können.
Autor: Läubi Mail@laeubi.de (laeubi) Benutzerseite
Datum: 24.04.2008 14:22

Achja und noch eine Sache die mich beschäftigt: Welchen Wertebereich
nehmen Q1 und Q2 maximal an? kann man das berechnen? Im
Sourcecodebeispiel wurde das ja mit 16bit gelöst, in meinen Versuchen
mit einem PC Programm kommen aber deutlich werte > 16bit vor.

Antwort schreiben

Die Angabe einer Email-Adresse ist freiwillig. Wenn Sie automatisch per Email über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Suchfunktion und Betreffsuche benutzen - vielleicht gibt es schon einen ähnlichen Beitrag
  • Aussagekräftigen Betreff wählen
  • Im Betreff angeben um welchen Controllertyp es geht (AVR, PIC, ...)
  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang
  • JPEG-Dateien (.jpg) nur für Fotos verwenden, Schaltpläne, Screenshots usw. als PNG oder GIF anhängen

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [pre]vorformatierter Text (z.B. Code in anderen Sprachen)[/pre]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel





Hinweis: der Originalbeitrag ist mehr als 6 Monate alt.

webmaster@mikrocontroller.netImpressumWerbung auf Mikrocontroller.net