Forum: Digitale Signalverarbeitung / DSP / Machine Learning Schnelle FFT in Assembler


von Benedikt (Gast)


Lesenswert?

Ich habe den Schaltplan mit der Freeware Version 4.13 erstellt. Für was
brauhst du da eine 3.x Version ?

Wenn du Low Current LEDs verwendest, und die Konstantstromquellen auf
50mA auslegst, kommst du auf 1,6A. Dafür reicht dann auch irgendein
Darlington Transistor. Allerdings müssten dann Widerstände zwischen
Transistor und 4zu16 Dekoder eingebaut werden.

Der IRF9530 ist ein P Kanal MOSFET, genauso wie der IRF9531.
Am Anfang wollte ich auch einen anderen verwenden, vielleicht hätte ich
auch einen Transistor verwendet, aber ich hatte noch ein paar IRF9531
hier rumliegen.

von matthias (Gast)


Lesenswert?

nun ich kann die Packages der Widerstände in deinem Schaltplan nicht
ändern da mir anzeigt wird, dass du eine Bibliothek "discrete"
verwendet hast, die früher in der Version 3.XX statt der rcl vorkam
dann tausche ich alle Bauteile von Hand aus, so dass das Rastermaß
passt
beim IRF9530 habe ich mich gestern verlesen!
es ist ein P-Channel!
den nehmen ich auch!

ich gebe dir dann bescheid wenn Schaltplan sowie Board fertig sind!

von matthias (Gast)


Lesenswert?

Benedikt - es tut mir leid!

bitte vergesse das mit den unterschiedlichen Bibliotheken!
es lag an mir!

habe nun gemerkt, dass mein Linux Notebook viele andere Bibliotheken
enthält als mein großer Rechner :-)
unter anderem "discrete.lbr" usw...

bitte nochmals um Verzeichung

Gruß Matthias

von Jens (Gast)


Lesenswert?

@Matthias

Sach mal, gestern 11 Posts in Folge quasi in Abständen von zwei
Minuten, muß das sein? Kannst du nicht mal sammeln und alles in einen
Post schreiben? Wird so leider etwas unübersichtlich.

von matthias (Gast)


Lesenswert?

habe eine Frage an dich Benedikt
mein Terzband ging ja über 28 verschiedene Frequenzen
was hast du mit den restlichen 4 Leds gemacht, die übrig bleiben ?
(vorne 2 hinten 2 )
hast du die noch kleiner / größer gemacht von den Frequenzen ?
dann mein Schaltplan / Layout bildet nun einen 16x32 Kanal Analyzer
den man auch mit 12x28 betreiben kann (so wie ich ihn möchte)

der Frequenzgang beim 32 wäre

20   hz
25   hz
31,5 hz
40   hz
50   hz
63
80
100
125
160
200
250
315
400
500
635
800
1000
1250
1600
2000
2500
3150
4000
5000
6350
8000
10000
12000
16000
20000
22000

und beim 28 er

vorne 2 leds weg und hinten 2 leds weglassen
und im display oben 2 und unten 2 weglassen
so ist nun mein Layout / Schaltplan variabel

bei der 32 Kanal Version lässt sich ja ein anderer Filter ( 22khz statt
16khz ) verwenden und ein anderer Code


könntest du mir noch die Herz aufteilung bei deinem Code pro Led nennen
?

von Benedikt (Gast)


Lesenswert?

Das mit den 25Hz wird nicht funktionieren.
Im Moment habe ich folgende Frequenzen eingebaut:

Band  Bereich  Werte  Zählerwert
10  10    1  12
20  20    1  11
30  30    1  10
40  40    1  9
50  50    1  8
60  60    1  7
80  70-80    2  6
100  90-100  2  5
120  110-130  3  4
160  140-170  4  3
200  180-220  5  2
250  230-290  7  1  12 Werte

300  300    1  10
400  400    1  9
500  500    1  8
600  600    1  7
800  700-800  2  6
1000  900-1000  2  5
1200  1100-1300  3  4
1600  1400-1700  4  3
2000  1800-2200  5  2
2500  2300-2900  7  1  10 Werte

3000  2666-3333  3  10
4000  3666-4333  3  9
5000  4666-5333  3  8
6000  5666-6333  3  7
8000  6666-8333  6  6
10000  8666-11333  6  5
12000  11666-13666  7  4
16000  14000-20000  19  3
18000  18000    1  2
20000  20000    1  1  10 Werte

von matthias (Gast)


Lesenswert?

perfekt! genau so ist es korrekt!
super !

Beschluss: ich kaufe mir nun Eagle
da die gepatchten usw... alle nichts taugen und ich endlich mal in Ruhe
routen möchte
denke das ist eine Anschaffung fürs Leben!

von Benedikt (Gast)


Lesenswert?

Ich hätte mir Eagle auch schon gekauft, aber wenn ich mir jetzt 4.13
kaufe, und in einem Jahr jeder 4.14 oder sonstwas verwendet, dann kann
muss ich doch die Freeware Version verwenden, da man keine neueren
Dateien öffnen kann...

von matthias (Gast)


Lesenswert?

das ist eben auch mein Problem....
nun habe ich einen Weg gefunden es zu routen!
bin seit 2Std dabei
erst einmal Bauteile plazieren sortieren usw..
danach routen!

von matthias (Gast)


Angehängte Dateien:

Lesenswert?

anbei die FFT Platine 160x100 doppelseitig
habe ich gerade a meinen bulgarischen Platinenhersteller
weitergeleitet

nun route ich das Display

von Michael (ein anderer) (Gast)


Lesenswert?

Übel, übel, Deine Platine:

a.) Keine Abblockkondensatoren an den Controllern.
b.) Quarze von den Controllern einen halben Kilometer entfernt.
c.) Versorgungsspannungsleitungen viel zu dünn.
d.) Kein Masse-Konzept.
e.) Rückkoplungsnetzwerke an Deinen OPV viel zu weit entfernt.
f.) Signalleitungen unter den Quarzen.
g.) Analog- und Digitalteil nicht räumlich getrennt.

Das ist ja noch schlimmer als ein Steckboard-Aufbau. Wenn das Teil
halbwegs reproduzierbar funktioniert, grenzt das an ein Wunder.
Vielleicht bekommst Du ja von den 10 Bit der Analog-Digitalwandler
unterm Strich noch etwa 6 Bit raus, mehr wird es wohl nicht werden, der
Rest ist Rauschen und Störungen...

Also, kurz zusammengafasst, in harten Worten: Dieses "Layout" ist
Schrott und Pfusch.

von matthias (Gast)


Lesenswert?

ja? wer meckern kann kanns auch besser machen :-|
ich werde deine Punkte überdenken

von matthias (Gast)


Angehängte Dateien:

Lesenswert?

besser?

von Matthias (Gast)


Lesenswert?

Hi

a) immer noch keine Abblock-C's
b) Versorgungsspannung immer noch über zu dünne Leiterbahnen
c) AVcc nicht extra entkoppelt
d) Einsatz von SMD-Technik verbessert die elektrischen Eigenschaften
drastisch und macht das Layout kleiner.
e) Werf den Autorouter weg

PS:
Eine solche Grafik niemals nicht als JPG sondern als GIF oder besser
noch als PNG. Und dann in einer Auflösung so daß man das Ding auch ohne
scrollen ankucken kann.

Matthias

von keksohr (Gast)


Lesenswert?

smd kann aber nicht jeder löten und deshab fällt es weg...

von Benedikt (Gast)


Lesenswert?

Wenn jemand einen mega8 im TQFP Gehäuse löten kann, sollte er auch mit
SMD Kondensatoren fertig werden...

Ich verwende auf vielen Platinen meist nur eine Art SMD Bauteile: Die
100nF Kondensatoren.
Das spart viel Platz, und nur so kann man die Kondensatoren wirklich da
platzieren, wo sie sein sollen.

@matthias asselborn
Versuch mal an jedes IC 100nF zu hängen, bei mega8/32 auch an AVcc, wie
im Datenblatt. Ansonsten bekommst du ein ziemliches Rauschen.
Weiterhin ist vor allem im Analogbereich eine gute Masseführung
wichtig.
Bei meiner ersten Version hatten immer die untersten 3-4 LEDs
geflackert. Bei der überarbeiteten flackert garnichts mehr.
An jeden verwendeten ADC Pin ein kleiner Kondensator (so ca. 1nF) nach
Masse, und zwar so nah wie möglich am ADC Pin. Das Audiosignal über
einen Widerstand (so 1-2k) einspeisen. Dadurch werden vom ADC
verursachte Störungen durch die Sample&Hold Schaltung vermieden, und HF
Störungen von außen unterdrückt.

von matthias asselborn (Gast)


Lesenswert?

Smd wäre kein Problem für mich zu löten
nur nehme ich Rücksicht auf Keksohr
der den Analyzer auch nachbauen möchte nur mit Eagle noch nicht zurecht
kommt und Probleme mit Smd hat
wird halt eine Universalplatine für 28-32 Band Analyzer
also gut Matthias du hast mir ja schon beim MP3 Projekt geholfen
daher befolge ich auch deine Ratschläge
deine auch Benedikt finde es nur ein wenig schwach
ein Post zu lesen (Michael) das das Layout gleich so abwertet
bin nun mal kein gelernter Elektroniker
befinde mich erst nach ner Lehre auf dem Weg zum diesjährigen
Wintersemester Informatik

von matthias (Gast)


Lesenswert?

.... vielleicht hätte ich schreiben sollen das ich von Haus aus IC
Sockel mit Abblock C's verwende.... 100nF

von keksohr (Gast)


Lesenswert?

mal ne frage, funzt die software schon ?
und kannst du mir eventull noch mal ne avi via mail schicken?
falls es schon läuft? meine addy müsstest du ja noch haben...
die hier stimmt nicht (spam schuzt) @idf-mod.de !

von matthias (Gast)


Angehängte Dateien:

Lesenswert?

du bist ja lustig erst mal müssen die Platinen gemacht das Teil
aufgebaut werden usw...
Benedikt schrieb er testete die Soft am PC da Hardwaremangel..
anbei nochmal n Versuch - Handgeroutet
- Spannung Leitung dick genug
- Massefeld
- Abblock C's durch IC Sockel (den ich drauflöte)
- Kondensatoren ganz nah an den ADC's
- Widerstände in Reihe des Signals zum ADC
- png datei

von Michael (ein anderer) (Gast)


Lesenswert?

@matthias:

Was ist Dir lieber: Gar kein Kommentar und Du bekommst das Teil nicht
zum laufen, oder einen ehrlichen Kommentar der zeigt, wo die Probleme
liegen?

Kritik ist immer hart, wenn man sie bekommt. Aber man darf da keine
falschen Gefühle daraus ziehen, sondern Kritik muss man als Chance zu
verstehen versuchen.

Sieh's mal so: Hätte ich nicht so einen direkten Kommentar
geschrieben, hätten wir jetzt keine Diskussion üder das Layout mit Tips
für Dich. Du würdest nichts lernen.

Und ich habe noch einen Tip für Dich, bzw. Hinweis: Du kannst mit den
AtMegas keine Sockel mit inegrierten Abblockkondensatoren verwenden.
Die sind nämlich in den Sockeln an verkehrter Stelle eingebaut. Das
funktioniert nicht.

Und noch einige Tips zur Spannungsversorgung und Masseflächen:

Da Du zweiseitig routest, machst Du folgendes: Die Anschlüsse für die
Versorgungsspannung in der Mitte der Längskante der Platine.
Unmittelbar nach der Anschlussklemme kommt ein kleiner Elko und ein
Keramikvielschichtkondensator (100nf) hin. Von den Anschlüssen der
Kondensatoren geht einmal Plus und Masse zur digitalen Platinenhälfte,
und einmal zur analogen Platinenhälfte. Als Masse verwendest Du eine
Massefläche auf der Lötseite. Allerdings trennst Du die Fläche in zwei
Teile auf. Ein Teil der Massefläche nur für die analoge Seite, und der
andere Teil nur für die Digitale Seite. Zusammengeführt werden die
Masseflächen an einem einzigen Punkt, nämlich am Anschluss des 100nf
Kondensators unmittelbar hinter der Versorgungsspannungsklemme.

Du musst darauf achten, dass Du zwei getrennte Schleifen für den Strom
baust. Eine Schleife für den Digitalteil, und eine Schleife für den
Analogteil. Der Versorgungsstrom soll nicht in einer großen Schleife
durch Analogteil und Digitalteil fliessen. Und eben die Schleifen am
Kondensator an der Anschlussklemme zusammenführen.

von Michael (ein anderer) (Gast)


Lesenswert?

Nochmals wegen Sockel: Wenn Du einigermassen löten kannst, lass die
IC-Sockel ganz weg. Die machen Dir effektiv mehr Probleme als sie
lösen. Und wenn ein IC doch mal elektrisch kaputt gehen sollte, kannst
Du es auch mechanisch kaputt machen in dem Du alle Beinchen abzwickst
und die Beinchenstummel dann in Ruhe und schonend aus der Platine
auslötest.

von matthias (Gast)


Lesenswert?

Hast schon recht! ich baue nun den Schaltplan um danach das Layout!
ein Kumpel hilft mir nun.

von matthias (Gast)


Angehängte Dateien:

Lesenswert?

anbei der umgezeichnete Schaltplan!

von matthias (Gast)


Angehängte Dateien:

Lesenswert?

anbei meine plazierte Platine
hab ich nun selber gemacht da scheinbar jeder grad krank ist!

bitte um kritik
was soll ich verbessern?

von matthias (Gast)


Angehängte Dateien:

Lesenswert?

anbei die geroutete
hab ich nun doch selber gemacht/machen müssen
so was ist nun noch sch..... ?
das hervorgehobene ist die Masse

von Benedikt (Gast)


Lesenswert?

Mittlerweile gibt es auch elm-chan.org auch C Routinen, die die FFT
verwenden:
http://elm-chan.org/docs/avrlib/avrfft.zip

von Matthias Asselborn (Gast)


Angehängte Dateien:

Lesenswert?

nun hat mir n Elektroniker geholfen
--> Danke Sven!
anbei Schaltplan und Layout!
nun lasse ich das ätzen!

Gruß Matthias

von Matthias Asselborn (Gast)


Angehängte Dateien:

Lesenswert?

anbei die FFT Platine

von Falk (Gast)


Lesenswert?

hi,

wo lässt du solche "Einstück" Leiterkarten machen? Und was kosten
die?

gruss

von Matthias Asselborn (Gast)


Lesenswert?

20 euro kostete die platte !
+ versand natürlich
bei einem Freund aus Bulgarien
der hat ne Leiterplattenfirma !

icq 259-606-808
www.bilex-lp.com

17 euro ohne Lötstopp
Grüßles Matthias

von Matthias Asselborn (Gast)


Lesenswert?

da sind auch schon die oberen platten her ( display usw..)
top firma netter kontakt - sprechen deutsch
einwandfrei kann ich nur sagen saubere arbeit !

grüßles matthias

sorry 17 euro war für eine 160x100 doppelseitig + durchkontaktierung
bei 15 euro liegt eine 80x100 doppels + durch kontakt nur meine hab ich
noch mit lötstopp lackieren lassen

bieten nun auch nikel gold technologie für smd und normale bauteile zum
selben preis an !

von Matthias Asselborn (Gast)


Lesenswert?

da sind auch schon die oberen platten her ( display usw..)
top firma netter kontakt - sprechen deutsch
einwandfrei kann ich nur sagen saubere arbeit !

sorry 17 euro war für eine 160x100 doppelseitig + durchkontaktierung
bei 15 euro liegt eine 80x100 doppels + durch kontakt nur meine hab ich
noch mit lötstopp lackieren lassen

bieten nun auch nikel gold -bleifrei- technologie für smd und normale
bauteile zum selben preis an !

grüßles matthias

von Jens (Gast)


Lesenswert?

> (ein vergleichbares C Programm ist um den Faktor 10-100
> langsamer !!!!)

Wie hast du das getestet bzw. woher kommt die doch sehr große Spanne
(1-100)?

von Jens (Gast)


Lesenswert?

Sorry, meinte natürlich 10-100 :)

von Benedikt (Gast)


Lesenswert?

Ich habe diverse FFT Algorithmen ausprobiert. Da die meisten für PCs
waren, wurden Fließkommazahlen verwendet.
Integer Routinen waren natürlich schneller, aber immer noch um ein
Vielfaches langsamer.
Im Durchschnitt kam ich auf etwa 1 Ergebnis pro Sekunde !

von Peter (Gast)


Lesenswert?

Hallo,

mal eine kleine Frage?
Die jeweiligen FFT Methoden, die als Beispiele gepostet worden sind,
verlangen jeweils als Übergabeparamter den realen und den imaginären
Anteil des Eingangssignal. Kann man davon ausgehen, daß der imaginäre
Anteil lediglich auf 0 gesetzt wird. Oder muss das Inputsignal vorher
konvertiert werden, bevore die FFT genutzt werden kann?


Danke,
Peter.

von Neugieriger (Gast)


Lesenswert?

An:  Matthias Asselborn

Habe mir knappe Stunde Zeit genommen und alles gelesen. Mir fehlt das
Happy End. Funktioniert deine Platine und die FFT? Hast du vielleicht
ein Bild?

von Matthias Asselborn (Gast)


Lesenswert?

Sorry du... hab die geätzte Platine immer noch bei mir liegen sowie das
gesamte Display ect....
hatte in letzer Zeit viel zu lernen
Studium ect.... und andere Projekte am laufen
ein BassHorn da ein Mitteltonhorn da...
die Semesterferien sind natürlich zum arbeiten da g sowie jedes
Wochenende...
hatte genau 4 Tage in diesem Jahr Urlaub... (wenn man das so nenne kann
....)

evtl Ende des Jahres nehme ich mir Zeit
und dann kommt schon noch das Happy End !!!!!!!!!

von Andreas Fertl (Gast)


Lesenswert?

:P

hatte 9 tage Urlaub seit nehm jahr...
Immerhin über 100% mehr :)

@Peter

wenn du ein Signal hast dass nur reele Werte liefert, dann wird der
imag. Teil der FFT auf 0 gesetzt.

Grüße Andreas

von Tobias R. (wildcard)


Lesenswert?

Ist es der ganz oben geposteten ASM FFT egal, in welchem Pegel Bereich
das Singal liegt? Also den ADC mit 2.54V, VCC oder AREF betreibe bleibt
mir überlassen, solange mein Signal kommplett in den Bereich 0V->XV
passt?

von Matthias Asselborn (Gast)


Lesenswert?

sach mal Benedikt könntest du mir die 2 Codes für den Atmel 8 und 32
compilieren ?
hab leider keinen asm Compiler da ...
restliche Platinen sind nun fertig bestückt
es fehlt nur noch am Code zu nem Happy End
gruss Matthias

von Matthias Asselborn (Gast)


Lesenswert?

les ich da fhk community?
na dann studieren wir schon an der selben Schule

@Benedikt - oder sag mir einfahc mit was du es getipt hast nen compiler
werde ich scho auftreiben - sollte halt zusammen passen

gruß Matze

von Matthias Asselborn (Gast)


Lesenswert?

Hallo

hab grad versucht die FFT für den Mega32 zu compilieren erhielt aber
folgende Meldung:


AVRASM: AVR macro assembler 2.1.0 (build 38 Oct  1 2005 03:07:42)
Copyright (C) 1995-2005 ATMEL Corporation
C:\Dokumente und Einstellungen\Matthias Asselborn\mega32.asm(7):
Including file 'C:\Programme\Atmel\AVR
Tools\AvrAssembler2\Appnotes\m32def.inc'
C:\Dokumente und Einstellungen\Matthias Asselborn\mega32.asm(8):
Including file 'C:\Programme\Atmel\AVR
Tools\AvrAssembler2\Appnotes\avr.inc'
C:\Dokumente und Einstellungen\Matthias Asselborn\mega32.asm(9):
Including file 'C:\Programme\Atmel\AVR
Tools\AvrAssembler2\Appnotes\akiglcd.inc'
C:\Dokumente und Einstellungen\Matthias Asselborn\mega32.asm(16):
warning: Register r12 already defined by the .DEF directive
C:\Dokumente und Einstellungen\Matthias Asselborn\mega32.asm(17):
warning: Register r15 already defined by the .DEF directive
C:\Dokumente und Einstellungen\Matthias Asselborn\mega32.asm(18):
warning: Register r25 already defined by the .DEF directive
C:\Dokumente und Einstellungen\Matthias Asselborn\mega32.asm(586):
No EEPROM data, deleting C:\Dokumente und Einstellungen\Matthias
Asselborn\mega32.eep
ATmega32 memory use summary [bytes]:
Segment   Begin    End      Code   Data   Used    Size   Use%
---------------------------------------------------------------
[.cseg] 0x000000 0x000708   1160    640   1800   32768   5.5%
[.dseg] 0x000060 0x000523      0   1219   1219    2048  59.5%
[.eseg] 0x000000 0x000000      0      0      0    1024   0.0%
Assembly complete, 0 errors. 3 warnings

aber er spuckt kein Hex File aus...
könntest du Benedikt mir die des Mega 8 und 32 compilieren?
Gruss Matthias

von Matthias Asselborn (Gast)


Lesenswert?

habs nun doch hingebracht ... im richtigen Ordner sollte man suchen
....
aber beim mega 32 3 warnings beim mega 8 nur 2 g
ich brenn se mal Ende der Woche auf die Atmels und teste mal das ganze


könntest du Benedikt mir die 2 codes doch nochmal compilieren ?
die 2Codes für Mega 8 und 32 der 1/3 octav Version - mit dem Led
Display

Gruss Matthias

von Tobias R. (wildcard)


Lesenswert?

Moin Jungs,
hab mich jetzt näher mit dem Code  auseinandergesetzt. Möchte eine
externe Wave-Datenquelle für eine 128 FFT verwenden.
Reicht es so wie ich es vorhabe 128 16Bit Werte hintereinander signed
an "CaptBuf" zu schreiben? Und den ADC Interrupt durch meine eigene
Routine zu ersetzten?

von Moe (Gast)


Lesenswert?

Hallo, kann mir jemand erklären wie man bei dem ASM code (von ganz oben
oder auch in der mitte...) auf die 11,1khz bzw. 22,2 khz sampling rate
kommt. Einmal is doch die Taktteilung von 64 und dann von 128 für den
ADC da komm ich auf andere werte für 18,432 MHz systemtakt??

von Matthias Asselborn (Gast)


Lesenswert?

Hallo, kann mir jemand erklären wie man den Code richtig compiliert?
mit welchem Programm?

von Moe (Gast)


Lesenswert?

den asm code compilier ich immer mit dem avr studio von atmel.
den c code am besten mit avr-gcc oder winavr.

Jemand ne antwort auf meine frage? :)

von Matthias Asselborn (Gast)


Lesenswert?

hab ihn mit avr studio compiliert nur da kommen pro chip 2-3
warnings....

gruss matthias

von Moe (Gast)


Lesenswert?

was denn für fehler??
also bei asm dürfte die fehlerbehandlung kein problem sein.
da du grad am antworten bist, kannst du drei posting hoch scolln und
mir das erklärn?

von Matthias Asselborn (Gast)


Lesenswert?

die warnings wo ich weiter oben gepostet habe

wie rechnest du ?

von Moe (Gast)


Lesenswert?

hmm das sind ja nur warnings, deshalb müsste er die hex ausspucken,
vielleicht heisst die auch nur anders weil du irgendwo was anderes
eingestellt hast, klickst du auch immer auf built?
Die warnings mit r15 und r25, liegt daran das die schon vorher in
avr.inc deklariert wurden..
Das mit dem eeprom kann daran liegen das du einfach keine eeprom daten
im code hast, der compiler aber so eingestellt ist das er welche
extrahieren soll.

wie ich rechne?
also im code wird doch der takt für den ADC eingestellt.
und zwar hier:
outi  ADCSRA, 0b11101111
dabei bedeutet das die bit0 bis bit2 also (111) den cputakt teilt und
lautdatenblatt ist das bei 111 durch 128->also 18,432 MHZ durch 128
sind gleich 144KHz und nich 11,1Khz so wie es dasteht??

von Matthias Asselborn (Gast)


Lesenswert?

eine hex spukt er scho raus halt mit den warnings...
aber mal testen !
ja ich teilte die 128 auch durch die 18 nochwas
wobei die muss anders gehen ...

von Moe (Gast)


Lesenswert?

Kann mir jemand ganz simpel erklären wie die grössen bei der FFT
zusammenhangen. Also was ist die Sample Rate, was beudeutet z.b. 128
Punkte FFT,was ist das Spektrum und wieso wird der Frequenzbereich
durch den Tiefpassfilter (max297) eingegrenzt und was bedeutet das?
Also wie hängen die ganzen grössen zusammen.

von Matthias Asselborn (Gast)


Lesenswert?

Hallo!

also :

Die Sampling-Rate bestimmt beim Digitalisieren von unserer Signalquelle
(Musik), wie oft das analoge Audiosignal pro Sekunde abgetastet werden
soll

Bei einer Sample-Rate von 44.1 kHz (Sample-Rate einer Audio-CD) wird
das Audiosignal 44100 Mal pro Sekunde abgetastet

je höher also desto besser!

in unserem Fall eine 128 Punkte FFT
in eienr 128 point FFT
werden 128 Punkte(Frequenzen) herausgezogen vom Frequenzspektrum und
diese dann ausgewertet
Frequenzspektrum - Frequenzbereich von 0 bis halbe Samplerate Herz

je mehr Punkte du hast z.b. 512 oder 1024 desto genauer wird deine
Frequenzanalyse! aber auch rechen intensiver!
bei uns reichen 128 Punkte und der Atmel komt noch gut mit !
exakter wären 512 wobei du dann "mehr Power" brauchst evtl einen
digitalen Signalprozessor! (DSP)

nun deine letze Frage wieso er mit einem Tiefpassfilter begrenzt wird
- in der Mitte des Threads ist mal n Schaltplan mit 2 Tiefpassfilter da
ich den Analyzer im 1/3 Oct Schritt baue

der Tiefpass trennt salopp gesagt den Frequenzbereich ab
das nur ein geringerer Frequenzbereich in den Atmel kommt so lässt sich
eine eine exaktere Auswertung machen
- in meinem Fall
habe 3 Tiefpassfilter und 2 Atmels mit FFTs
somit wird der Frequenzbereich pro Atmel aufgeteilt
und diese können dann exakter / schneller arbeiten
wenn alles per DSP gelöst werden würde bräuchten wir solch einen Filter
nicht

kurz gesagt der Filter teilt quasi dem Atmel Frequenzbänder zu
die dann schneller bearbeitet werden können !

Gruss Matthias Asselborn

von Moe (Gast)


Lesenswert?

hmm Danke erstmal..aber es tun sich neue fragen auf:)
also der ADC tastet das signal 44100 mal pro sekunde ab. Jedesmal wenn
er   abtastet, liefert der adc eine 8 bit zahl (bei einem adc mit 8 bit
auflösung). Das ist doch erstmal richtig oder? Quasi macht er aus einem
zeitkontinuierlichen Signal ein zeitdiskretes?
So und bei einer 128 point FFT wird jedesmal beim abtasten nich nur 1
8bit wert gespeichert, sondern 128 8bit werte oder? das wären ja dann
bei einer sample rate von 44.1khz gleich 441000 mal 128 abtastwerte pro
sekunde??

von Jens (Gast)


Lesenswert?

> So und bei einer 128 point FFT wird jedesmal beim abtasten nich nur 1
> 8bit wert gespeichert, sondern 128 8bit werte oder?

Zu jedem Abtastzeitpunkt wird ein Wert gespeichert, geht ja auch nicht
anders. Wie willst du mehrere Werte pro Zeitpunkt speicher? Zu jedem
Zeitpunkt hat das Signal einen ganz bestimmten Wert. Bei einer 128
Punkte FFT nimmt man dann einfach 128 aufeinanderfolgende, gespeicherte
Werte (z. B. aus einem Buffer) und führt die Berechnung durch. Bei einer
Abtastrate von 44100 Hz bekommst du pro Kanal 44100 Werte pro Sekunde.

von Moe (Gast)


Lesenswert?

achso, jep...hab das ein bissl durcheinander gehaun....
eine grafik wo, man sowas schön sieht wär nich schlecht..

von matthias asselborn (Gast)


Lesenswert?

hmm ne grafik .... hmmm
mal suchen ...

von Martin Schweiger (Gast)


Lesenswert?

Hi Gang, ich habe Euren thread wegen dessen Länge leider nur kurz
überfliegen können. Da wart Ihr wirklich wacker bei der Entwicklung,
man kann richtig neidisch werden!

Ich bin beim googeln auf Euch gestoßen, denn ich suche eine
Spektrumsanalyse für HF. Habt Ihr eigentlich mal konkret dran gedacht,
einen DSP zu verwenden, wie Matthias Asselborn? So ein DSP macht eine
Spektrumsanalyse hardware-mäßig besser als es ein Algorithmus jemals
hinbekommen kann. Was hindert Euch, zu solchen Werkzeugen zu greifen?

Ich habe mich mit der Sache noch nicht so sehr befasst, darum mag das
für Experten wie Euch etwas unüberlegt klingen. Welche Schwierigkeiten
gibt es dabei?

Ich frage nur, denn ich denke an Frequenzen von 1 kHz bis 3 GHz, das
ist ab 25MHz für jeden PIC zu schnell.

viele Grüße aus Singapore
Martin

von ¹²³ (Gast)


Lesenswert?

Sicher, für ein DSP ist eine FFT ein Kinderspiel. Der Reiz hier in
diesem Thread war ja eigentlich, dass man auch mit so einem
"popeligen" AVR eine brauchbare FFT hinbekommt. Und DSPs, die FFT
hardwaremäßig beherrschen, sind schwer erhältlich, teuer und aufgrund
des Gehäuses oft schlecht zu handhaben. Und für einen einfachen Audio
Spectrum-Analyzer braucht man ja keinen 1 GFLOP 32-Bit Fließkomma DSP,
oder?

von Matthias Asselborn (Gast)


Lesenswert?

ja genau in diesem Thread ging es darum eine brauchbare FFT mit normalen
µC zu erzeugen

die DSPs mit FFT sind unbezahlbar...... und die erst mal anzusteuern
...
geschweigedenn hobbymässig auf ne Platine zu bringen ?!....
wobei in einem früheren Elector mal ein Vu Meter mit einem DSP
vorgestellt wurde
hab den Eeprom noch da der den DSP speisst...
naja den Ti DSP gibt es mittlerweile auch nicht mehr
war einer mit 40Mhz oder sowas ... damals 10-20 DM
nun wenn man das ein wenig umbaun würde..
aber ich bin mit der AVR Version zufrieden !
n DSP wird ja auch anders programmiert wie n Atmel ...
bis man den erst mal dort hin bringt wie man es möchte...
vergeht ne menge Zeit ...
gruss Matthias

von Martin Schweiger (Gast)


Lesenswert?

ok, hab's verstanden. vielen Dank! Martin

von Moe (Gast)


Lesenswert?

hi,
von ape (weiter oben im thread) gibts doch diese schaltung (siehe
Anhang).
Muss man bei dei OP's -6 Volt anlegen? GND müsste doch auch reichen,
da die negativen amplituden eh nich gebraucht werden oder? Und anstatt
+6 Volt müsste doch auch +5 Volt reichen. Weil die unterschiedlichen
Spannungen zu generieren macht mir zu schaffen..

Ausserdem weiss ich nich was die zwei potis (r11 und r10) nach der
op-schaltung solln. Oder sind das garkeine Poti's?

Kann mir da jemand weiterhelfen?

von Moe (Gast)


Angehängte Dateien:

Lesenswert?

Ups, Anhang vergessen, hier ist er.

Vielleicht jetzt ne antwort? :)

von Matthias Asselborn (Gast)


Lesenswert?

Hi!

naja hab meinen Schaltplan etwas anders aufgebaut mit mehreren
Tifpassfiltern da ich ja 3 FFTs habe und 1/3 Oct darstellen möchte
....aber die Potis sehen wie ne ?! Lautstärkereglung des
eingangsignales ?! aus ...

Gruss Matthias

von Neugieriger (Gast)


Lesenswert?

@Matthias
Wollte mal den derzeitigen Stand deines Projektes erfahren. Hat dein
Comilieren und der Aufbau der Schaltung geklappt?

von Matthias Asselborn (Gast)


Lesenswert?

Platinen sind nun alle geätzt!
habe mir nun ein für alle mal das orginal Eagle von CAD Soft
gekauft...
zwar deftig für nen armen Studenten wie mich aber immerhin kein
Ärger mehr mit 80x100 Platten !
habe sogar von CAD Soft bei PCB Pool nen Gutschein
für ne doppelseitige 100x160 erhalten!

compilieren ging mit dem AVR Studio gut
bis auf viele warnings... von dene ich keine Ahnung hqabe..
n Kumpel hat auch schon alle Atmels für mich "gebrannt"

nun fehlt das Geld für die Bauteile...
ja lacht nur.... hätt auch net gedacht das man als Student
dauer Pleite is g

mein Studium wird vom Bundesamt für den Zivildienst im Januar
zwangsbeendet!

bis dahin werde ich mich wohl noch ein wenig gedulden müssen ...
mit dem Bauteilekauf !

Gruss Matthias Asselborn

von Neugieriger (Gast)


Lesenswert?

@Matthias
Wenn dein Studium schon länger als 3 Semester dauert, hast du eine gute
Chance durch Einspruch eine Aufschiebung bis nach dem Studium zu
erreichen. Dazu würde ich auf jeden Fall mehrere Stellen anschreiben
(Amt für Zivildienst, Petitionsausschuss des Bundestages,... je mehr
umso besser).
Welche Version von Eagle hast du gekauft? Gabs als Student Bonusrabatt?
Hatte überlegt mir Target zuzulegen (oder SprintLayout (billig und mehr
als zweiseitig kann man zu Hause eh nicht ätzen)).

von Matthias Asselborn (Gast)


Lesenswert?

leider geht's noch nicht so lange
ansonsten wäre ja alles halb so wild
(Rückstellungsantrag und gut fertig)
und wenn mir da nicht ein Mädchen so gut gefallen würde, welches ich
dann nie wieder sehe ... seufz - egal <--- offtopic lol

habe mir die No Profit Version für Windows und Linux gekauft
für ähm insgesamt 140-150 glaube ich +/- paar Euros...
-Schaltplan
-Router
-Board
beschränkt auf 160x100
naja immer noch besser als deie 80x100 wenn ich ehrlich bin!

möchte demnächst mal das Projekt abschliessen
aber zurzeit fehlts noch an Bauteilen!

Gruss Matze

von Matze (Gast)


Angehängte Dateien:

Lesenswert?

Erst mal n frohes Neues!
es fehlt noch die letze Platine (is grad beim ätzen)
Bauteie hierfür hab ich schon
dann teste ich das ganze mal an
sagt mal mit was compiliere ich den Display code?
geht das im CodeVision? oder habt Ihr AVR Studio genommen?

Gruss Matze

von Matthias Waldhauer (Gast)


Lesenswert?

@Benedikt:
"Mit einem entsprechend schnellen uC mit viel Rechenleistung und
ausreichend RAM (64kB sollten es schon sein) reicht auch eine einzelne
FFT. Am PC erreiche ich 1,5Hz Auflösung bei einem Frequenzbereich von
0-48kHz. Allerdings ist mein Athlon 64 dann voll ausgelastet, wenn er
das ganze flüssig darstellen soll..."

Das hört sich nach 32k Frequenzbändern bei 96kHz Samplerate an. Ist das
eine Anwendung? Jedenfalls wäre wohl eine 64k FFT notwendig.

Bei FFTs kann jedenfalls immer viel optimiert werden. Ansatzpunkte
sind: verw. Algorithmen (Radix-4, Radix-8, Split-Radix, Real-FFT usw.),
Tabellen (v.a. Sin/Cos), möglichst keinen "hübschen"
objektorientierten Code ;) (hab in einem Projekt eine FFT in Java
gebraucht, die vorwiegend OO-Variante war Faktor 8-10 langsamer),
notfalls Assembler (Prime95's FFTs sind immernoch ca. Faktor 2-3
schneller als äquivalente FFTs der zu den schnellsten Libs gehörenden
FFTW-Library).

Zu Prime95: George Woltman hat dort optimierte Assembler-FFT-Makros
sowohl für K8 (also Athlon 64, Opteron, X2 usw.) als auch P4 und P3.
Insgesamt ist die FFT mit dem Split-Radix-Butterfly nicht mehr so
hübsch wie die meist verwendeten Radix-2-Butterflies. Aber <10 ms für
eine 64k FFT klingen doch gut, oder? ;)

Manchmal hängts auch woanders (z.B. Darstellung). Oder man könnte
gleich auf der Grafikkarte rechnen (wurde schon getan).

von Heinz (Gast)


Lesenswert?

Hallo,

ich soll auf einem ATmega16 euer Programm vom ATmega8 zum laufen
bringen.
Bekomm es einfach nicht hin. Eigentlich dürfte es doch keine Probleme
geben, oder?
Worauf muss ich achten?
Hat es schon einer ausprobiert?

Gruß Heinz

von Matthias Waldhauer (Gast)


Lesenswert?

@Heinz:
Ich habe hier auf 16MHz Atmega32 gerade eine C-Version fertig mit
ASM-Unterstützung (Code etwa 4,7k + Tabellen im Flash-Speicher). Die
Variante braucht bei einer 256er FFT (dafür würde auf Atmega16 schon
das SRAM nicht reichen) ca. 59ms mit C-Fixed-Point-Multiplikation und
20ms mit der Routine von AVR (welche auch in den Includes hier zu
finden ist). Die reine ASM-Version braucht laut Zeiten im ASM-Code so
10 ms (wenn ich mich richtig erinnere). Aber den Code dürfen wir eh
nicht verwenden. Er wäre auch etwas schwierig anzupassen.
Also den Weg gäbe es auch..

von hase (Gast)


Lesenswert?

Hi,
leider ist die Apetech-Seite down, gibts davon vielleicht ne neue 
Adresse?

von borec (Gast)


Lesenswert?

hello, this: http://www.mikrocontroller.net/attachment/9171/IMG_4401.JPG 
picture is very super, and I please you, send me schematic and software 
for it. very thank you.

P.S. Excuse please my poor English

von Sven (Gast)


Lesenswert?

Hi,

ich habe mal zu dem ganzen ein paar Fragen.
Ich möchte ebenfalls mit einem AVR eine FFT machen. Allerdings nur im 
Bereich von 0-500Hz. Die Auflösung sollte dabei schon recht groß sein 
sprich am besten 1Hz Abstände. Das ganze ist auch nicht unbedingt 
Zeitkritisch, da ich das Signal nur auswerten und nicht darstellen 
möchte. Ich hatte dabei an den internen ADC z.B. vom Mega64 oder Mega128 
gedacht und für den Speicherbedarf externen Speicher über i2c oder SPI. 
Das Siganl wollte ich für max 1 Minute loggen und anschließend in 
kleinen Stücken auswerten.
Ist das ganze möglich oder mache ich hier einen Gedankenfehler? Ist es 
überhaupt realisierbar? Was meint ihr?

Vorab schon mal Danke.

von pumpkin (Gast)


Lesenswert?

Also eine Auflösung von 0-500Hz benötigt 1000Hz Abtastrate. Bei 10 Bit 
ADC-Auflösung sind das 10Bit * 1000/s * 60s/min / 8Bit/Byte / 
1024Byte/KByte = 73,24KByte/min. Problematische ist die Verwurstung der 
10Bit, besser man rechnet mit 16Bit. Wenn du eine Auflösung von 1Hz 
haben möchtest musst du mindestens eine 1000-Punkt DFT/1024-Punkt FFT 
machen. Das bedeutet, dass du ein 1s-Fenster betrachtest oder ein 
kürzeres Fenster nimmst und zero-padding machst. Mit genügend Speicher 
und Zeit ist das machbar.

pumpkin

von August (Gast)


Lesenswert?

Hallo Sven,
es gibt ein Verhältnis zwischen Abtastrate, Auflösung und
notwendiger Stützwerte.

Ich habe es mal überschlagen... bei 2 kHz Abtastrate und
und einer Auflösung von knapp unter 2 Hz komme ich bei
mir auf einen Speicherbedarf für die FFT von 6 kB, wenn
die vollen 10 Bit A/D-Auflösung in 16-bit-Worte umgelegt
werden sollen. Bei nur 8 Bit Auflösung käme ich mit 3 kB
hin.

Also mindestens ATmega644 oder ATmega128 bei 8 Bit Auflösung,
ATmega2560 bei 10 Bit Auflösung, wenn die FFT-Daten nicht
mühsam zur Berechnung jedesmal aus der CPU heraus- und
in die CPU hereintransportiert werden sollen.

Bei 1 kHz Abtastrate und gleichen Randbedingungen zum
Speicherbedarf käme eine Auflösung um 1 Hz zu Stande,
aber die obere Messfrequenz von 500 Hz ist dann schon
kritisch.

Mit Abtastraten von 1 oder 2 kHz sollte das Zusammenstellen
der Stützwerte die zeitbestimmende Größe sein und es
muss nicht unbedingt in Assembler gearbeitet werden.
Ohne externes SRAM oder DRAM sprengt eine Erhöhung der
Abtastrate sehr schnell die Möglichkeiten des AVR - da
sollte also kein Ehrgeiz hinein gesteckt werden.
2 kHz als obere Grenze scheinen angebracht.

Bei 1024 Stützwerten mit 16 bit und 2 kHz Abtastrate
kommen in einer Minute ca. 120 kB an Daten zusammen.

So bescheiden die Forderung "nur 0...500 Hz" klingt,
so anspruchsvoll ist der Wunsch nach einer Auflösung
von 1 Hz.

August

Bühne frei für die Besserwisser.

von Sven (Gast)


Lesenswert?

Hallo August,

danke für die schnelle Antwort.
Sicherlich ist der Bereich von 0-500Hz sehr bescheiden, aber mehr wird 
eben nicht benötigt. Allerddings ist mein Problem, das ich ein recht 
unsauberes Signal erwarte, das ich außwerten muß. Im Grund ist in dem 
Signal eine Bestimmte Frequenz "versteckt", aus der ich die 
Geschwindigkeit eines Objektes ableiten muß. Von daher brauche ich dann 
schon die hohe Auflösung um die 1Hz.

Ich habe da gerade noch eine andere Frage, wie kommt man denn auf eine 
Abtastrate von 2kHz? Ich dachte mit dem ADC kann man z.B. Mega16 nur 
einen Scaler von 128 einstellen und bei 8MHz wären das dann doch 
62,5kHz. und selbst wenn man nun sagt das der ADC 13 clk braucht zur 
Umsetzung, dann wären das doch noch immer 4,8kHz pro Abtastwert. Oder 
liegt hier ein Gedankenfehler meiner seits?

Bezüglich des Speicherbedarfs hatte ich, obwohl ich davon erst Abstand 
nehmen wollte bezüglich der beschränkten Schreibzyklen, einen EEPROM 
nehmen mit i2c. Der i2c sollte ja für Daten schnell genug sein, 
allerdings bin ich nicht sicher, ob der EEPROM da mitkommt. Gibt es denn 
großen SRAM oder DRAM mit i2c oder SPI?

von August (Gast)


Lesenswert?

Hallo Sven,
man muss unterscheiden zwischen Abtastrate (= Abstände, in
denen A/D-Proben genommen werden) und Umwandlungszeit des
A/D selber.
Über CPU-Takt und Prescaler definiert sich die Wandlungszeit
des A/D. Die sollte natürlich im Idealfall kürzer sein, als
Abstände, in denen A/D-Werte benötigt werden.
Auf den ersten Blick scheint die Wandlungszeit des A/D
ziemlich unwichtig erscheinen, in der Praxis jedoch kann
von einer geschickten Wahl des Prescalers und des CPU-Taktes
einiges abhängen.

500 Hz als obere Grenze ist absolut in Ordnung - meine
Bemerkung "bescheiden" sollte nur unterstreichen, dass ein
AVR das in einer FFT leicht bewältigen kann.
Der Knackpunkt ist die Forderung nach 1 Hz Auflösung.

Die 2 kHz Abtastrate habe ich willkürlich gewählt als ein
Vielfaches von der oberen Spektrumfrequenz 500 Hz, um
die Überschlagsrechnung anstellen zu können. Die minimale
Abtastrate sollte 1 kHz nicht unterschreiten.

Soll die Forderung "1 Hz Auflösung" stehen bleiben, würde
ich mich von ATmega32 und auch ATmega128 direkt verabschieden
und zu einem ATmega2560 mit 8 kB RAM greifen. Damit kann
man dann bequem alles im RAM berechnen und vermeidet zahl-
lose I/O-Zugriffe auf serielle Datenspeicher.
Dann geht das auch in C und muss nicht Assembler sein.

Statt EEPROM würde ich FRAM nehmen. Die sind schneller beim
Abspeichern, haben praktisch RAM-Eigenschaften und sind
auch in brauchbaren Kapazitäten erhältlich. Man bekommt
FRAM-Bausteine bei ebay.

Es stellt sich natürlich die Frage, warum das überhaupt
mit einem Mikrokontroller bewerkstelligt werden muss.
In Frage käme auch ein PC/Notebook mit Soundkarte.
Oder ein einfacher Datenlogger mit anschließender Ver-
arbeitung in einem PC/Notebook.

Soweit zu dem Thema - es hat bestimmt noch Leute im Forum,
die dazu qualifiziertere Kommentare abgeben können.

von Sven (Gast)


Lesenswert?

Hallo August,

das mit dem Mikrokontroller ist eine Vorgabe, an die ich mich halten 
muß, da es sich um eine Diplomarbeit handelt ;)

An Fram hatte ich auch schon gedacht und schon Samples geordert, 
allerdings weiß ich nicht, ob und wann die ankommen. An ebay hatte ich 
da noch gar nicht gedacht ist aber ein guter Hinweis.

Von "normalen" Speicher wollte ich eigentlich Abstand nehmen, weil die 
zuviele Pins haben, daher gerne i2c hätte auch den Vorteil, dass sich 
die Speicheradresse inkrementiert. Wäre also einfacher.

So, nochamls zu der Abtastrate. Wenn ich das richtig sehe, ist bei dem 
ADC eine S&H, d.h. der Wert wird gesampelt, gehalten und ausgegeben. Das 
bedeutet dann doch, das erst ein neuer Wert "geholt" werden kann, sobald 
der ADC den alten Wert umgesetzt hat oder?

Das mit fa=min 1kHz ist mir durchaus bewußt, aber wenn ich das mit dem 
Scaler und einer fcore des uC so richtig sehe, komme ich auf minimal 
fa=4,8kHz und in dem Fall hätte ich auch viel mehr Werte oder nicht.

Oder doch nen externen ADC, dann wäre ich unabhängig vom fcore des uC

von August (Gast)


Lesenswert?

Hallo Sven,
ok - dann weiß ich das schon mal besser einzuordnen und
über grundlegende Dinge brauchen wir uns nicht zu verlieren. ;-)

Externen A/D-Wandler braucht es nicht, der AVR packt das locker.

Nehmen wir eine Abtastrate von 1024 Hz, 1024 Stützpunkte und
einen Tiefpass der alles ab 500 Hz vom A/D-Wandler fern hält.

Ich betreibe bei mir den A/D-Wandler im "differential Mode",
gibt mir gleich das Vorzeichen frei Haus.

Mit welcher Auflösung soll die Ausgabe erfolgen? Davon hängt
ab, ob man die Dynamik der 10 Bit des A/D überhaupt nutzen
muss.
Aber nehmen wir mal an, es wären 10 Bit, dann packen wir jeden
Messwert, faul wie wir sind, in 16-Bit-Format, also 2 Bytes
je Messwert. Gibt einen ersten Puffer von 2 kByte.
Dieser Puffer ist nach einer Sekunde voll. So lange die FFT-
Berechnung (abzüglich der Rechenzeit für die Interrupts,
für die Erbsenzähler) nicht länger als 1 Sekunde braucht,
belastet sie den Durchsatz nicht wirklich. In C sollte das
zu lösen sein.
Mit Assembler wird an einen Faktor 10 optimieren können, auch
lassen sich die Messdaten verschachtelt ablegen, damit die
X,Y,Z-Pointer-Operationen des AVR so richtig Freude haben.
Schön sieht das dann nicht aus, aber flink wird es. ;-)

Für die FFT-Berechnung veranschlage ich weitere 4 kByte.
Damit wären wir jenseits von ATmega32 und auch ATmega128.
Eigentlich etwas für ATmega2560 mit 8 kB RAM, wenn nicht
sogar schon etwas für AT91SAM7xxx.
Vorsicht beim ATmega256x in Assembler: für Unterprogramme
werden nicht 2 sondern 3 Bytes in den Kellerspeicher verschoben!

Ich nutze für einen FFT mit LC-Display hier den ATmega644.
Der hat die schöne Eigenschaft, dass er den A/D-Wandler aus
einem Timer (Compare) heraus anstoßen kann. Ist die Wandlungs-
zeit des A/D bekannt, kann der Timer-Interrupt ohne Rechen-
zeitverlust noch für die LC-Display-Ausgabe genutzt werden.
Aber das ist wieder eine andere Geschichte.

So, dann mache ich jetzt Platz für die Besserwisser.
August

von MaG2k (Gast)


Lesenswert?

Kann mir denn jemand       sagen wo ich das display das elm-chan 
verwendet hat beziehen kann oder kann ich auch ein beliebiges anderes 
display einsetzen?
Welche sind kompatibel bzw. wie kann ich den  code für andere Displays 
nutzbar machen?

Gruß
MaG

von Hans-Christian (Gast)


Lesenswert?

Hallo MaG2k,

ich habe mal die Routinen von elm-chan mit den S65-Display-Routinen von 
Christian Kranz verbunden und habe nun ein Spektrum sogar in Farbe!

Gruss
Hans-Christian

von MaG2k (Gast)


Lesenswert?

hallo hans-christian,

das klingt sehr sehr interessant...kann ich dich mal um den Quellcode 
bitten, denn ich weiß nicht wie ich das zu machen habe, also die 
displayansteuerung in des Programm einzubinden!

Danke

MfG
MaG2k

von Sven (Gast)


Lesenswert?

Hallo August,

ich habe nochmal eine Frage.
Und zwar hast du geschrieben: "Ich betreibe bei mir den A/D-Wandler im 
"differential Mode", gibt mir gleich das Vorzeichen frei Haus."

Wie sieht das Hardwarmäßig aus?

Vorab Danke

von Patrick (Gast)


Angehängte Dateien:

Lesenswert?

Hallo hier habt ihr ne 512 Punkt FFT in Gnumeric (Goodbye Windows :). 
Ich bin gerade dabei diese in einen Mega32 zu programmieren (asm 
natürlich). Damit ich keine Scheisse programmier hab ich mir dieses 
Gnumeric-Programm geschrieben. Vieleicht hilft es jemandem, die Mathe 
hinter der FFT besser zu verstehen (Rechenwege alle nachvollziehbar), 
ich hatte anfangs Mühe mit den blöden Formeln, aber der Grundgedanke ist 
einfach...

Das Programm sollte soweit stimmen, für eine Gerade und Sinuswerte gibt 
es das gewünschte Resultat. Wenn jamand Fehler findet, bitte 
korrigieren.

FFT-Input: Funktion die FFT´t werden soll eingeben, BB,BC,BD ist der 
Output, unten ist noch der Graph der Input und Outputfunktion.

Gut Nacht, ich geh jetzt pennen

von Steffan (Gast)


Lesenswert?

Hi,

kannst du mir deinen Schaltplan etwas erläutern?
Wieso liegt das Audiosignal sowohl auf AREF als auch an ADC0.
Bekommst du dadurch das du ADC0 und ADC1 verwendest positive und 
negative Werte?

Vorab Danke.

von Steffan (Gast)


Lesenswert?

Sorry meine Anfrage bezog sich auf den Schaltplan avrfftmega8.sch von 
Benedikt

von Mike (Gast)


Lesenswert?

@Patrick

Finde Dein gnumeric Sheet sehr interessant.
Um das Sheet und die FFT jedoch besser zu verstehen finde ich die Größe 
von 512 Punkten recht unübersichtlich. Könntest Du das Sheet vielleicht 
auf 8 oder 16 Punkte abändern, das wäre denke sehr hilfreich.

Gruss Mike

von Steffan (Gast)


Lesenswert?

@Patrick

Da stimme ich Mike zu, das wäre eine feine Sache.

MFG Steffan

von Steffan (Gast)


Lesenswert?

Nabend,

ich habe nun die FFT von Elm auf meinem uC zu laufen bekommen.
Ich nutze die Version mit dem C-Modul für WinAVR.
Allerdings habe ich ein Problem, das ich mir nciht erklären kann.
Mein uC hat einen Takt von 8MHz, der Prescaler ist auf 128 eingestellt 
also arbeitet der ADC mit 62,5kHz Takt. Ich betriebe den ADC im Freerun. 
also braucht die S&H 1,5 und die Wandlung des ADC 13 takte, macht 
zusammen 15 Takte für ein Wandlung. Daraus würde ich schließen, das ich 
eine Abtastung von 4,16kHz habe. Ich speichere 4096 abgetastete Werte 
ab. Nun nehme ich aus diesem Array nur jeden vierten Wert und führe eine 
1024 Punkte FFT aus. Da ich nur jeden 4. Wert nehme, müßte es doch einer 
Abtastfrequenz von 1,04kHz entsprechen d.h. die Auflösung der FFT 
(Auflösung=Abtastfrequenz/Abtastwerte FFT) müßte 1,04Hz betragen.
Ich habe noch einen einfach Tiefpass 1. Ordung davor, der eine 
Grenzfrequenz von 503Hz besitzt. Meine Referenzspannung des ADC beträgt 
4,88V und ich habe ein Offset von 2,44V. Wenn ich kein Signal anlege 
habe ich, so wie es sein soll in dem Array nur Werte zwischen 0 und -64 
Wertebereich +-32768 (-64 dürfte der Quantisieurngfehler sein mit 
4,88mV). Soviel zu den Daten.

Nun zu meinem Problem: wenn ich ein 100Hz Sinus einspeise, wird mir im 
Spektrum bei 85 die höchste Amplitude angezeigt. Wie kann das sein? In 
anbetracht der Auflösung müßte das doch bei 104 liegen oder nicht?

Hat jemand ne Idee? Bin über jede Hilfe glücklich!

MFG

Steffan

von Hirbel H. (leo)


Lesenswert?

Hi,

kann mir jemand erklären, wozu die folgende Tabelle benötigt und 
vorallem wie sie errechnet wird?

t_desc:  ; Descramble table (for 128 point FFT)
  .dw  0*4, 64*4, 32*4, 96*4, 16*4, 80*4, 48*4, 112*4
  .dw  8*4, 72*4, 40*4, 104*4, 24*4, 88*4, 56*4, 120*4
  .dw  4*4, 68*4, 36*4, 100*4, 20*4, 84*4, 52*4, 116*4
  .dw  12*4, 76*4, 44*4, 108*4, 28*4, 92*4, 60*4, 124*4
  .dw  2*4, 66*4, 34*4, 98*4, 18*4, 82*4, 50*4, 114*4
  .dw  10*4, 74*4, 42*4, 106*4, 26*4, 90*4, 58*4, 122*4
  .dw  6*4, 70*4, 38*4, 102*4, 22*4, 86*4, 54*4, 118*4
  .dw  14*4, 78*4, 46*4, 110*4, 30*4, 94*4, 62*4, 126*4

(Code von http://elm-chan.org/works/akilcd/report_e.html, vom Anfang des 
Threads)

MFG Leo

von Fuchs (Gast)


Lesenswert?

Bin mal gespannt auf die XMegas, haben die überhaupt mehr Dampf oder 
wieder nur 1MIPS/MHz?

von zero_gravity (Gast)


Lesenswert?

die tabelle brauchst du, um die ergebnisse der fft in die richtige 
ordnung zu bringen... kenne jetzt den code von elm chang nich genau, 
aber ich meine der verzichtet auf eine bitreverse sortierung der 
stützpunkte und darum muss er sie nach der fft wieder mit der descramble 
tabelle richtig anordnen


glg
zero

von Hirbel H. (leo)


Lesenswert?

hmmmm...
hat denn jemand das Unterprogramm "do_fft" richtig verstanden?

Also ich geh jetzt mal von einer 128 Punkt FFT aus.
Der Butterflybuffer ist 512 Byte gross und wird im Unterprogramm 
"do_window" befühlt, wobei jedes zweites word NULL ist!

In der FFT Berechnung wird dann Z die Adresse vom Buffer zugeteilt und Y 
is die Adresse vom gleichen Buffer, allerdings beginnend von der Mitte 
(Der Buffer wird also in zwei hälften geteilt).
Jetzt wird damit gerechnet....
und dabei ist mir aufgefallen, dass einmal mit [y+0] und [z+0] (das sind 
jeweils 2 Bytes die in "do_window" zugewiesen wurden) und es wird 
ebenfalls mit [y+2] und [z+2] gerechnet, wobei hier IMMER [y+2] und 
[z+2] die Werte 0 sind (auch in "do_window" zugewiesen)....
WIESO UND WARUM wird das gemacht?

es handelt sich doch hierbei um den RADIX-2 Algorithmus von Cooley und 
Tukey oder is das ein RADIX-4 Algo??

Kann mir da jemand weiterhelfen, ich möchte das gerne verstehen.

von Martin O. (olliver)


Lesenswert?

Hallo !

Ich habe auf der Internetseite :

http://www.youtube.com/results?search_query=Big+Blue+Audio+Spectrum+Analyzer&search_type=

ein Sound-Spectrum mit blauen LED'S gesehen , dafür bräuchte ich genau 
diesen
Schaltplan und Stückliste.
Wäre das möglich ?
Wenn ja meine E-Mail: MartinPersner@msn.com
Ich habe versucht mich bei YouTube zu registrieren aber irgendwie 
gelingt mir das nicht , das herstellen des Account bricht bei mir immer 
plötzlich ab.
Deshab nun die bitte an Euch helfen Sie mir wen es möglich ist.
Ich möchte diesen Big Blue Audio Spectrum Analyzer gerne nachbauen.

DANKE

von Dominik (Gast)


Lesenswert?

zum Thema oled

ist es möglich ein analizer mit controller für ein oled display zu bauen
das eine höhere auflösung besitzt? ich will es dann an meine
aktivmonitore hängen (und ich dachte am besten direkt am eingang). ich
möchte die oled displays dann in meine lautsprecher einbauen und
erreichen, dass mir die dann in etwa die genaue frequenzlinie anzeigen
und das wenns geht zügig und genau. also nicht leicht nachrudernd oder
ungenau.......? wäre glücklich, wenn mir einer helfen könnte.
wenn es möglich ist will ich es dann in verschiedenen farben darstellen
d.h. Tiefbassbereich 0-125 hz z.B. rot bassbereich 125-380 z.B. orange
tiefmitten bereich 380-1800 blau hochmittenbereich 1800-6200 grün und
Höhenbereich 6200-22000 gelb  zum Beispiel muss nicht genau so sein

Danke schon mal im voraus für euer interesse

mfG Dominik

von jo (Gast)


Lesenswert?

Eines weckt bei mir doch reges Interesse, wie habt ihr die AGC 
realisiert oder wurde hier überhaupt eine realisiert.
Irgendwie muss ja für eine "konstante" Aussteuerung bei verschiedenen 
Lautstärken gesorgt werden.

Liegt zwar schon ein bisschen zurück das Ganze hier aber würd mich 
trotzdem über ein paar Antworten freuen.

Gruß,
der Herr Jo

von jo (Gast)


Lesenswert?

Mögt ihr mich etwa nicht oder warum antwortet mir keiner?

von keks0r (Gast)


Lesenswert?

AGC
ist doch vom AD die Ref spannung?
einfach auf VCC legen, ich jag zb auch einfach voll wellen drauf, ohne 
gleichrichtung, nur nen kondensator zumn endkoppeln brauchst du

von Walter (Gast)


Lesenswert?

Hallo zusammen,
ich habe eine große Bitte, es geht mir um ein Programm zur 
Veranschaulichung meiner Technikerarbeit.

ich möchte ein Mikrofonsignal verstärken und an den AD- Eingang geben. 
Die aufgenommenen Töne sollen in 5 Spektren (125, 250, 500, 1000, 2000 
Hz) zerlegt werden und je nach Pegelstärke eine Led blinken lassen. 
Wobei die Impulslänge (led an) immer gleich lang seien soll, nur der 
Pausenabstand soll immer kürzer werden. Wird z.B ein ton von 500Hz leise 
ins Mikro geleitet so blinkt die 3. Led mit großen Pausen, wird nun der 
Ton laut so blinkt die Led sehr schnell.

Mit dieser Schaltung möchte ich die Funktionsweise eines CI Implantates 
und die Umsetzung in Corchlea verständliche Signale veranschaulichen und 
es wäre schön wenn mir jemand bei dem Programm helfen kann, denn leider 
habe ich mit dem Kontroller zu wenig Erfahrung.

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.