Hallo Leute! Folgende Problemstellung: Ich möchte mit einem AVR (8535) und einem Grafik-LCD(128x64) einen kleinen 16 Band EQ bauen. (Progge im C - Codevision) Dazu muss ich ja die Analogen Werte über ADC einlesen und FFT Analyse machen. AIN und GLCD sind kein Problem für FFT hab i schon einige Sources gefunden. (Bin trotzdem für Tipps dankbar) Das eigentliche Problem: Wie schaut ein Audiosignal aus. Habe leider kein Oszi um mir das mal anzusehen. Eingangsignal für den AVR soll Standart Line Out vom PC sein. Hat jemand irgendwelche Links oder Infos wie das Audio Signal Levelmäßig ausschaut? Wie bringe ich es am besten auf einen für den AVR "lesbaren" Level Danke im Voraus für Eure Infos mfg. Berti
So 'sieht' der mircosoft sound aus. (C:\windows\media\Der microsoft sound.wav) Wobei dies immer relativ ist, eine andere Darstellung wäre auch denkbar, aber da haste es halt so wie der PC ein Soundsignal 'versteht' oder wie es auf ner CD/Schalptlatte/Kassette vorstellungsmäßig gepeichert ist. (natürlich sehr vereinfacht)
Amplitude ? Was meinst du damit ? Falls du das meinst: Der Line Pegel hat etwa 0,775Veff also ca. 2Vss. Ich kann dir aber jetzt schon sagen, dass ein AVR für Echtzeit FFT und IFT zu langsam ist. So 200MHz sollte der CPU dafür schon haben, wenn es kein spezieller DSP ist...
Gebe dir einen Tip... Linepegel ist ca 3v Uss, wirst schon hören wenn du zuviel Pegel hast :-) Wenn dein ADC z.B. max 5V am Eingang verträgt, solltest du an diesem Eingang statisch 2.5V anlegen, somit kann dein ADC auch die "negativen" Anteile des Sinus Wandeln. Du hast dann also einen Offset von 2.5V!
Ohne klugscheißern zu wollen aber du willst einen Spectrum Analyzer bauen, bei einem Equalizer könnte man dann die einzelnen Frequenzbänder dann noch unterscheidlich verstärken und am Ende würde man das ganze dann wieder DA wandeln, aber das nur am Rande... Wie oben schon erwähnt is ein Spectrum Analyzer mit einem AVR nicht wirklich realisierbar, schon gar nicht in C und noch viel wneiger mit 16 Bändern. Für 16 Bänder bräuchte man denke ich mindestens eine 1024 Punkte FFT, dafür reicht der interne Speicher eines AVRs gar nicht.
Danke erst mal für die Zahlreichen Antworten! Das mit dem Spectrum Analyzer ist mir schon bewusst... Also ists mit nem AVR net so gut... Wie viele Bänder könnte ich schaffen?
Mit externem RAM sind 16384 oder 32768 denkbar. Allerdings schaffst du dann allerhöchstens 1 FFT pro 5s... Mit 1024 Punkten sind etwa 5 FFTs/s möglich
Sorry noch mal.. Ein irrtum meinerseits: Möchte natürlich nur die Levels "in der nähe"16 unterschiedlicher Frequenzen wissen. So wies zb im Winamp is
Trenne doch das Signal analog in die verschiedenen Frequenzen auf und messe dann die Pegel mit dem AD-Wandler des AVR's
Irgendwo im Internet habe ich mal eine einfache Sofware für 8 Frequenzen gesehen, die rein mit Integern gearbeitet hat. Diese müsste schnell genug sein um auch auf einem AVR zu laufen. Mal schauen ob ich die noch finde.
naja aber 16 Frenquenzbänder analog zu trennen wird schon reichlich schwer... ich habe mal versucht analog einen 8 Band EQ zu bauen und habe da allerlei berechnungen der Grenzfrequenzen u.s.w. durchgeführt... wenn man nicht wirklich viel aufwand betreiben möchte ist das Ergebnis erschütternd.
Ähm, ist schon klar, das der ADC eines AVR nur 15KSPs (15000 Samples je Sekunde) schafft? Weis nicht was passiert, wenn man den ADC-Prescaler über das Maximum einstellt (nur noch rauschen, haufen Messfehler). In Herz wären das dann 7,5KHz ohne Multiplexen, also Mono. Mit Multiplexen kommt man dann auf 3,75KHz. Sehr Madig! Wenn, dann muß man das ADC extern machen und +ber mehrere I/O-Pins einlesen (Womöglich 16 wenn Verlustfrei). Problem ist dann noch die synchrone Ausgabe weil ja kein DA-Konverter im AVR drinne ist. Viel Spaß! Gruß Andi
a) Für FFT muss man nix multiplexen. b) Der AVR schafft problemlos 30kS bei 8bit... c) Mir reichen eigentlich 500 Aktualisierungen/s bei einem Spektrumanalyser...
Autor: Benedikt Datum: 27.12.2004 21:47 ---------------------------------------------------------------------- a) Für FFT muss man nix multiplexen. Und wenns in Stereo sein soll? b) Der AVR schafft problemlos 30kS bei 8bit... Da sagt das Datenblatt über den ADC aber was anderes. c) Mir reichen eigentlich 500 Aktualisierungen/s bei einem Spektrumanalyser... OK, unter Equalizer verstehe ich Input, Verarbeitung und Ausgabe. Wenns nur zur Anzeige sein soll tuns dann auch nur 50 Aktualisierungen/s. Desweiteren gehts hier nicht um Dich sondern um Berti! Gruß Andi
@Andi: Die 15kSPS gelten für 10Bit Auflösung. Der ADC schafft auch deutlich mehr, steht auch im Datenblatt, allerdings ein bischen versteckt. @Axos: Stichwort FFT. http://de.wikipedia.org/wiki/Schnelle_Fourier-Transformation
@Axos: Alles pure Mathematik. Siehe WinAmp und Mediaplayer 8.x/9.x. Buffer lesen, analysieren, wandeln, ausgeben und Anzeigen. Und Input, Analyse, Umwandlung, Ausgabe und Anzeige soll dann alles auf einmal (in Echtzeit) ablaufen. Allerdings ist dafür denke ich der schnellste AVR zu langsamm wenn es ohne Qualitätsverluste gehen soll (44,1KSPs). Ich hatte damals ein Echtzeit-Echo mit nen 68000 im Atari ST gemacht (Input/2 + (Buffer+n)/2). Hat den 16/32-Bitter auch schon zur Hälfte beschäftigt. Mit am Parallel-Port selbst gebautem A/D-Wandler gingen rein zum Aufnehmen und schreiben ins RAM max. 54KSPS ohne das die CPU irgend was anderes neben gemacht hat. Das kann ein AVR noch packen aber Frequenzzerlegung, Frequenzverstärkung von insgesammt 16 und deren erneutes zusammenfügen glaube ich nicht. @Markus: Wahrscheinlich ist das so versteckt, das es nicht mal die Suchen-Funktion vom Acrobat findet. Hatte mit den Stichwörtern "30 KSPS", "30KSPS", "KSPS" und einfach nur "30" nix gefunden im Mega8535-PDF. Gruß Andi
Hallo, also das mit der Samplingrate interessiert mich ja auch brennend. Mit wieviel kHz meint ihr sollte ich den ADC takten, eigentlich reichen mir 8 Bit aus?
@Andi: Er ist auch nicht auf 30kSPS begrenzt. Aktuelles Datenblatt S.260 (Electrical Characteristics/ADC Characteristics). Eine normale Konvertierung dauert 13 Takte, also kann man bei 200kHz etwa 15kSPS erreichen. Bei 1MHz ADC-Clock erreicht man also etwa 75kSPS. Die Genauigkeit liegt dann noch bei 7 Bit. Markus
7bit reichen ja für diese Anwendung aus, so wie ich das sehe, oder willst du dein Audiosignal in 256 Schritten darstellen?
Ich habs am Anfang falsch geschrieben! Will keinen EQ sondern einen Spectrum Analyzer. Ausgabe auf LCD is kein Zeitfresser wil das LCD über RS232 angesteuert wird! Mono reicht mir vollkommen Stereo is fein.(Bzw. nur RE oder LI Kanal)
Um eine Frequenz zu ermitteln reichen auch 5 Bit nur ist es ja nicht so feinfühlig. Fragt sich immer noch, was Berti nun will. Will er einen richtigen Equalizer mit verändertem Output und Anzeige oder einfach nur eine Anzeige? Das erstere ist problematisch da sehr rechenintensiv, wenn nicht sogar unmöglich. Gruß Andi
Sorry für den Doppelbeitrag... Ich will im Grunde so was wie im Anhang ausgeben... (und das Original Signal mit dem AVR einlesen) Nur eben 16 "Balken" die sich bewegen Ausgeben und verändern will i gar nix Ich hoffe jetzt is klarer was ich meine
Berti; vielleicht gibt es dafür sogar schon einen fertigen IC, immerhin gibt es für equalizer auch fertige IC's, daher könnte es gut sein.
Danke... :-) Ich möchte es aber mit dem AVR machen weil ich es in einem Süäteren Projekt weiter verwenden will... Sonst würde ich mich ja voll und ganz mit WINAMP zufrieden geben...
Autor: Andi - Andreas.Kassneronlinehome.de Datum: 27.12.2004 22:16 a) Für FFT muss man nix multiplexen. Und wenns in Stereo sein soll? Ein Spektrum Analyser ist nur in den seltensten Fällen Stereo b) Der AVR schafft problemlos 30kS bei 8bit... Da sagt das Datenblatt über den ADC aber was anderes. Wer lesen kann ist klar im Vorteil: "15kS at maximum Resolution" c) Mir reichen eigentlich 500 Aktualisierungen/s bei einem Spektrumanalyser... OK, unter Equalizer verstehe ich Input, Verarbeitung und Ausgabe. Wenns nur zur Anzeige sein soll tuns dann auch nur 50 Aktualisierungen/s. Desweiteren gehts hier nicht um Dich sondern um Berti! Ich wollte ihm nur helfen indem ich ein paar schlichtweg falsche Aussagen wiederlege.... @Berti google mal nach fft, da findest du mehrere C Programme. Falls das nicht geht, nimm ein BA3830S, gibts bei ELV
suche mal nach FIR Filter als Ersatz für eine FFT. In deinem Falle benötigst du garkeine 22Khz Samplerate, denn in den oberen Frequenzspektren normaler Musik wirst du mit einem solchen Spectrum Analyser keine zeitlichen "Regelmäsigkeiten" erkennen. Wichtiger sind die tieferen Frequenzen, bis 500Hz die Bässe und somit der Beat, bis 3000 Hz die menschlichen Stimmen und bis 5000Hz die meisten Instrumente. Da drüber wird das Spektrum zeitlich keine Regelmäßigkeiten erkennen lassen. D.h. der Zusammenhang zwischen gehörter Musik und dem Spektrum der oberen Frequenzen ist für den Menschen nicht nachvollziehbar, zumindestens nicht in live. Die FFT hat nun das Problem das sie gleichmäßig über den Frequenzbereich das Spektrum erzeugt. Meistens ist es aber sinnvoller die unteren Frequenzen genauer aufzuteilen als die oberen Frequenzen. Um dies zu erreichen muss die FFT mit vielen Punkten durchgeführt werden, ergo langsammer. Nutzt du aber FIR Filter dann kannst du für jedes Band manuell dessen Frequenzbereich einstellen und somit eine nichtlineare Auswertung der Frequenzen vornehmen. Dies ist für Spektrum Analyser sinnvoller. Gruß Hagen
vom fir-filter halte ich hier nichts. wenn du ein fir-filter im zeitbereich implementierst, dann brauchst du unmengen an multiplikationen. besser ist in dem fall wahrscheinlich der görtzel-algorithmus. das ist eine quasi-fft, mit der du eine bestimmte spaktrallinie ausrechnen kannst. das ist in deinem fall wesentlich schneller zu rechnen, weil du nur 16 linien ausrechnen willst. nides
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.