Autor |
Audio Spektrum Analyzer Projekt Suche nach: audio (2540) |
|
|
|
|
BID = 45211
MatthiasAsselborn Stammposter
Avatar auf fremdem Server ! Hochladen oder per Mail an Admin
Beiträge: 411 Wohnort: Altenstadt
|
|
Hallo
habe seit geraumer Zeit den Bau eines Audio Spektrum Analyzers angefangen. Habe Ihn auch vollendet
nur leider komplett in "analoger Form"
d.h. Bandpassfilter mit Widerständen und Elkos / Op's
zu jedem einzelnen Kanal eine Aussteuerungsanzeige
ich verwendete je einen UAA180.
...schön und gut.. der Analyzer sieht auch optisch gut aus
nur .. der UAA180 ist ein sehr altes Bauteil
und hat leider keinen constanten Dezibel verlauf
z.b. -8 -7-6 -5 .. 0 +1 +2 +3
sondern er fängt irgendwo bei -24 an und geht dann rassant noch oben
nun zu meiner Überlegung
ich habe den Atmel 2313 10Mhz hergenommen
und habe eine LED Aussteuerungsroutine
programmiert (vorerst mal 12 Led s pro Kanal)
mit constantemn Dezibel einer Schritt
später nehm ich n größeren Stein
mit mehr Speicher und Pins für 16 Led s
hänge aber nun komplett an den
Bandpassfiltern denn die beiden IC's
der LMF 380 und der LMF60-100
die ich mir vorgestellt habe...
sind eingestellt worden und das schon seit 1997..
Datenblätter sind aber noch verfügbar.
Mit 10 der 380 er und 2 der 60-100
würde sich dann ein 1/3 octave Analyzer
mit 30 Bändern verwirklichen lassen
nur weis ich im Moment echt nicht weiter
wie ich das lösen soll....
es gäbe noch ein Japan IC
den NJU 7507 auch ein mehrkanaliger Filter IC
wobei ich genauso wenig weis woher beziehen...
bei mir hängt es nun also an den Bandpässen ....
den AVR der zur Aussteuerung dient
kann ich ja mit 5 CMOS IC's
2mal den 4067B, 4515B
und einmal dem 4060B Multiplexen
oder geht das Multiplexen auch in einem Atmel ?
ich bin noch realtiv neu in der ganzen Geschichte mit
µC programmieren ... bitte also
nicht drüber lachen
gibt es eine Möglichkeit
irgendwie die Bandpässe zu verwirklichen ?
Atmel o.ä. ?? wenn ja wie ??
es müsste aber dan ein analoges Signal
am ende jenes Filters liegen ..
so dass es zusammenpasst
gibt es Bausteine mit integrierten D/A's ?
oder wie könnte ich das mit den
Bandpässen machen
bitte helft mir da weiter
und nicht einfach den Kopf schütteln ...
|
|
BID = 45248
Benedikt Inventar
Beiträge: 6241
|
|
Wenn es wirklich einfach sein soll (von der Hardware her), dann nimmt man einen AD Wandler, der etwa 128 bis 1024 Werte aufzeichnet und abspeichert.
Diese Werte lässt man durch einen FFT Algorithmus laufen, und erhält als Ergebnis die einzelnen Frequenzen des aufgezeichneten Signals.
Ich habe mal versucht solch einen Algorithmus in Assembler für einen 8051 Mikrocontroller (um)zuschreiben.
Die ersten 10% hatte ich nach 2 Stunden, und habe es dann aufgegeben...
Hier der Code in QBasic für 8192 Werte (M=13, 13Bit=2^13)
Der PC benötigt dafür etwa 1 Sekunde zum berechnen. Ein optimiertes Code in einem Mikrocontroller könnte dies in etwa der gleichen Zeit schaffen, wenn man mit Festkommazahlen rechnet und einige weitere Vereinfachungen durchführt.
Wenn man mit 50Hz Auflösung zufrieden ist, benötigt man keine 8192 Werte sondern es reichen 128 oder 256. Dann ist das Programm um ein Vielfaches schneller.
Vielleicht findet sich was für den AVR im Internet
Einfach mal nach AVR + FFT googeln...
PI! = 3.1415926535#
M = 13
n=2 ^ M
K2 = 1
FOR K = 1 TO M
K2 = 2 * K2
K1 = K2 / 2
TH! = (2 * PI! / n) * K1
NK = n / K2
N1 = n / K1
FOR I = 1 TO NK
AG! = (I - 1) * TH!
WR! = COS(AG!)
WI! = -SIN(AG!)
FOR J = N1 TO n STEP N1
J1 = J - N1 + (I - 1)
J2 = J1 + NK
E1 = 2 * J1
E2 = 2 * J2
O1 = E1 + 1
O2 = E2 + 1
DR! = X(E1) - X(E2)
DI! = X(O1) - X(O2)
X(E1) = X(E1) + X(E2)
X(O1) = X(O1) + X(O2)
X(E2) = WR! * DR! - WI! * DI!
X(O2) = WI! * DR! + WR! * DI!
NEXT
NEXT
NEXT
J = 0:
FOR I = 0 TO n - 2
IF I < J THEN
EI = 2 * I
EJ = 2 * J
t! = X(EI)
X(EI) = X(EJ)
X(EJ) = t!
t! = X(EI + 1)
X(EI + 1) = X(EJ + 1)
X(EJ + 1) = t!
END IF
K = n / 2
AGAIN:
IF K > J THEN
J = J + K
ELSE
J = J - K
K = K / 2
GOTO AGAIN:
END IF
NEXT
t! = X(0) + X(1)
X(1) = X(0) - X(1)
X(0) = t!
X(n + 1) = -X(n + 1)
N2 = 2 * n
FOR K = 1 TO n / 2 - 1
K2 = 2 * K
NK = N2 - K2
AR! = X(K2) + X(NK)
AI! = X(K2 + 1) - X(NK + 1)
BR! = X(NK) - X(K2)
BI! = -X(NK + 1) - X(K2 + 1)
S! = SIN(K * PI! / n)
C! = COS(K * PI! / n)
CR! = BR! * S! - BI! * C!
CI! = BR! * C! + BI! * S!
X(K2) = (AR! + CR!) / 2
X(K2 + 1) = (AI! + CI!) / 2
X(NK) = (AR! - CR!) / 2
X(NK + 1) = (CI! - AI!) / 2
NEXT
FOR l% = 0 TO n - 1
X(l%) = (X(2 * l%) * X(2 * l%) + X(2 * l% + 1) * X(2 * l% + 1)) + 1
X(l%) = ((LOG(X(l%))) - 10) * 40
IF X(l%) < 0 THEN X(l%) = 0
NEXT
|
|
BID = 45329
MatthiasAsselborn Stammposter
Avatar auf fremdem Server ! Hochladen oder per Mail an Admin
Beiträge: 411 Wohnort: Altenstadt
|
was bedeutet denn der ausdruck FFT und FIR ?
habe nun mal kurz gegoogelt
bin aber nur auf den einigermaßen brauchbaren Link
http://instruct1.cit.cornell.edu/co.....lisa/
gestoßen und da ist mir ein Projekt aufgefallen, in dem
mit einem AT90S8535 bei 9kHz Samplingfrequenz ein "einfacher"
Spektrumanalysator aus acht FIR-Bandpässen gebaut wurde.
(A/D-Wandler -> RAM -> Filter offline drüberlaufen lassen -> RS232
könnte ich teile des Sources für meine Version übernehmen
oder ist das ganz was anderes
mich stutzt die 9 khz Samplingfrequenz ?
was versteht man denn darunter ?
und wieso haben die auf der Seite
im Schaltbild einen Bandpass analog aufgebaut ?
|
BID = 45331
MatthiasAsselborn Stammposter
Avatar auf fremdem Server ! Hochladen oder per Mail an Admin
Beiträge: 411 Wohnort: Altenstadt
|
sobald ich den obigen Basic Code ausprobiere meldet der
compiler mir nen Fehler
in der Zeile
DR! = X(E1) - X(E2)
Index außerhalb des Bereiches ..
woran liegt den das ?
|
BID = 45332
Benedikt Inventar
Beiträge: 6241
|
Dies ist nur das Unterprogramm.
Als erstes musst du X als Array dimensionieren:
DIM X(8192)
Dann eine Wave Datei in das Array laden.
Ich werde mal ein kleines Demoprogramm schreiben und hier posten.
Dieses Programm wird eine Standart Wave Datei mit 8bit Mono lesen und das Spektrum anzeigen.
|
BID = 45339
MatthiasAsselborn Stammposter
Avatar auf fremdem Server ! Hochladen oder per Mail an Admin
Beiträge: 411 Wohnort: Altenstadt
|
oh das ist ja toll
ich muss ehrlich sagen das Forum hier ist super
in anderen Foren in denen ich das selbe gepostet habe
bin ich nur dumm angeredet worden
noch ne kleine frage wegen den 50 herz
meinst du damit die bildwiederholrate der led s ??
|
BID = 45445
Benedikt Inventar
Beiträge: 6241
|
Hier habe ich nun ein kleines Demoprogramm.
Im Moment ist es auf 512 Durchläufe eingestellt, benötigt dafür 1024Bytes an Daten.
Als Ergebnis liefert das Programm die Frequenzen von 0Hz bis Samplerate/2 (im Beispiel 11,025kHz/2) auf der X-Achse und deren Intensität auf der Y-Achse.
Die Auflösung auf der X-Achse beträgt 5512,5/512, etwa 10Hz.
Man kann damit also Frequenzen mit 10Hz Genauigkeit bestimmen.
In der angehängten Datei befindet sich das Programm und eine Wave Datei. Die Frequenz in der Datei steigt von 10Hz langsam auf 5000Hz an, was man auch deutlich im FFT Programm erkennen kann.
Hochgeladene Datei : FFT.zip
|
BID = 45522
MatthiasAsselborn Stammposter
Avatar auf fremdem Server ! Hochladen oder per Mail an Admin
Beiträge: 411 Wohnort: Altenstadt
|
hmm
wie setze ich das nun auf den atmel um ?
bin wie gesagt noch ein atmel programmier anfänger und schon froh dass ich das vu meter hinbekommen habe ..
das basic programm könnte man doch noch ausbauen
um es von 10 bis z.b. 20k ansteigen zu lassen
das probier ich nun mal
|
BID = 45555
Benedikt Inventar
Beiträge: 6241
|
Die 10kHz oder 20kHz sind kein Problem. Man muss nur doppelt soviele Werte aufzeichnen (pro Sekunde) als die maximale Frequenz. Für 0-20kHz müsste man also 40000 Werte pro Sekunde aufzeichnen. Man muss natürlich nicht alle 40000 Werte aufzeichen, sondern es reichen 256, um den kompletten Frequenzbereich zu erhalten. Die Auflösung ebträgt dabei dann leider nur 156Hz, aber dies sollte für einen einfachen LED Spektrumanaylser ausreichen.
Mit 2 Millionen Werte pro Sekunde (32768 Werte aufgezeichnet) kann man im Mittelwellenbereich viele Funksender empfangen. Ich konnte mit einer kleinen Spule als Antenne sehr viel empfangen und über 100 Sender identifizieren. Angefangen bei dem DCF (Funkuhr) Sender auf 77,5kHz, Deutsche Welle und viele anderen Europäischen Sender.
http://instruct1.cit.cornell.edu/co.....lisa/
Da hast due doch ein fertiges Programm, das die wichtigsten Teile enthält. Eventuell leicht angepasst und fertig ist die Schaltung.
|
BID = 45690
MatthiasAsselborn Stammposter
Avatar auf fremdem Server ! Hochladen oder per Mail an Admin
Beiträge: 411 Wohnort: Altenstadt
|
könntest du mir dabei helfen das anzupassen
damit wäre mir schon sehr geholfen
denn wie bekomme ich das signal anstatt über rs232
auf meine 32 bänder...
|
BID = 45744
Benedikt Inventar
Beiträge: 6241
|
Am besten besorgst du dir den AT89S8535, und verwendest das Programm aus dem Internet.
Die Ergebnisse werden dann per RS232 an den nächsten AVR mit deiner Software übertragen, die die Werte als LED Balken darstellt.
Wenn das alles zu kompliziert sein sollte:
Nimm einen BA3830. Dieses Filter IC besitzt 6 Bandpassfilter und liefert 6 analoge Ausgangssignale. Eine fertige Schaltung und/oder das IC gibts bei ELV.
Irgerndwo habe ich auch noch einen Schaltplan dafür liegen.
Das Datenblatt habe ich mal angehängt.
Hochgeladene Datei : BA3830.pdf
|
BID = 45781
MatthiasAsselborn Stammposter
Avatar auf fremdem Server ! Hochladen oder per Mail an Admin
Beiträge: 411 Wohnort: Altenstadt
|
also mit dem BA3830 wird das nichts
da die bandpässe schon intern festgelegt sind
ich teste nun das mal an mit dem
atmel
meintest du nicht einen AT90S8535 ?? statt 89 ??
ich melde mich dann sobald ich den atmel geproggt habe
muss ja dann noch veränderungen an meinem code
vornehmen für die led aussteuerung ...
|
BID = 45819
MatthiasAsselborn Stammposter
Avatar auf fremdem Server ! Hochladen oder per Mail an Admin
Beiträge: 411 Wohnort: Altenstadt
|
habe gerade gesehen auf der seite werden nur 8 bandpässe integriert dann ist das wohl doch nicht das richtige für mich ...
|
BID = 46684
sme-bbg Schriftsteller
Beiträge: 959 Wohnort: Bad Eilsen
|
wenn du das fertig hast hätte ich gerne den schaltplan und den quelltext .. wäre nämlich super für meine lichtorgel *GG* Lichtorgek mit echtem FFT *Lechz*
sven
|
BID = 46703
MatthiasAsselborn Stammposter
Avatar auf fremdem Server ! Hochladen oder per Mail an Admin
Beiträge: 411 Wohnort: Altenstadt
|
die betonung liegt auf "WENN"
mein display und meine aussteuerungsanzeige
sind nun komplett fertig
alles mit cmos und atmel
nur hab ich noch probleme mit den bandpässen da es keine filter ic s gibt ( oder ich sie nicht beziehen kann )
z.b. LMF380 / NJU 7507 , MSFS 1-6 ect....
und mir keiner so richtig erklärt was das mit dem fft auf sich hat ....
|