mikrocontroller.net

Forum: Digitale Signalverarbeitung / DSP Audio Signal


Autor: Berti (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Läubi (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
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)

Autor: Läubi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
22khz 16bit (hatte ich vergessen)

Autor: Berti (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Amplitude und co?

Autor: Benedikt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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...

Autor: Erik (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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!

Autor: DerMax (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Berti (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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?

Autor: Benedikt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Berti (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Mamut (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Trenne doch das Signal analog in die verschiedenen Frequenzen auf und
messe dann die Pegel mit dem AD-Wandler des AVR's

Autor: Berti (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Des will i net
Brauch i wieder Zig Pässe und eine Multiplexer und....

Autor: Benedikt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Netbandit (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Läubi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Müssen es den 16 sein oder reicht dir auch ein 6+1 ??

Autor: Berti (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Naja schön wären schon 16 Frequenzen aber es würden auch 6 fürs erste
Reichen

Autor: Andi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ä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

Autor: Benedikt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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: Andi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Axos (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
da frag ich mich wie du  softwaretechnisch die frequenzen trennen
willst.

Autor: Markus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@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

Autor: Andi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@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

Autor: Thomas O. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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?

Autor: Markus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@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

Autor: Netbandit (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
7bit reichen ja für diese Anwendung aus, so wie ich das sehe, oder
willst du dein Audiosignal in 256 Schritten darstellen?

Autor: Berti (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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)

Autor: Andi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Berti (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Andi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dann starte WinAMP und bewundere es dort!

Gruß
Andi

Autor: Netbandit (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Berti (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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: Benedikt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Hagen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: nides (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Berti (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Boa... Fanke für die Infos...
Werd mal sehen was ich daraus gewinnen kann...

Antwort schreiben

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

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.