32 Kanal FFT Spektrum Analyser fr 32x16 Display

Die eigentliche Auftrennung des Audiosignals in enthaltenen Frequenzkomponenten erfolgt komplett digital.
Dazu wird das Audiosignal mit 44kS digitalisiert und dann digital in 64 Frequenzkanle aufgeteilt.
Durch die 44kS Samplerate kann der Tiefpassfilter entfallen, wenn man den Analyser an einem PC oder CD Player betreibt,
der sowiso nur mit 44kHz arbeitet und somit keine Frequenzen >22kHz ausgeben kann.
Allerdings ist die Auflsung von 22kHz/64=343Hz vor allem fr die niedrigen Frequenzen nicht gerade optimal.
Aus diesem Grund erfolgt eine zweite Messung mit 5,5kS, also etwa 2,7kHz Bandbreite. Die hiermit erreichbare Auflsung
liegt bei 2750Hz/64=43Hz, was auch bei tiefen Frequenzen eine ausreichende Genauigkeit liefert.
Dadurch entsteht allerdings ein Problem: 
Zeichnet man Daten mit einer geringeren Bandbreite auf, als diese im Signal vorkommen, erscheinen alle Frequnzen gespiegelt.
Hier ein Beispiel: Man zeichnet mit 2kS/s, hat also 1kHz Bandbreite, aber gibt ein Signal von 1,5kHz auf den Eingang.
Dieses erscheint bei 1kHz gespiegelt und erscheint dementsprechend bei 500Hz. Es gibt keine Mglichkeit zu unterscheiden,
ob das Signal bei 500Hz jetzt von einem Signal auf 500Hz, 1500Hz, 2500Hz, 3500Hz oder 4500Hz usw. stammt !

Daher bentigt man einen mglichst steilen Tiefpassfilter fr den tiefen Bereich, der alle greren Frequenzen entfernt.
Am besten geht das mit einem Switched Capacitor Filter, der nicht nur steil ist, sondern auch eine einstellbare Grenzfrequenz hat.
Da der MAX292 leider absolut nirgends (auer als Sample bei Maxim) zu bekommen ist, habe ich diesen durch einen 
steilen, diskreten Tiefpass ersetzt. Dieser Filter ist ausreichend steil, und da ich trotz 2,7kHz Bandbreite nur 
1,3kHz verwende, reicht dieses Filter aus. Dieses muss nur sicherstellen, dass bis 1,3kHz das Signal unverndert
durchgelassen wird, aber oberhalb von 4kHz nichts mehr durchkommt. 4kHz erscheinen nmlich, gespiegelt an der
2,75kHz Achse, bei 1,5kHz also auerhalb des benutzen Bereiches von 1,3kHz.

Der mit dem TLC272 aufgebaute Tiefpassfilter dient also zur Begrenzung des 5,5kS Bereichs.
Jede der beiden Messungen ergibt jeweils 64 Werte, die einigermaen logarithmisch zu 32 Werten zusammengefasst werden.
Dies geschieht durch Maximalwertbildung aus bis zu 8 Werten.
Diese 32 Werte werden in Grafikdaten fr ein 32x16 Display umgerechnet, und ber den UART mit 115,2kBaud versendet.
Vor Beginn der bertragung geht der Sync Pin kurz auf Low, um den Adresszhler des Empfngers zurckzusetzen.

Zur Geschwindigkeit:
Die FFT Routine arbeitet verdammt schnell und erreicht ca. 70 Messungen pro Sekunde ! Da ich mit zwei Messungen arbeite,
und die langsame Messung zustzlich ausbremst erreiche ich insgesamt 30 Messungen pro Sekunde, was bei weitem ausreicht.

Der interne ADC des mega8 wird mit 44,3kS entsprechned 576kHz ADC Takt. Laut Datenblatt sind fr 10bit Auflsung maximal
200kHz erlaubt. Daher erhlt man im oberen Frequenzbereich ein leichtes Rauschen, was dazu fhrt, dass die unterste LED Reihe
leicht flackert, auch wenn kein Signal anliegt. Dies lsst sich aber lsen, indem man die unterste Zeile ausblendet (make_barsh Routine),
oder das ganze nur mit 22kS betreibt, was allerdings einen zustzlichen 11kHz Tiefpass erfordert.

Der Watchdog dient dazu, den mega8 neu starten, falls sich die FFT Routine aufhngt, was bei sehr starker bersteuerung passiert.
Im Normalbetrieb sollte dies jedoch (fast) nie vorkommen.
