Forum: Digitale Signalverarbeitung / DSP / Machine Learning Audio Signal


von Berti (Gast)


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

von Läubi (Gast)


Angehängte Dateien:

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)

von Läubi (Gast)


Lesenswert?

22khz 16bit (hatte ich vergessen)

von Berti (Gast)


Lesenswert?

Amplitude und co?

von Benedikt (Gast)


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...

von Erik (Gast)


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!

von DerMax (Gast)


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.

von Berti (Gast)


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?

von Benedikt (Gast)


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

von Berti (Gast)


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

von Mamut (Gast)


Lesenswert?

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

von Berti (Gast)


Lesenswert?

Des will i net
Brauch i wieder Zig Pässe und eine Multiplexer und....

von Benedikt (Gast)


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.

von Netbandit (Gast)


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.

von Läubi (Gast)


Lesenswert?

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

von Berti (Gast)


Lesenswert?

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

von Andi (Gast)


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

von Benedikt (Gast)


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...

von Andi (Gast)


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

von Axos (Gast)


Lesenswert?

da frag ich mich wie du  softwaretechnisch die frequenzen trennen
willst.

von Markus (Gast)


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

von Andi (Gast)


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

von Thomas O. (Gast)


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?

von Markus (Gast)


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

von Netbandit (Gast)


Lesenswert?

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

von Berti (Gast)


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)

von Andi (Gast)


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

von Berti (Gast)


Angehängte Dateien:

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

von Andi (Gast)


Lesenswert?

Dann starte WinAMP und bewundere es dort!

Gruß
Andi

von Netbandit (Gast)


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.

von Berti (Gast)


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...

von Benedikt (Gast)


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

von Hagen (Gast)


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

von nides (Gast)


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

von Berti (Gast)


Lesenswert?

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

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
Noch kein Account? Hier anmelden.