Hallo Fachleute, lese immer wieder von FFT usw. Kenn mich da nicht aus. Frage: Ist es möglich und sinnvoll mit einem Rechner (AVR) zwei Frequenzen aus einem verrauschtem Signal zu holen oder ist man mit OP-Filtern besser dran? Denke da an FSK-Signale usw. Gruss Kurt
Es kommt darauf an ob man Hard- oder Softwareaufwand treiben will. Möglich ist es jedenfalls.
Hallo Hubert, danke für die schnelle Antwort. Möchte das "beste" rausholen. Heisst, welches Verfahren bringt das bessere Ergebniss. Mit einem 8-Pin-AVR wäre der Platzbedarf sehr gering und es sind keine Abgleich-Einstellungen nötig. Ebenso wäre eine Parameteränderung in SW machbar. Über die Kosten hab ich noch nicht nachgedacht. Die Frequenzen welche ich meine liegen im Bereich von 500 ..2000 Hz. Kurt
Für FSK wären wohl mehrere Bandpassfilter mit Opamp besser, denn ein AVR schafft nur etwa 20-150 FFTs pro Sekunde. Die maximale erreichbare Bitrate liegt damit auf jedenfall im unteren zweistelligen Bereich. Ein gut dimensionierter Bandpass mit einem Opamp ist da auf jedenfall schneller und besser. FFT ist eigentlich nur gut, wenn man sehr viele Frequenzen haben. Um eine einzelne zu filtern sollte man FIR Filter verwenden. Wie gut das mit FIR Filtern geht weiß ich nicht, aber spätestens wenn man diese auf einem echten DSP betreibt, dann ist es den Opamps überlegen.
2kHz, d.h. du hättest bei 16MHz Taktfrequenz des AVRs 8000 Zyklen Zeit je Sample. Wie sollen die Frequenzen wieder ausgegeben werden? An deiner Stelle würde ich eher zu einem IIR-Filter greifen. Bei ordentlicher Dimensionierung erreichst du was den Betrag angeht mit weniger Rechnerei bessere Ergebnisse. Du musst nur aufpassen, wie wichtig die Phasenlage der beiden Frequenzen ist. Prinzipiell sollte es gehen, du solltest es aber in ASM proggen, um die maximale Performance zu erzielen.
Es geht mir im Prinzip darum wieder saubere 0/1 sen zu bekommen (Ersatz für den TCM3105). Es würde ausreichen wenn ein Port-Pin umschaltet und damit das vorhandensein der jeweiligen Frequenz anzeigt. Wieweit hier Phasenverzerrungen mitspielen kann ich nicht beurteilen. Beim 3105 ist dafür ein Poti vorhanden welches die Umschaltschwelle anpasst. Kurt
Schau mal nach Goertzel-Filter. Für einzelne Frequenzen prima und rechnen mit weniger Aufwand als FFT.
Also für digitale Filterung braucht man überhaupt kein FFT. Das ist großer Quatsch. Digitale Filter kommen in zwei Formen vor: FIR (Finite Response Filter) und IIR (Infinite Response Filter). Beide Formen haben ihre Vor- und Nachteile, gemeinsam ist aber, daß sie mit Additionen und Multiplikationen auskommen. Ich habe dazu mal eine Ausarbeitung für das Studium gemacht, die hier zu finden ist: http://users.4finger.net/~smay/studium/po_fhl/ Designen lassen sich diese Filter z.B. mit Matlab, was man als Testversion sogar kostenlos bekommt. Obige URL enthält dazu auch Beispiele. Aus Matlab heraus können die Koeffizienten der Filter leicht verwendet werden. Die Implementation eines Digitalen Filters ist auch sehr simpel, wenn man die Grundstruktur verstanden hat. ciao, Stefan.
"braucht man überhaupt kein FFT" Nicht unbedingt 100% richtig. Der erwähnte Goertzel Algorithmus basiert auf der FFT.
Hallo Stefan, hui das sind Formeln! Muss mich erst in die Materie "eindenken" ". Die Implementation eines Digitalen Filters ist auch sehr simpel, wenn man die Grundstruktur verstanden hat." Dieses Verständniss ist noch ausstehend. Gruss Kurt
The Scientist and Engineer's Guide to Digital Signal Processing Gibt es frei als pdf und lässt keine Fragen offen.
Hey Kurt, Laß Dich nicht durch die Formeln erschlagen. Schau Dir die Struktur der Filter an und denke Dir z^-1 als Speicherstelle. (+) ist eine Addition, (x) eine Multiplikation. Das ganze mußt Du nachbauen. Du kannst auch im Internet schauen, es gibt fertige Implementationen eines FIR-Filters. Die sind aber alle nicht auf 8-bit optimiert. Für das Verständnis des Alghorithmus ist das aber gut zu gebrauchen. ciao, Stefan.
Weshalb holt ihr immer gleich den großen Hammer raus (FFT, FIR, ..) Für zwei Frequenzen sind das nur 4 Multiplikationen und Additionen pro Sample. Außerdem ist man mit der DFT nicht an 2^n Abtastwerte gebunden. Man kann auch zwei ungerade Frequenzen ausfiltern.
Also ich hole den Hammer raus, weil ich wenig Ahnung von Signalverarbeitung habe. FIR und IIR-Filter habe ich mir einmal angeeignet, halbwegs verstanden, implementiert und kann es mit Hilfe von Matlab auch designen. Was will man denn mehr? :-) Kannst Du das Verfahren mit 4 Multiplikationen und Additionen mal erläutern? Genau genommen braucht man doch für ein IIR-Filter 1. Ordnung genau 4 Multiplikationen und Additionen. ciao, Stefan.
Ein Controller besorgt sich ein Sample nach dem anderen. Jedes Sample kann mit einer Sinus- und Cosinustabelle multipliziert und für zwei Frequenzen aufaddiert werden: ADC einlesen cos_f1 += cos[n1]*ADC; sin_f1 += sin[n2]*ADC; cos_f2 += cos[n3]*ADC; sin_f2 += sin[n4]*ADC; Nach einer Periode wird geschaut welches Betragsquadrat größer ist. Betragsquadrat deshalb, weil man keine Wurzel ziehen will. Hat man Speicher übrig und kann sich jeweils eine Samplingperiode der langsameren Frequenz speichern, so kann man auch sowas machen: ADC einlesen cos_f1 += cos[n1]*(ADC-ADC[T1]); sin_f1 += sin[n2]*(ADC-ADC[T1]); cos_f2 += cos[n3]*(ADC-ADC[T2]); sin_f2 += sin[n4]*(ADC-ADC[T2]); die ADC Werte werden hier in einem Ringpuffer gespeichert. Die Sinus und Cosinustabellen liegen natürlich übereinander im Speicher. ggf ist eine Sinustabelle von 0 bis PI/2 ausreichend. Mmmh, wenn mans genau nimmt ist dies ein FIR-Filter. Durch geschickte Wahl der Parameter haben sich halt die Operationen stark reduziert.
Ganz so simpel ist es ja unter Umständen nicht, wenn es ordentlich Rauscht. Dann muss man Mitteln. Leckeffekt der DFT kommt auch noch dazu... Goertzel halte ich für ne gute Idee. Gruß
@ Werner Hoch So ganz genau verstehe ich den Sinn deines Algorithmus trotzdem nicht. Kannst du ihn mir erklären oder mit einer gängigen Bezeichnung aushelfen? Das einzige was halbwegs so ähnlich aussieht ist ein Hilbert-Transformator, doch sowas sollte das doch nicht werden?!
Das Verfahren macht eine mitlaufend DFT (nach jedem Sample eine DFT über die letzten 1/f Punkte für die zwei Frequenzen) Die Fehler durch die Fensterung sind aber doch schlimmer als ich angenommen habe. Die Grundidee hab ich im angehängten Code reingehackt.
Also sollte es das folgende werden? fftfilt FFT-based FIR filtering using overlap-add method Syntax y = fftfilt(b,x) y = fftfilt(b,x,n)
Ja sowas in der Art. Wobei sich eine Vereinfachung ergibt, da nur eine (oder zwei) Frequenz im Faltungssignal enthalten ist. Die Summe aus den Produkten von dem ADC-Signal und den Filtersignalen muß auch nie völlig neu berechnet werden. Es wird Lediglich die Differenz aufaddiert: summe += Sinus(z) * (ADC(t=z)-ADC(t=z-T)); Ich werde das Ganze mal in C abtippen. Für eine DFT die nur die 8 unteren Frequenzen enthielt hab ich mal was ähnliches gemacht.
Hey jetzt beruhigt euch mal wieder. Der Typ hat: a, keine Ahnung von der Materie, legt das Projekt 100% nieder bevor er es mit einem digitalen Filter gebacken bekommt. Das braucht naemlich nicht nur einen AVR sondern zudem: ordentlichen AD und einen DA. Bamms! Wenn ich frage ob das mit einem AVR geht kann ich bestimmt die AD und DA Wandler backen. Sicher. b, gar nicht gesagt was er genau will. Also erstmal her mit der genauen App und dann kann immer noch das grosse Klugscheissen starten
@ Oscar Um den Typ geht es auch schon lange nicht mehr. Der Austausch mit Werner Hoch basiert allein auf der eigenen Neugier, da ich im Moment auf diesem Gebiet tätig bin. Der Begriff "Klugscheissen" scheint mir ein Indiz dafür zu sein, dass du es analog zum Threadersteller auch nicht verstehst. Wer Interesse am Thema hat, liest einfach mit - wer nicht, der lässt es bleiben. Gruß, Mike
Hey Oscar, Der "Typ" mit dem Nick Kurt hat sehr wohl eine klare Anwendung gegeben. > Es geht mir im Prinzip darum wieder saubere 0/1 sen zu bekommen > (Ersatz für den TCM3105). Außerdem braucht er neben dem AD-Wandler für seine Anwendung nur noch einen Port-Pin. Also nüscht mit DA-Wandler. Und warum sollte sich ein technisch Interessierter nicht mit dem Thema beschäftigen? Wenn es ihm zu kompliziert wird, dann steigt er eben aus. Das ist doch allein seine Sache. Wenigstens hat er einen Eindruck bekommen, daß Digital Filtern nicht so einfach ist. Deine Antwort jedenfalls ist bestenfalls hochnäsig. Schade eigentlich, daß sie genau NULL zu dieser Diskussion beiträgt. ciao, Stefan.
Bingo! Daß sich Diskussionen verselbständigen ist natürlich und auch gut, denn sonst käme man ja garnicht dahin, daß mal etwas Neues auftaucht: Die Reduktion von Werner kannte ICH (jedenfalls so) noch nicht. Dem Fragenden sei zum G-filter folgende Seite empfohlen: http://www.numerix-dsp.com/siglib/examples/ Eine Realisation für AVR ATMEGA http://dragonsgate.net/pipermail/icc-avr/2004-September/004302.html
Ich hab das Programm jetzt mal in C abgetippt. * Compilieren mit einem C-Compiler gcc -lm fsk_filter.c * Die Ausgabe in eine Textdatei schreiben lassen ./a.out >xxx.txt * mit einem Plotprogramm ankucken octave:1> m=load xxx.txt; octave:2> plot(m(:,1),m(:,2),";fsk;",m(:,1),m(:,3),";f1;",m(:,1),m(:,4),";f2;") Die Beträge habe ich wegen meiner Faulheit in double ausgerechnet. Später würde man sicher das Wurzelziehen seinlassen und die Quadrate vergleichen. Die Frage wurde gestellt ob ein AVR ausreicht um die FSK herauszufiltern. Ich denke schon, aber auf einen Versuch käme es noch an. Die Demodulationssignale hänge ich ans nächsten Posting an.
Das Bild enthält das FSK-Signal und die Filtersignale a1 und a2. Viel Spaß beim Spielen mit dem Quellcode.
Hallo Allemiteinander (bayerisch), der "Typ" ist wieder da (habe mich zurückgehalten weil ich nicht mitkomm und zwei Tage ausser Haus war). Hier nochmal das Ziel: Der TCM3105 ist ein FSK Mod-Demodulator der für die Wandlung von Dig-Bit in Analog und umgekehrt verwendet wird (worden ist, weil nicht mehr gefertigt). Er besitzt 16 Pin und läuft mit 5V sowie einem PAL-Quarz. Wenn es nun mit einem Tiny13 auch ginge (durch die "Rechnerei" ev .noch besser) dann wär das Toll. Noch besser heisst: Spannung von 1,7..5,5V Sinuserzeugung (FSK-Signal) Auswertung (vor allem aus verrauschtem Signal) Werteanpassung durch SW Geringer Strom- und Platzbedarf Gleicher Baustein auch für die Verwendung als "Bi-Phase - Signale" oder Mehrquadrantenbetrieb usw. Warum ich zwar eine Wunschliste aber keine Lösung (Verständniss für die Arbeitsweise eines Digitalen Filters usw.) liegt an der -erhaltenen- Bildung (sorry). Also regt euch nicht auf wenn ich "schweige" , es ist nicht Desinteresse o.Ä. Gruss Kurt
Hallo @Werner Hoch , danke für die Mühe. Wenn ich das so überlege wird es mit Berechnungen sicher nicht einfach sein. Für die Erkennung der H-L-Frequenz stehen ja nur zwei Halbwellen zur Verfügung (1200/1800 Hz), die Nutzrate ist ja 1200 Baud. Ausserdem ist die Umschaltung nicht im Nulldurchgang (kann sein, muss aber nicht). Es müsste also bereits kurz nach der Umschaltung erkennbar sein wie schnell sich die Schwingung verändert, egal in welchem Winkel (0..360) sie sich gerade befindet (ohne Bezugspunkt). Das setzt eine hohe Zahl von von A/D-Wandlungen und Berechnungen voraus (hier wird der Tiny13 sicherlich ...). Villeicht ist es besser sich auf einen "Erwartungszustand" einzulassen. Das wiederum setzt ein "Einsynchronisieren" voraus. Dann bräuchte man nur noch nachschauen ob zu einer bestimmten Zeit das Signal einen bestimmten Winkel trifft. Durch Mehrfachabtastung wäre dann auch ein "Filtern aus Rauschen" machbar. Hoffe es ist nicht alles "Käse" was mir hierzu einfällt. Bei Analogfiltern sehe ich die Gefahr der Phasenverschiebung durch die RC-Komponenten. Habe mal einen TCM.. mit Rechtecksignal 50/50 versorgt und das Ergebniss mit nem Oszi angeschaut. Hier war sehr schön zu sehen wie sich das Tastverhältniss des Ausgangssignales bei steigender Frequenz verschoben hat. Durch die Korrektur mit dem "Poti" konnte man das wieder ausgleichen. Freu mich auf Antworten Gruss Kurt
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.