Hallo allerseits, ich bastle grad etwas mit FFT am AVR herum, funktioniert schon recht fein... Quelle soll ein Audio-Signal sein, also allermaximalst 20 kHz, eher <16kHz. Gesampelt wird vom ADC mit (voraussichtlich) 48kHz. Damit ich keine Aliasing-Effekte einfange, muss ich ja Frequenzen kleiner Nyquist schon vorher wegfiltern (natürlich mit Reserve). Soweit ich das sehe, gibts zwei Möglichkeiten: a) weniger steiler (und damit einfacherer) Filter, dafür größerer Abstand zur Sample-Frequenz b) niedrigere Abtastfrequenz, dafür steiler Filter. a) hat in Kombination mit FFT den Nachteil, dass ich dann die FFT unnötig "breit" machen müsste, um auch tiefe Frequenzen zu erwischen. Also eher b). Richtig soweit? wenn b), was nimmt man am besten für einen Filter? Ich hab letztens für ein DDS-Projekt erstmalig einen Cauer-Filter gebaut, der hat ausgezeichnet funktioniert. Ist ein Cauer hier geeignet? Noch eine generelle Frage: Die meisten Filter-Dimensionierungsprogramme hätten gerne eine Impedanz. Die ist in meinem Fall eher nebensächlich (vermute ich zumindest) der Filter wird direkt von einem OP gespeist (also sehr niederohmig), und danach gehts gleich in den (relativ hochohmigen) ADC. Was nehme ich hier als Impedanz? oder kann ich die (fast beliebig) variieren, bis passende Werte (speziell für die Induktivität) rauskommen? Oder sollte ich besser eine Impedanzanpassung per Serienwiderstand am Eingang und Terminierungswiderstand am ADC machen? Danke!
Dies mag nun nicht wirklich die Antwort auf deine Frage sein, aber wenn du die möglichkeit von Überabtastung hast, könntest du das AA-Filter mehr ins digitale verschieben und ein einfaches RC-Filter am Eingang würde reichen. Kommt halt drauf an, was du für Rechenpower hast und wie fix die 48 kHz sind. Das käme ja Lösung a gleich. Kommt halt gan drauf an, was du für Anforderungen/Voraussetzungen hast. Stichworte: - Überantastung / Oversampling - Verschiebung Antialiasing-Filter vom Analogen ins Digitale - Anschliessendes Downsampling mit einem Dezimator um weiterführenden Rechenaufwand zu minimieren.
Naja, Rechenpower ist begrenzt (ATmega328 mit 16 oder 20 MHz), was aber mehr gegen Oversampling spricht ist der Speicherverbrauch: je mehr ich überabtaste, desto größer muss der Puffer sein. ich könnte natürlich auch aufs Puffern verzichten, und direkt bei der Abtastung filtern und downsamplen. Das würde mir aber die Interrupt-Last stark erhöhen, die möchte ich vermeiden, da ich plane Abtastung und FFT-Berechnung "parallel" auszuführen (wird sich aber erst zeigen wie sich das ausgeht) Es läuft wie immer auf einen Kompromiss hinaus, aber dafür müsste ich erstmal wissen wie und mit welchem Aufwand ich einen teil davon analog erschlagen kann.
Du musst deinen Filter so wählen das er an der Nyquist-Frequenz eine Dampfung aufweisst die zum Dynamikbereich des AD-Wandlers passt. > Ist ein Cauer hier geeignet? Man wählt seinen Filter danach aus das er zu dem passt was man mit den Daten machen will. Ich würde jetzt mal vermuten das du einen nehmen willst der möglichst wenig Welligkeit im Durchlassbereich aufweisst, aber das ist nur geraten. > danach gehts gleich in den (relativ hochohmigen) ADC. Ich hoffe mal das du das geprüft hast. > bis passende Werte (speziell für die > Induktivität) rauskommen? Es würde mich sehr erstaunen wenn ein Filter für den Audiobereich eine Induktivität aufweisst. Das führt schnell dazu das man Räder unter sein Gehäuse bauen muss. Frank
Michael Reinelt schrieb: > und danach gehts gleich in den (relativ > hochohmigen) ADC. So hochohmig ist der nicht, bzw. er möchte ein relativ niederohmiges Signal sehen. Bedenke, das die Quelle in der Lage sein muss, den S&H Kondensator des ADC in kurzer Zeit zu laden. Atmel empfiehlt bei den meisten AVR eine Quellimpedanz von < 10 kOhm. Es kann also sinnvoll sein, das Filter aktiv aufzubauen (Opamp) und den Ausgang des Opamp über einen kleinen Serienwiderstand direkt auf den ADC zu geben. Ich hänge dir mal ein Filter aus dem Audiobereich mit an, aus einem alten Digital Mischpult von Yamaha. Hier ist es ein ADC mit Differenzeingängen, aber das soll dich nicht stören.
:
Bearbeitet durch User
Matthias Sch. schrieb: > Atmel empfiehlt bei den > meisten AVR eine Quellimpedanz von < 10 kOhm. Das ist für mich "hochohmig" :-) im Vergleich zu 50 Ohm meines letzten Filters (der allerdings im MHz-Bereich lag) Aber ich denke gerade intensiv über variante a) nach, bzw. versuche mich hier einzulesen: Der Trick wäre, schneller zu samplen (möglichst ein ganzzahliges Vielfaches meiner gewünschten Sample-Frequenz, also z.B 2-fach mit 96kHz), nur jedes n-te sample zu verwenden, aber vorher mit allen Samples in ein digitales Filter zu gehen. Hier würde sich FIR anbieten, weil ich dann nur die wirklich benötigten Samples berechnen müsste. Wo ich mir grad nicht sicher bin: Die nyquist-Frequenz bleibt schon die gleiche, also 24kHz, auch wenn ich statt mit 48 mit der doppelten Frequenz sample? Ich hab nur mehr "Platz" für meine Filterkurve? Zur Dämpfung: Wenn ich vom ADC 8-bit Werte lese, bräuchte ich -48dB Dämpfung, stimmt das? Ums mal konkret zu machen: Ich will Signale bis 16kHz aufnehmen, sample mit 96kHz. Mit welchen Daten müsste ich dann einen Filter-Designer füttern?
:
Bearbeitet durch User
Michael Reinelt schrieb: > Ums mal konkret zu machen: Ich will Signale bis 16kHz aufnehmen, sample > mit 96kHz. Hallo Michael, aber nicht mit einem AVR. Da must du schon einen nehmen dessen ADC auch die Samplerate kann. Beim ATMega ist da bei 16Khz Samplerate so ziemlich schluss. Sag mal welchen uC du nehmen willst. Als Filter wuerde ich die ein Sallen-Key Filter vorschlagen. Michael Reinelt schrieb: > Wenn ich vom ADC 8-bit Werte lese, bräuchte ich -48dB > Dämpfung, stimmt das? Die Daempfung von 48 dB must du bei der halben Samplerate erreicht haben. Anhand von Samplerate und hoechster Nutzfrequenz ergibt sich dann die Filtersteilheit bzw. Ordnung des Filters. Ein Filter 1. Ordnung hat eine Steilheit von 6dB / Oktave bzw. 20db / Dekade. Willst du schneller Abtasten verringert sich der Analoge Filter Aufwand. Allerdings hat man dann hoehere Datenraten auf der Digitalen Seite. Die kann man aber mit hilfe eines Dezimierungsfilters wieder runter rechnen.
Hallo Helmut, Helmut Lenzen schrieb: > Hallo Michael, aber nicht mit einem AVR. Da must du schon einen nehmen > dessen ADC auch die Samplerate kann. Beim ATMega ist da bei 16Khz > Samplerate so ziemlich schluss. Sag mal welchen uC du nehmen willst. Oje, das ist leider ein gutes Argument :-( Aber nachdem ich eh nur mit 8 bit abtaste (statt mit 10) sollten zumindest die 48kHz gerade noch machbar sein. meine Oversampling-Träume kann ich mir also gleich abschminken. > Als Filter wuerde ich die ein Sallen-Key Filter vorschlagen. Eins? oder 7 hintereinander? > Die Daempfung von 48 dB must du bei der halben Samplerate erreicht > haben. Eigentlich mag ich das gar nicht ausrechnen: von 16kHz geträumter maximaler Nutzfrequenz zu 24kHz halber Samplerate 48dB zu erreichen dürfte reichlich illusorisch sein... Prozessor soll ein ATmega328 sein. Momentan läuft ein Prototyp bei 12MHz Takt mit 28kHz Abtastrate am Funktionsgenerator, das funktioniert sehr sauber. Der "echte" soll dann 20 MHz CPU-Takt haben, entweder gehen dann die 48kHz Sample-Frequenz, oder ich geh halt auf 24 kHz zurück. ich hab leider momentan kein "Breadboard" mit 20MHz Quarz. Für den Filter versuch ich dann halt, mit einem Sallen-Key das beste rauszuholen was möglich ist. Filter mit L bei entsprechend niedriger Impedanz (50 Ohm zumindest in der Filterstufe) ergäbe gar keine soooo riesigen Induktivitäten, allerdings passen dann wieder die OPs nicht (die mögen 600 Ohm, Audio halt) Eigentlich ist das alles ja nur Spielerei, obige Warte wären halt "ein Traum", wenn sie nicht erreichbar sind - auch egal. Dann versuch ich halt, dem Optimum so nahe wie möglich zu kommen.
Michael Reinelt schrieb: > Eins? oder 7 hintereinander? Sallen-Key als Stufe hat meistens 2. Ordnung. Bei 7. ordnung waeren das dann ein Quad OP. Michael Reinelt schrieb: > Eigentlich mag ich das gar nicht ausrechnen: von 16kHz geträumter > maximaler Nutzfrequenz zu 24kHz halber Samplerate 48dB zu erreichen > dürfte reichlich illusorisch sein... Das ist schon Aufwand. Michael Reinelt schrieb: > Der "echte" soll dann > 20 MHz CPU-Takt haben, entweder gehen dann die 48kHz Sample-Frequenz, > oder ich geh halt auf 24 kHz zurück. Der ADC Takt ist ja per Teiler vom CPU Takt abgeleitet und sollte so zwischen 120..200 Khz liegen laut Atmel. Von daher ist der eigentlich CPU Takt egal. Ist nur fuer die Verarbeitung in der Software massgebend. Michael Reinelt schrieb: > Filter mit L bei entsprechend niedriger Impedanz (50 Ohm zumindest in > der Filterstufe) ergäbe gar keine soooo riesigen Induktivitäten, > allerdings passen dann wieder die OPs nicht (die mögen 600 Ohm, Audio > halt) In dem Bereich kannst du alles mit OPs machen, lass sie Spulen fuer HF Anwendungen die haben im NF Bereich nix zu suchen. 50 Ohm brauchst du da auch nicht einhalten. Michael Reinelt schrieb: > Eigentlich ist das alles ja nur Spielerei, obige Warte wären halt "ein > Traum", wenn sie nicht erreichbar sind - auch egal. Dann versuch ich > halt, dem Optimum so nahe wie möglich zu kommen. Nimm einen anderen Contorller z.B aus der Cortex/Arm Serie oder einen PIC32. Dessen ADCs sind dafuer schnell genug (1MHz Sample Frequenz). Damit tust du es dir auch bei der Software leicher. Als Start z.B so eine STm32 Cortex Demo Board.
Moin, Tja, natuerlich ist in der Theorie ein Tiefpass zur Bandbegrenzung vor dem ADC eine simple Sache. In echt siehts dann halt wieder anders aus. Da wuerd' ich sagen: Bau' ein 4..5poliges, aktives Filter ein (Bei mehr als 4..5polen brauchst du mehr als 2 OpAmps und die Bauteiltoleranzen werden unangenehm, d.h. es wird zunehmend unrealistisch, dass du das, was du haben willst, auch wirklich bekommst). Dann bietet sich Sallen-Key an; als Filtercharakteristik geht dann Cauer nicht, obwohl der natuerlich am Besten waere, wenn dir Gruppenlaufzeit wurscht ist. Aber Tschebyscheff wuerde gehen. Ripple im Durchlassbereich musst du dir halt ueberlegen, was du tolerieren kannst oder evtl. nach deiner FFT wieder rausrechnen (Du weisst ja dann, welche Frequenzbaender wie gut durchgelassen werden). Je mehr Ripple im Durchlass du vertraegst, umso steiler wird die Daempfung Richtung Sperrbereich ansteigen. Die theoretisch erforderlichen Werte fuer Sperrdaempfung bei Fsample/2 wirst du damit nicht erreichen. Seh' ich aber nicht als besonders tragisch an. In "normalem" Audio kommen die hohen Frequenzen eh' nicht mit Wahnsinnsleistungen vor. Gruss WK
Helmut Lenzen schrieb: > Der ADC Takt ist ja per Teiler vom CPU Takt abgeleitet und sollte so > zwischen 120..200 Khz liegen laut Atmel. Ja, bei voller Auflösung und optimaler Genauigkeit. Mit geringerer Auflösung darf er niedriger sein. > Von daher ist der eigentlich > CPU Takt egal. Ist nur fuer die Verarbeitung in der Software massgebend. Jein, aufgrund der starren Prescaler muss ich vom CPU-Takt auch einen passenden ADC-Takt ableiten. So hoch wie nötig, so niedrig wie möglich... Helmut Lenzen schrieb: > lass sie Spulen fuer HF > Anwendungen die haben im NF Bereich nix zu suchen. ok (schade eigentlich, hätt mich grad erst mit denen angefreundet...) Helmut Lenzen schrieb: > Nimm einen anderen Contorller Wie gesagt, es ist nur eine Spielerei, deswegen möchte ich auf keinen Fall mein vertrautes AVR Ökosystem verlassen. derguteweka schrieb: > Da wuerd' ich sagen: Bau' ein 4..5poliges, aktives Filter ein Danke, du machst mir Mut! Darauf wirds hinauslaufen... Mit Sallen-Key gibts ja so eine Variante wo man 3 Pole in einem OP unterkriegt. Da spricht hoffentlich nix dagegen? (siehe hier: http://www.beis.de/Elektronik/Filter/Act3PoleLP.html) Darf man zwei von denen hintereinanderschalten?
Moin, Michael Reinelt schrieb: > http://www.beis.de/Elektronik/Filter/Act3PoleLP.html) Darf man zwei von > denen hintereinanderschalten? Ja, deshalb schrub ich 4..5 - du kannst mit 2 hintereinandergeschalteten, jeweils 3 poligen arbeiten, aber dann sind 2 der 6 vorhandenen Pole rein reell und kein konjungiert komplexes Paerchen, d.h. dann hast du irgendein Filter, kein "reinrassiges" Butterworth, Cheby, oder sonstwas. Gruss WK
derguteweka schrieb: > dann sind 2 > der 6 vorhandenen Pole rein reell und kein konjungiert komplexes > Paerchen Au weia, jetzt hast du mich kalt erwischt... wart mal, wo war die Ausrede... ach ja, damals, als wir das gelernt hatten, habe ich gefehlt ;-) Aber soviel glaube ich zu verstehen: 3+2 sollte es auch tun.
Hallo Michael, Mit Deinem Projekt bist Du ja, hier im Forum, an mehreren Stellen präsent. Den A/D-Wandler eines ATmega kann man getrost deutlich schneller laufen lassen. Im einleitenden Text, im Datenblatt, ist ja von bis runter zu 13us Wandlungszeit die Rede, das sind dann, bei 13 ADC-Takten / Wandlung, 1MHz ADC-Takt. Das habe ich schon ausgenutzt, so schlecht wird der Wandler dabei auch nicht, für Deine Anwendung sicher brauchbar. Da sind 48kHz locker drin, selbst 64kHz sind noch möglich. Es gibt da eine Falle: Wenn Du die Messung 'zu Fuß', durch setzen des ADSC-Bits startest, startet die Wandlung immer erst beim nächsten ADC-Takt, also mit unterschiedlicher Verzögerung, das will man bei einem Audio-Signal nicht. Wenn Du aber die Wandlung über Auto-Trigger, von einem Timer, startest, wird der Takt-Vorteiler immer mit zurückgesetzt, die Wndlung startet also exakt im, vom Timer vorgegebenen, Raster. Ich habe den ADC auch schon mit Takt-Teiler 16, bei einem 20MHz getakteten ATmega benutzt, und keine Probleme gehabt. Eine Bandbegrenzung hast Du ja schon eingebaut, das Mikrofon. Ich würde da kein Wahnsinns-Filterdesign anfangen. Bei 24kHz (48kHz / 2), und darüber, sollte da eh nicht viel los sein. Bei Filtern hoher Ordnung hat man immer Ärger mit Bauteiletoleranzen, da sollte man besonders an die Kondensatoren denken. Bei 20MHz CPU-Takt gehen die 48kHz Abtastrate gerade noch mit ADC-Vorteiler 32. Mit freundlichen Grüßen - Martin
Martin Schlüter schrieb: > Wenn Du aber die Wandlung über Auto-Trigger, von > einem Timer, startest, wird der Takt-Vorteiler immer mit zurückgesetzt, > die Wndlung startet also exakt im, vom Timer vorgegebenen, Raster. Danke für den Hinweis! Gilt das auch für den FreeRunning Mode? Im "Echtbetrieb" werd ich das sicher über einen Timer anstoßen, um feine Kontrolle zu haben, momentan beim "Basteln" läuft er eben im FreeRunning Mode... Martin Schlüter schrieb: > Eine Bandbegrenzung hast Du > ja schon eingebaut, das Mikrofon. Ich würde da kein > Wahnsinns-Filterdesign anfangen. Bei 24kHz (48kHz / 2), und darüber, > sollte da eh nicht viel los sein. Vermutlich hast du recht, und ich übertreibe da etwas :-)
Im FreeRunning Mode sind es immer 13 ADC-Takte, die Abtastrate ist immer ADC-Taktfrequenz / 13. Da kommt man halt auf recht 'krumme' Werte, für die Abtastrate. Mit freundlichen Grüßen - Martin
Hallo allerseits, "Wenn du ein Problem nicht lösen magst, ändere einfach die Anforderungen" :-) ich hab mich jetzt etwas mit meinem Prototyp gespielt, und (für mich) erstaunliche Erkenntnisse gewonnen: ich bin mit der Sample-Rate ziemlich tief "in den Keller" gewandert, (zuerst ~500 Hz, derzeit ~2kHz). Damit sinkt zwar meine obere Grenzfrequenz, und dagegen kann ich wenig tun, weil für längere Samples schlicht der Speicher am ATmega (2kB) nicht reicht. Das ist aber fürs erste nicht weiter tragisch, weil meine Primäre Anwendung erstmal eine "Lichtorgel" für meinen kleinen schlagzeug-spielenden Sohn ist. ich hätte das nicht für möglich gehalten, aber meine FFT schafft es, das tiefe E und F meines Basses zu trennen! (immerhin sind das grob 42 und 44 Hz!) Das brauch ich zwar nicht, aber dafür kann ich jetzt sogar einzelne Trommeln auseinanderhalten! (Sogar eine Trennung zwischen den Hänge-Toms wäre theoretisch möglich!) Das ist ja mehr als genial! Mein Spieltrieb ist geweckt... Da damit aber die Sample-Dauer recht lange ist, muss ich meine FFT noch etwas umbauen, damit die auf einem Ringbuffer arbeiten kann. Das ist aber eine ganz andere Baustelle... Für das Filter-Problem heisst das: Ich habe viel mehr Platz sowohl auf der analogen als auch auf der digitalen Seite, um Tiefpässe zu implementieren. Analog wird vermutlich ein simples RC-Glied ausreichen. Digital bin ich noch am überlegen, wie sich das am besten ausgeht, wie hoch ich "oversample", und welchen Filter ich dann nehme (FIR oder IIR) Damit schließe ich gleich meine nächste Frage an: Würdets ihr eher FIR oder IIR nehmen, und gibt es empfehlenswerte (simple, ich bin kein Mathematiker) Auslegungsprogramme, möglichst im Web, damit ich nicht extra Software installieren muss?
Michael Reinelt schrieb: > Naja, Rechenpower ist begrenzt (ATmega328 mit 16 oder 20 MHz) Der Atmega328 ist für 20 kHz Signale aber zu langsam (bzgl. voller ADC-Auflösung!), also zumindest sein ADC. Der bringt dir nämlich maximal ~10 MSPS, reicht also "nur" für ~5 kHz Signale. Oder du fährst die ADC-Taktrate hoch und senkst die ADC-Auflösung (ist auch im Datenblatt beschrieben). Bei "nur" 8 bit ist ~100 MSPS möglich (Free-Runningmode etc.pp., siehe Datasheet). Also entweder dann einen anderen ADC verwenden oder, wenn kein separater ADC gewünscht ist, einen anderen Atmega (vielleicht Atxmega32) benutzen sofern mehr als 8 bit Auflösung gewünscht ist. Beim Filter kann man aber schon sagen, dass bei mehr als 10 kHz nur noch, vergleichsweise, wenig los ist. Da könnte man auch begrenzen.
Michael Köhler schrieb: > Der Atmega328 ist für 20 kHz Signale aber zu langsam Das hat Martin hier Beitrag "Re: welcher (analoge) Filter für FFT im Audio-Bereich?" schon soweit geklärt
Nur ein passiver RC Filter ist ggf. nicht so gut, weil bei höherer Abtastrate auch die Quellimpedanz für den ADC eher niedriger werden sollte. Ein einfacher aktiver Filter mit 1 OP sollte aber ausreichen. Beim digitalen Filter wird man wohl Rücksicht auf den eher langsamen µC nehmen müssen. Das dürfte dann eher auf einen einfache FIR Filter hinauslaufen, bis hin zum einfachen Mittelwert. Viel extra Speicher braucht man da auch nicht - eventuell für etwa 8 Werte, ggf. auch noch weniger. Wenn man beim 8 Bit AVR bleiben will, gäbe es noch die Xmega: da geht der ADC bis 1 MHz und der Takt bis 32 MHz.
Ich brauch nochmal eure Hilfe, damit ich mich hier nicht verrenne. Ich packe meine Frage mal in ein einfaches Beispiel: Angenommen, meine FFT interessiert sich nur für Frequenzen bis 1 kHz. ich muss also mit mindestens 2kHz abtasten, und alles was über 1kHz ist, ist potentiell "böse" weil es zu Aliasing führt. Zur Sicherheit taste mich mit 3kHz ab, um etwas "Respektabstand" zur Nyquist-Frequenz zu haben. Weiter angenommen, ich mache 8-faches Oversampling, sample also in Wirklichkeit mit 24 kHz. Damit ich beim Samplen kein Aliasing einfange, muss alles > 12 kHz weg, und zwar schon vor dem Abtasten (wenn ichs mal abgetastet habe, krieg ichs auch mit digitalen Filtern nicht mehr weg, weils nicht unterschiedbar ist) Durch das Oversampling wird aber der "analoge" Filter viel einfacher: Passband 0-1kHz mit möglichst wenig Ripple, Stopband ab 12kHz mit (idealerweise) 48dB Dämpfung (8 bit ADC-Auflösung). Bei den 3.5 Oktaven wären das knapp 14dB/Oktave, oder ein zwei-bis Filter. Wenn ich das LSB ignoriere, wärens nur mehr 42 statt 48, damit reichen 2 RC-Glieder. Soweit richtig bis hierher? Nun kommt der für mich schwierigere Teil: Der Dezimator. Ich muss ja aus jeweils 8 Samples einen machen, den ich dann in die FFT schicke. Passband: 0-1kHz (der Teil war einfach) Stopband: ich hätte intuitiv gesagt, 1.5kHz (also die halbe Ausgabe-Frequenz des Dezimators). Allerdings lese ich hier: http://www.dspguru.com/dsp/faqs/multirate/decimation "The stopband lower frequency is half the output rate minus the passband upper frequency." Das kann irgendwie nicht stimmen, das wären ja 1.5kHz - 1 kHz = 500 Hz, damit schneid ich mir ja mein halbes Nutzsignal weg? Wenn ich das mal ignoriere, und versuche einen FIR-Filter mit diesen Werten zu kreieren ( http://t-filter.appspot.com/fir/index.html ) komm ich auf 61 "taps" (Koeffizienten)? Kann das stimmen?
Michael Reinelt schrieb: > Nun kommt der für mich schwierigere Teil: Der Dezimator. Ich muss ja aus > jeweils 8 Samples einen machen, den ich dann in die FFT schicke. Der Dezimator ist halb so wild. Ist ein Tiefpassfilter mir der entsprechenden Grenzfrequenz und dann halt nur jeden xx Wert nehmen und damit weiterrechnen. Da sollte man auch ein IIR Filter nehmen koennen.
Ulrich H. schrieb: > Ein einfacher aktiver Filter mit 1 OP sollte aber ausreichen. Da hast du recht. Auf einen OP mehr oder weniger kommt es nun auch nicht an. Vermutlich könnte ich den Filter sogar in den Mikrofon-Vorverstärker gleich mit integrieren... Ulrich H. schrieb: > Beim digitalen Filter wird man wohl Rücksicht auf den eher langsamen µC > nehmen müssen Da mach ich mir mal weniger Sorgen - aufgrund der jetzt relativ niedrigen Abtast-Frequenzen, gepaart mit dem umstand dass ich mit FIR nur seltener den Filter rechnen muss, dürfte sich das locker ausgehen. Helmut Lenzen schrieb: > Der Dezimator ist halb so wild. Sagst du :-) > Ist ein Tiefpassfilter mir der > entsprechenden Grenzfrequenz und dann halt nur jeden xx Wert nehmen und > damit weiterrechnen. Da sollte man auch ein IIR Filter nehmen koennen. FIR wäre mir an der Stelle sympatischer (obwohl ich mit IIR schon gearbeitet habe), aus mehreren Gründen: a) FIR ist "gutmütiger" (Kunststück, ohne Feedback) b) FIR muss ich nur dann berechnen, wenn ich einen Wert brauche, also in meinem Beispiel jede 8te Abtastung. Die Zwischenwerte schieb ich nur in den Ringbuffer. c) FIR hat Koeffizienten die ideal für Festkomma-Arithmetik geeignet sind: immer im Bereich [-1, 1) und auch die Addition sättigt nicht. Das kriegt man auf einem AVR wirklich sehr effizient hin (hab ich erwähnt dass ich fmul liebe?) Helmut, wie legst du digitale Filter aus? Kannst du mir da eine Software (oder noch besser ein Online-Tool) empfehlen? matlab & Co scheidet eher aus, das kann ich nicht bedienen...
Michael Reinelt schrieb: > Filter-Dimensionierungsprogramme Einfach eine Koeffiziententabelle nehmen, z.B. http://www.glensstuff.com/activefilterdesign/activefilterdesign.htm
Marian B. schrieb: > Michael Reinelt schrieb: >> Filter-Dimensionierungsprogramme > > Einfach eine Koeffiziententabelle nehmen, z.B. > http://www.glensstuff.com/activefilterdesign/activefilterdesign.htm Ähhh und wie mach ich daraus jetzt ein FIR Filter?
Michael Reinelt schrieb: > Helmut, wie legst du digitale Filter aus? Kannst du mir da eine Software > (oder noch besser ein Online-Tool) empfehlen? matlab & Co scheidet eher > aus, das kann ich nicht bedienen... Von Iowa Hills gint es da einige Tools. IIR FILTER lass ich von uC selber die Kooefizenten berechnen.
Helmut Lenzen schrieb: > IIR FILTER lass ich von uC selber die Kooefizenten berechnen. Huh? Wie geht das denn?
Michael Reinelt schrieb: > Huh? Wie geht das denn? Das ist doch bloss eine Formel. IIR Filter werden durch die Tuskin Transformation aus den Koeffizenten der Analogen Filter berechnet. Und dessen Werte aus einer anderen Formel. Das ganze in ein Unterprogramm gepackt und schon kommen die Koeffizenten raus. So kann man leicht ein Adaptives Filter daraus bauen.
Helmut Lenzen schrieb: > ... Tuskin Transformation ... Womit wir wieder bei der Trennung zwischen Jungs und Männern wären :-) Ich muss aber nochmal was grundsätzliches hinterfragen: > Der Dezimator ist halb so wild. Vielleicht habe ich hier einen massiven Denkfehler, aber in meinem obigen Beispiel müsste der Tiefpass doch ein Passband von 0-1kHz haben, und ab 1.5kHz (halbe Ausgaberate des Dezimators) auch wieder idealerweise 48dB dämpfen, sonst krieg ich ja erst wieder Aliasing rein. Das wäre ja eine Steilheit von 96dB/Okatve, und das nennst du "halb so wild"? (oder ist das halb so wild?)
Hallo Michael, Michael Reinelt schrieb: > wie legst du digitale Filter aus? Kannst du mir da eine Software > (oder noch besser ein Online-Tool) empfehlen? matlab & Co scheidet eher > aus, das kann ich nicht bedienen... Analoge Filter: http://www.beis.de/Elektronik/Filter/Filter.html Konvertierung der analogen Filter-Prototypen in digitale IIR-Filter incl. Programm zur Berechnung und Simulation der analogen und den daraus berechneten und ggf. modifizierten digitalen Filtern: http://www.beis.de/Elektronik/Filter/AnaDigFilt/AnaDigFilt.html (Das sind beides meine Artikel, im Zweifelsfall kenne ich mich also gut mit dem Inhalt aus.) Zum Thema Decimation: Das ist kein Programm, kein "Algorithmus": Wenn du einmal ein Signal Tiefpass-gefiltert hast, brauchst du nur noch entsprechend jeden n-ten Wert zu nehmen - alle anderen Werte sind per Definition redundant. Grüße, Uwe
Uwe schrieb: > Konvertierung der analogen Filter-Prototypen in digitale IIR-Filter Hallo Uwe, tolle Seite, Gratulation! Den Sallen-Key-Teil davon habe ich eh schon regelmäßig besucht, sehr praktisch! Digital (oder besser zeitdiskrete :-) Filter sind da leider IIR, ich möchte das eher mit FIR machen, aus den oben dargelegten Gründen Uwe schrieb: > Zum Thema Decimation: Das ist kein Programm, kein "Algorithmus": Wenn du > einmal ein Signal Tiefpass-gefiltert hast Stimmt, mein Problem ist im Moment eh mehr der Tiefpass selber, und ob meine "Auslegung" (-96dB/Okatve?) überhaupt stimmen kann.
Michael Reinelt schrieb: > Digital (oder besser zeitdiskrete :-) Filter sind da leider IIR, ich > möchte das eher mit FIR machen, aus den oben dargelegten Gründen Tief u. Hoch pass macht man meistens in IIR. FIR braucht zuviel Rechenzeit.
Hallo Michael, > Digital (oder besser zeitdiskrete :-) Filter sind da leider IIR, ich > möchte das eher mit FIR machen, aus den oben dargelegten Gründen Ich habe nicht den ganzen Thread studiert, sei mir nicht böse, wenn ich ich dem Sinne nicht genau auf das antworte, was du schon geschrieben hast. Aber ich nehme an, dass es um diesen Beitrag geht: Michael Reinelt schrieb: > Ich packe meine Frage mal in ein einfaches Beispiel: > > Angenommen, meine FFT interessiert sich nur für Frequenzen bis 1 kHz. > ich muss also mit mindestens 2kHz abtasten, und alles was über 1kHz ist, > ist potentiell "böse" weil es zu Aliasing führt. Zur Sicherheit taste > mich mit 3kHz ab, um etwas "Respektabstand" zur Nyquist-Frequenz zu > haben. > > Weiter angenommen, ich mache 8-faches Oversampling, sample also in > Wirklichkeit mit 24 kHz. Damit ich beim Samplen kein Aliasing einfange, > muss alles > 12 kHz weg, und zwar schon vor dem Abtasten (wenn ichs mal > abgetastet habe, krieg ichs auch mit digitalen Filtern nicht mehr weg, > weils nicht unterschiedbar ist) > > Durch das Oversampling wird aber der "analoge" Filter viel einfacher: > Passband 0-1kHz mit möglichst wenig Ripple, Stopband ab 12kHz mit > (idealerweise) 48dB Dämpfung (8 bit ADC-Auflösung). Bei den 3.5 Oktaven > wären das knapp 14dB/Oktave, oder ein zwei-bis Filter. Wenn ich das LSB > ignoriere, wärens nur mehr 42 statt 48, damit reichen 2 RC-Glieder. > > Soweit richtig bis hierher? Ich denke, schon. Nur vielleicht mit einer Ausnahme, auf die auch schon jemand hingewiesen hat: Wenn, wie üblich, im Alias-Band die Leistung deutlich geringer als im Nutzband ist, braucht man entsprechend weniger zu filtern! > Nun kommt der für mich schwierigere Teil: Der Dezimator. Ich muss ja aus > jeweils 8 Samples einen machen, den ich dann in die FFT schicke. Ich meine, umgekehrt: Erst digital filtern, dann jedes 8te Sample nehmen. Das Filtern ist mehr oder weniger anspruchsvoll. Die Decimation ist trivial. (Ist vielleicht auch eine Frage der Definiton, ob der TP zur Decimation zuzurechnen ist oder nicht.) > Passband: 0-1kHz (der Teil war einfach) > Stopband: ich hätte intuitiv gesagt, 1.5kHz (also die halbe > Ausgabe-Frequenz des Dezimators). > > Allerdings lese ich hier: ... Das habe ich jetzt nicht studiert :-( > Wenn ich das mal ignoriere, und versuche einen FIR-Filter mit diesen > Werten zu kreieren ( http://t-filter.appspot.com/fir/index.html ) komm > ich auf 61 "taps" (Koeffizienten)? Kann das stimmen? Ich habe mich bisher fast nicht mit FIR-Filtern befasst. Aber wenn du eine große Steilheit oder eine geringe Eckfrequenz brauchst, wird auch ein FIR-Filter aufwändig. Das ist nur logisch. Ob es 61 Taps tun, kann ich nicht sagen, aber eine große Anzahl von Taps würde ich erwarten. Ich habe mal einen 20-poligen, digitalen IIR-TP-Filter (Butterworth) realisiert (Audio, Decimation-Filter um von der internen 2- oder 4-fach OSR auf die gewünschte Ausgangs-SR zu filtern). Das sind 120 dB/Oktave. Mit dem Wissen, wo die Fallen bei der Realisierung liegen, klappt das auch. Mit einem einfachen uC hast du sicherlich keine Chance, ich vermute, auch bei einem FIR mit 61 Taps nicht. Sehr hilfreich zum Verständnis, anscheinend auch zur Abschätzung des Aufwands, fand ich: http://www.fourier-series.com/fourierseries2/FIR-filter.html. Vielleicht ist das hier ja auch schon bekannt. Grüße, Uwe
Moin, Helmut Lenzen schrieb: > Tief u. Hoch pass macht man meistens in IIR. FIR braucht zuviel > Rechenzeit. Insbesondere dann, wenn man stumpf einen einzelnen Tiefpass mit Fsample/16 fuer die :8 Dezimation nimmt. Wenns schon unbedingt FIR sein muss, dann wirds wahrscheinlich aufwandsaermer sein, wenn man 3x jeweils :2 dezimiert. Fsample/4 FIR Tiefpaesse kann man z.B. so konstruieren, dass fast die Haelfte aller Koeffizienten 0 ist - spart also MAC Operationen; die Symmetrie halbiert die verbliebenen Multiplikationen auch noch mal auf fast die Haelfte... Aber ich wuerd' auch eher zu IIR raten, da geht dann sogar der gute Cauer (6. Ordnung wird fuer diesen Fall voellig ausreichen), denn die Phase wird dir ja wurscht sein, wenns fuer eine Lichtorgel sein soll. Gruss WK
derguteweka schrieb: > Wenns schon unbedingt FIR sein > muss, dann wirds wahrscheinlich aufwandsaermer sein, wenn man 3x jeweils > :2 dezimiert. Fsample/4 FIR Tiefpaesse kann man z.B. so konstruieren, > dass fast die Haelfte aller Koeffizienten 0 ist - spart also MAC > Operationen; die Symmetrie halbiert die verbliebenen Multiplikationen > auch noch mal auf fast die Haelfte... Die meisten machen es in Stufen von maximal 4, da hast du recht. Alles darueber ist aufwendig. Auf Phasenlinearitaet kommt es dabei hier ja nicht an, deshalb IIR nehmen.
Noch etwas: Michael Reinelt schrieb: > Das ist aber fürs erste nicht weiter tragisch, weil meine Primäre > Anwendung erstmal eine "Lichtorgel" für meinen kleinen > schlagzeug-spielenden Sohn ist. Unter diesen Umständen ist es sicherlich weder notwendig noch sinnvoll, die Filter so zu konstruieren, dass das LSBit immer und unter allen theoretisch möglichen Worst-Case Bedingungen immer frei von Alias-Effekten ist. In dieser Applikation kannst du schon erhebliche Abstriche machen - es wird beim Betrieb der Lichtorgel weder dich und erst recht nicht deinen kleinen Sohn stören :-) Aber es geht hier im Forum ja auch um prinzipielle Zusammenhänge, und darüber zu diskutieren, finde ich schon sinnvoll. Grüße, Uwe
Danke für die rege Beteiligung! ich müssts nur etwas geduldig mit mir sein, das ist alles ziemliches Neuland für mich.... aber ich lese und lerne... Nachdem hier alle ausnahmslos zu IIR raten, darf ich daraus schließen dass das Zitat "The fact that only the outputs which will be used have to be calculated explains why decimating filters are almost always implemented using FIR filters!" von hier http://www.dspguru.com/dsp/faqs/multirate/decimation Blödsinn ist? Ansonsten sieht mir die Seite durchaus vertrauenswürdig aus... Übrigens, wenn ich "Dezimator" schreibe, meine ich immer die Kombination aus Tiefpass und Downsampling. Die Möglichkeit, den Dezimator auf mehrere Stufen aufzuteilen, habe ich bisher noch nicht in Betracht gezogen. Da muss ich erst intensiver drüber nachdenken... welchen Vorteil hat das?
Uwe schrieb: > Aber es geht hier im Forum ja auch um prinzipielle Zusammenhänge, und > darüber zu diskutieren, finde ich schon sinnvoll. genau, du sprichst mir aus der Seele: Auch wenn die Anwendung "Kinderspielzeug" ist, mir gehts in erster Linie darum was neues (viel neues) zu lernen und zu verstehen. Deswegen stecke ich da auch viel (zu viel?) Gehirnschmalz rein. beim nächsten Mal will ichs dann vielleicht wirklich "gescheit" machen, und dann habe ich schon einen Erfahrungsschatz auf dem ich aufbauen kann.
Ist ja schön dass Ihr hier alle zu IIR Filtern ratet aber was ist genau der Vorteil daran? Im Kontext mit Dezimatoren würde ich vermutlich einen FIR Filter bevorzugen, aus dem einfachen Grund, dass man eine Polyphasenzerlegung machen kann. Lese ich hier richtig, dass ihr um Faktor 8 Dezimieren wollt? Dann würden bei einem Polyphasen-zerlegten FIR Filter zum Beispiel 2 Koeffizienten bei der schnellen Samplerate für einen Filter vom Grad 16 ausreichen. Das sollte ja zu machen sein, oder? Also pro Sample auf Input Seite eine Shift-reg Operation, 2 Multiplikationen und eine Addition. Hinten fällt dann eben das langsamere Signal (Faktor 8) raus, welches mit einem Filter vom Grad 16 gefiltert wurde. Dafür erreicht man wohl besseres SNR als bei IIR Filtern und hat garantierte Stabilität ohne größere Schwierigkeiten. Ähnlich implementiert man übrigens Asynchrone Sample Rate Converter, die FIR Filter von Graden weit über 1000 haben mit nur einstelligen Zahlen an MAC Operationen.
Michael Reinelt schrieb: > Die Möglichkeit, den Dezimator auf mehrere Stufen aufzuteilen, habe ich > bisher noch nicht in Betracht gezogen. Da muss ich erst intensiver > drüber nachdenken... welchen Vorteil hat das? Die Anforderungen an den Filter sind dann geringer, da die Signalbandbreite nicht sehr klein wird im Verhältnis zur maximal darstellbaren Bandbreite. Wenn du auf einen Schlag einen sehr hohen Dezimationsfaktor benutzt (z.B. 8), musst du dein Signal ja sehr hart auf 1/16 der maximalen Bandbreite beschränken um kein Aliasing zu bekommen. Dafür brauchst du einen guten Filter. Machst du nur Faktor 2, musst du dein Signal nur auf 1/4 der Bandbreite bringen, das ist nicht so schwer.
Guest schrieb: > Polyphasenzerlegung Klingt (wie der Rest deines Beitrags) spannend, nur habe ich nicht die Spur einer Idee was das schon wieder ist. Kannst du das etwas langsamer erklären?
Michael Reinelt schrieb: > Guest schrieb: >> Polyphasenzerlegung > > Klingt (wie der Rest deines Beitrags) spannend, nur habe ich nicht die > Spur einer Idee was das schon wieder ist. Kannst du das etwas langsamer > erklären? Die Idee ist Simpel: Ein Signal schreiben wir im Diskreten als Summe über die einzelnen, verschobenen Pulse. Einen Filter entsprechend als Summe der verschobenen Pulse der Impulsantwort. Die eigentliche Filterung ist dann eben die Faltung der beiden Summen. Also für Signal x[n] und Filter h[n] so: y[n] = Summe über i: x[n-i]*h[i] Nun können wir die Summe einfach aufteilen, zum Beispiel so: y[n] = Summe über i: x[n-2*i-0]*h[2*i+0] + Summe über i: x[n-2*i-1]*h[2*i+1] Wir sehen also, dass wir auch zwei Filter parallel schalten könnten, die jeweils nur die Hälfte der Koeffizienten haben. Das ist dann eine Polyphasenzerlegung. Letztendlich haben wir zu diesem Zeitpunkt aber natürlich noch nichts gespart. Interessant wird es erst, wenn wir sagen, wir wollen auch nur jedes zweite Outputsample (also Downsampling). Wir können jetzt einfach die Summe nur für jedes Zweite n auswerten. Damit berechnen wir nur für jedes Output Sample einmal alle Koeffizienten. Analog geht das fürs Upsampling: Wir müssen nur für jedes Input Sample alle Koeffizienten einmal benutzen. Für die Kombination aus Up- und Downsampling müssen wir dann nurnoch für jedes Output Sample alle Koeffizienten benutzen, die auch einem Input Sample entsprechen. Dadurch kann man, wie gesagt, Faltung mit mehreren Tausend Koeffizienten effizient berechnen. Dieses Vorgehen entspricht dem oben von dir zitierten "Man muss nur Samples berechnen, die man dann auch benutzt". Mit IIR Filtern geht das übrigens nicht so einfach: Man kann nicht einfach nur jedes Zweite n berechnen, da das Filter eine Rückkopplung hat und somit jedes n für jedes andere n relevant ist.
Ich hab jetzt versucht mich etwas in "polyphase decimation" einzulesen, wobei das sehr hart für mich ist weil mir einfach die zugrundeliegende Mathematik fehlt :-( Auch wenn ich das tief im Innersten vielleicht sogar nachvollziehen könnte, ich versteh schon die mathematische Sprache nicht. Soweit ich das verstehe (und ich bitte um Korrektur): ich spar mir damit jede Menge Multiplizierer, aber keine Multiplikationen! Ich sehe den großen Vorteil darin, dass ich Hardware mehrfach und parallel verwenden kann, in Software sehe ich die Stärke (noch) nicht. Aber eine großartige idee werd ich auf jeden Fall mitnehmen: In meiner ursprünglichen Idee war es so, dass ich beim 8:1 Dezimieren 7 Takte lang Däumchen gedreht hätte (bis auf das Reinschieben des Meßwertes in den Ringbuffer), dafür im 8ten Takt dann alle Hände voll zu tun hätte, meinen Filter auszumultiplizieren. Mit geschickter Implementierung eines polyphase-Algorithmus kann ich die Rechenzeit gut auf die 8 takte verteilen. Sehe ich das richtig?
Guest schrieb: > Wenn du auf einen Schlag einen sehr hohen Dezimationsfaktor benutzt > (z.B. 8), musst du dein Signal ja sehr hart auf 1/16 der maximalen > Bandbreite beschränken um kein Aliasing zu bekommen. Dafür brauchst du > einen guten Filter. Machst du nur Faktor 2, musst du dein Signal nur auf > 1/4 der Bandbreite bringen, das ist nicht so schwer. Hmmm.... ob ich jetzt einen guten Filter oder drei schlechtere hintereinander mache, macht für mich jetzt nicht den großen Unterschied. Im Endeffekt muss nach en drei Filtern Nyquist sauber unterdrückt sein, da kommt man ja sowieso nie drum rum. ich verstehe dass man z.B. eine 60:1 Dezimation auf mehrere Schritte aufteilt.
Hallo zusammen - wen es interessiert, ich hab mal mit einem atmega1284 einen kleinen Spektrumanalysator gebastelt - hier nachzulesen: https://sophisticatedcircuits.wordpress.com/2014/06/10/fft-auf-dem-atmega1284p/ ich habe jetzt wirklich nicht alle Beitraege gelesen, nur soviel: wenn man einen AVR-ADC nimmt, sollte man es mit der Wissenschaft der Signalverarbeitung nicht uebertreiben... Ja, man kann sehr viel aus den Teilen rauskitzeln, bis mehrere Mhz Abtastrate, aber die effektive Aufloesung ist onehin schlechter als die nominelle, und wenn man dann anfaengt, ueber das Fuer und Wider von fuenfpoligen aktiven Filtern zu debattieren... hilft nichts. Einfacher RC-Tiefpassfilter, Grenzfrequenz niedrig ansetzen, Welligkeit in Kauf nehmen, ist besser als nachher Abtastartefakte zu sehen oder zu hoeren.
Moin, Derweilen glaub' ich auch, dass das so'n Polyphasendezimator das Ding der Wahl sein koennte. Hab' mal spasshalber ein IIR zusammengestuempert - da brauch' ich pro Takt (vor der Dezimierung) 9 Multiplikationen - ich vermut' mal, mit dem Polyphasendezimator kommt man auf 8 Multiplikationen pro Takt, wenn man z.b. ein 64-tap Prototypenfilter hernimmt. Und hat schoenere Gruppenlaufzeit. Und weniger Overflow. Und ueberhaupt... In dem .zip sind Plots vom eigentlichen 6pol. Cauer-Tiefpass und von der Integerrealisierung und ein .c file, mit dem ich die tatsaechliche Impulsantwort "berechnet" hab. Oben im .c stehen ein paar Kommandos fuer GNU-Octave, mit denen ich die Filterkoeffizienten erraten/berechnet hab'. Gruss WK
Boah, dickes Danke! Der Hinweis auf octave inkl. ein paar Code-Brocken war schon mal Gold wert. ich als alter Linuxer hab das natürlich sofort installiert, und deine Sachen haben auf Anhieb funktioniert. So ein Cauer, der kann halt was... Dann hab ich mit etwas mit FIR gespielt, das war anfangs eher enttäuschend, immer diese müden Butterbrot-Filter... Bis ich dann Parks-McClellan entdeckt habe (heisst dort 'remez'). Das Ding tut genau was ich gesucht habe. Genial! Noch schöner: Damit lassen sich sofort Einflüsse der Rundungsfehler bei Konvertierung der Koeffizienten in integer erfassen. Wenn ich das in 8 bit rechne (ich würde dann sogar die s.7-Darstellung wählen, also Festkomma-Arithmetik) bleibt das Ergebnis immer noch sehr gut. Die Koeffizienten sind symmetrisch, spart nochmal Multiplikationen. Das bringt hier aber wenig, ein fmul am AVR geht eh in zwei Takten durch. Einige der Koeffizienten sind 0 (je nach Rundungstiefe), spart überhaupt Berechnungen. Wenn ich auf s.7 runde, sind 12 von 64 Koeffizienten 0, bleiben 52 Multiplikationen. Wenn ich weiter auf 8 Takte parallelisiere, sind das 6 bzw. 7 Multiplikationen pro Takt. Die Polyphase-methode hat hier einen weiteren Vorteil: die 6(7) Operationen lassen sich nun mit vertretbarem Aufwand händisch "entrollen", was den Code nochmal beschleunigen sollte. Ich bin ja sowas von begeistert!
Erfolgsmeldung! Ich habe jetzt so einen "polyphase decimator" in C implementiert, und das Ding funktioniert wunderbar, und sogar schnell genug! Ein paar (meiner Meinung nach eindrucksvolle) Details: AVR ATmega328P mit 12 MHz (mein Breadboard, die finale Version könnte 20 MHz kriegen) ADC Abtastfrequenz 20 kHz 8 bit FIR Tiefpass mit 64 (!!!) Bins, -30db zwischen 1 und 1.3kHz (!!!) Downsampling um Faktor 8 auf 2.5 kHz FFT mit 256 Abtastpunkten (128 Bänder als Ergebnis, Auflösung 10 Hz, Bereich 0..1280Hz, nutzbarer Bereich 0..1kHz darüber kein Signal weil vorher weggefiltert Der Dezimator (inkl. FIR) läuft komplett im Interrupt, und genehmigt sich 40% der CPU-Zeit (19..21us entspricht 230..250 Clocks je Abtastwert) Das klingt schlimm, ist es aber nicht: In der Hauptschleife sieht das ganze so aus: - Warten bis Sample fertig (70 ms) - FFT-Preprocessing (<1ms) - sofort neues Sample starten - FFT berechnen (28ms) - FFT postprocessing (3ms) Es wird also praktisch ununterbrochen gesampelt, die Berechnung der FFT wird parallel zum Sampeln und Filtern ausgeführt, und leidet natürlich unter der Interrupt-Last. Es geht sich aber locker aus, was dazu führt dass 70ms "Däumchen gedreht" wird. Es dürfte also gar nicht notwendig sein, den CPU-Takt zu erhöhen. Also, von wegen "nicht mit einem AVR" :-)
Moin, Yeah! Reschbeggd! Michael Reinelt schrieb: > Also, von wegen "nicht mit einem AVR" :-) Wie in allen Foren gibts hier natuerlich auch diverse Bedenkentraeger bis professionelle Dummschwaetzer, die glauben, nur weil sie's nicht hinbringen, wuerd's nicht gehen. :-D (Ich hab' vor 30 JAhren aufm ZX81 mit selbst angeflanschtem AD/DA-Wandler schon Faxen gemacht, da wusst' ich noch garnicht, dass es auch digitale Filter und all sowas gibt) Was ich mir mal gedacht' hab' - aber noch nie weiterverfolgt - vielleicht waer das ja was fuer dich: FFT fuer Lichtorgel/Spektrumsanalysatorzwecke macht ja anscheinend heute jeder. "Bloed" bei FFT: alle Ausgangskanaele sind gleich breit (In Hz). "Schoener" waers evtl, wenn die verschiedenen Kanaele alle z.b. eine Oktave (oder Terz oder so) breit waeren. Also koennte man sich doch ein Fsample/4 FIR Tiefpass (so eines mit vielen Nullen als Koeffizienten) basteln. Wenn man bei dem nur dem Koeffizienten in der Mitte ein Minus verpasst, hat man ein Fsample/4 Hochpass. - Kostet also nicht viel Rechenzeit extra, und man kann sein Spektrum in eine obere und eine untere Haelfte filtern. Obere Haelfte: Leistung messen, logarithmieren und anzeigen, untere Haelfte um 2 dezimieren und das selbe Spiel (mit dem selben Filter) nochmal. Und dann nochmal...usw. vielleicht so 9x. Dann hat man 10 Ausgangssignale, jeweils eine Oktave breit... Das duerfte eigentlich auch recht sparsam mit Rechenzeit umgehen, weil ja laufend dezimiert wird und damit nur ganz selten (im untersten Bereich) ein Signal durch alle Filter geschickt werden muss. Der Rechenaufwand fuer alle Filter zusammen duerfte nur nicht ganz doppelt so hoch werden wie fuer die erste TP/HP-Kombi. Wenn das dann tut: Das muesste auch mit Terz oder anderen Intervallen < Oktave gehen, nur das Downsampling wird dann aufwendiger, weil "krummer" Dezimationsfaktor. Gruss WK
derguteweka schrieb: > Yeah! Reschbeggd! Danke! ich hab jetzt mal den Frequenzgang durchkontrolliert: Null (in Worten: Null) Aliasing, erst ab 10kHz, das liegt aber daran dass ich noch keinen (analogen) Aliasing-Filter vor dem ADC habe, sondern direkt vom Funktionsgenerator einspeise). Aber der "kritische" Bereich den der Dezimator wegblenden soll, funktioniert ganz ausgezeichnet! ich habe allerdings etwas Ripple im Passband (naja, "etwas" ist untertrieben, 6dB), der ist aber fast "beabsichtigt", ich hab bei der Filterauslegung bewusst höheren Passband-Ripple zugelassen, um (nach der Rundung) eine höhere Stopband-Dämpfung zu bekommen. Der Passband-Ripple lässt sich aber einfach rausrechnen, da systematisch. > Was ich mir mal gedacht' hab' - aber noch nie weiterverfolgt - > vielleicht waer das ja was fuer dich: Meine liebgewonnene und handgepimpte FFT (postprocessing 5x schneller als Elm-Chan) geb ich nicht mehr her :-) Außerdem wirds eh keine "Lichtorgel" mehr (ich hab ja nur mehr Bässe, und keine Höhen) sondern eine "Lichttrommel": ich hab ja absichtlich die FFT-Auflösung auf 10Hz gesetzt, weil ich damit einzelne Trommeln unterscheiden kann. Jede Trommel kriegt ihre Farbe (naja, fast, 5 Trommeln und drei Kanäle, ich werd wohl die toms zusammenfassen) Insofern ist das schon ein Alleinstellungsmerkmal :-)
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.