Guten Morgen,
ich möchte für meine Studienarbeit Frequenzen von einem
Beschleunigungssensor messen (Vibration). Leider habe ich nicht wirklich
ahnung wie ich an die Sache ran gehen soll :(
Da nur die "Hörbaren" Frequenzen interessieren wollte ich zunächst an
den Eingang einen Bandpassfilter an den Eingang setzten (20Hz - 20kHz).
Dann wollte ich die Signale vom Beschleunigungssensor (0-5V, 2.5V Offset
0g) mit einem AD-Wandler digitalisieren. Jetzt weis ich schon nicht mehr
weiter ...
Reicht es eine FFT über das Signal laufen zu lassen und dann das
Frequenzspektrum anzuzeigen (also z.B. 1024 Samples vom Signal machen
und das dann einer FFT Lib übergeben) oder muss man da wesentlich mehr
machen? Letztlich soll eine Art "Equalizer" am PC angezeigt werden...
Reicht dafür ein Ausreichend schneller µC (evtl. mit MAC-Einheit) oder
sollte man da direkt zu einem DSP greifen? Wenn ja, für welchen DSP
bekommt man günstige/kostenlose/selbstbau Programmer /
Entwicklungssoftware / Compiler?
Die reine Programmierung macht keine Probleme, ich bräuchte nur den
richtigen Ansatz.
Ich hoffe ihr könnt mir helfen ...
Nur Anmerkungen
Beschleunigungssensor:
einige haben bereits Bandpassverhalten/Frequenzbereich.
eventuell gibt es einen passenden?
20Hz bis 20 KHz
=> mind. 40 kS/Sek. (shannon, abtasttheorem)
Bei 1000 Samples ist der gesamte Freq.-bereich nur bedingt
zu analysieren - oder du läßt bei kleineren Frequenzen (ermittelbar?)
einfach Samples "raus".
1000 Sample bei 40kS/sek => 25 msec
20 Hz == 50 msec.
=> keine sinnvolle FFT-Anwendung mit 1000 S
Du brauchst mehr.
Ist es eine Frequenz die auftritt ?
Bei der FFT werden nur die Signale richtig berechnet, die in
dein 1024 Samplebereich als Sinus n-fach passen.
Alle anderen erzeugen nichtvorhandene Spektralanteile:
daher werden die ersten und letzten Meßwerte oft gewichtet
(verschiedene Funktionen sind da in der Lit. genannt.)
siehe z.B.:
http://www.baudline.com/manual/equalization.html#windowing
Zitat:
"Equalizer" am PC angezeigt...
Wenn ein PC erlaubt ist/dabei ist:
Da würde ich alles direkt mit (der) Soundkarte(-n) machen:
& da gibt es freeware
Man kann auch mehrere Soundkarten ansprechen
- ggf. ist das ein einfacherer Weg, da ein PC ja eh verwendet wird.
Der Bandpass ist ja fast passend in jeder Soundkarte "drin".
Soll nur das Signal analysiert werden ?
Hallo,
genau genommen sollen die Daten nicht am PC sondern an einem PocketPC
angezeigt werden. Soundkarte ist demnach leider nicht vorhanden.
Datenübertragung ist mit Bluetooth daher kann ich nicht alle Samples zum
PocketPC schicken, die Daten müssen also vorverarbeitet werden.
Die Beschleunigungssensoren haben den Bereich von 20Hz - 20kHz. Sofern
ich dann den Bandpass weglassen kann, dann ist das ja gut.
Die Abtastrate sollte 44.2kHz sein. Wenn ich jetzt z.B. alle 100ms
berechnen möchte, dann brauche ich also rund 4200 Samples. Muss ich die
dann durch eine FFT laufen lassen? Es sind tatsächliche Frequenzen die
Auftreten (also von +Xg nach -Xg ..). Alle anderen Signale sind
unwichtig. Es tritt ja auch ein hörbares Geräuch generiert. Mikrofon
soll nicht verwendet werden, da die Umweltgeräuche "zu laut sind" (laut
Anforderung).
Was genau liefert mir die FFT als Ergebniss (hab das noch nicht richtig
verstanden)? Der Graph soll nachher so aussehen, das im Abstand von
50-100Hz ein Balken je nach Lautstärke/Itensität erscheint (ich hoffe
das ist verständlich erklärt).
Anbei ist ein Screenshot von einem Shareware Programm, 1kHz SIgnal über
Notebook Lautsprecher, aufgenommen über Notebook-Mikrofon mit 1024
Samples FFT. So soll das dann aussehen..
Ich hatte mal 'ne Schulung bei der Fa. Schenck. Die sind da drauf
spezialisiert. Zuerst sollte man wissen was man erwartet und sehen will,
z.B. Vibrationen innerhalb eines Getriebes, eines Lüfterrades oder
Ähnliches. Demzufolge weiß man die zu Erwartende Frequenz (Drehzahl,
Zähnezahl usw.). Eine 'eierlegende Wollmilchsau' wird immer nur
ungefähre Anhaltspunkte liefern, für eine genaue Analyse muss ein
kleiner Frequenzbereich jeweils hoch aufgelöst werden und die FFT
drübergelegt werden.
Ich weiß nicht was du mit dem Projekt sehen willst, nur ein Spektrum
über 20Hz..20kHz? Logarythmisch oder linear angezeigt/bewertet? Davon
hängt u.A. auch die Aufzeichnung ab.
Mit der Abtastrate & den Anzahl der Samples sind die
max. Freq.
min. Freq. und
n* (min. Freq.) spezifiziert.
min. Freq:
ein Sinus, der genau 1x deine Gesamtmessdauer entspricht:
Da du 100 msec lang messen möchtest, ist damit
F_0
angegeben.
Alle weiteren Frequenzen, die richtig von der FFT ermittelt werden,
sind:
n* F_0
bis zur max. Freq.
(Für Kritiker:
ja, man kann anders interpretieren, aber es liegt ein
gefiltertest Signal vor und damit geht das)
Beispiel:
Du nimmst 1 Sek. lang auf, 10 Samples, da paßt ein Sinus rein:
=> 1 Hz ist F_0
Eine Freq. von 1,5 Hz kannst Du damit nicht richtig "erkennen",
aber eine mit 2 Hz = 2x F_0
Die 1,5 Hz erzeugen eine Menge an Frequenzanteilen in dem
angezeigtem Spektrum
Falls Vorhanden:
-matlab
-octave 0 Euro
-scilab 0 Euro
teste die FFT,
scilab hat (wenn ich richtig liege)
eine FFT "onboard" mit gewichtungen.
Auch sinnvoll, um ggf. gemessene und analysierte
spektren zu konntrollieren
Math:
die FFT stellt das Signal in der Energienorm dar (toll)
=> es gibt Überschwinger, wenn man zB ein Rechteck aus den
berechneten Sinuskurve zusammenbaut:
Gibb'sches Phänomen
Auch das "windowing", Fensterfunktion erzeugen ähnliche
Effekte: also zusätzliche Freq.-anteile, die nicht da sind.
Da die FFT sehr aufwendig ist,
und mehrere Freq. im Signal drin sind &
mehrere Signale analysiert werden,
ist dass ggf. nicht mit einem "kleinen"
uC machbar.
Equalizer.:
Wenn du es nur anschauen willst, dann ist es kein Equ.
"nur" ein "Spektrumanalyser"
Daneben ist zu beachten, dass die Freq. quasi gemittelt werden
je Zeitfenster,
wenn die FFT so angewendet wird.
Du kannst da aber zwischenergebnisse für hohe Freq.
berechnen: kleiner FFT-zeitbereiche., die dann ausgeben,
um eventuelle
zeitl. kurze, aber große Pegel zu erkennen
Sonst wird da "gemittelt".
DSPs, FPGS wären ggf. Stichworte, wenn die Anforderung steigt.
Tipp:
1.
nimm deutl. mehr CPU-Power als geplant.
Am ende einer Stud.-arb. festzustellen. dass da "2 MIPS fehlen"
ist sehr ärgerlich.
2. float -Berechnungen:
die FFT wird mit sin, cos, ... berechnen or Tabelle.
INT-Berechnung approximiert => (min) "Rauschen"
3. schau in deiner Umgebnung, wer hat Erfahrung mit uCs/DSPs/FPGAs.
eine Antwort kann 1 week arbeit sparen
4.
fertige Codes:
googlen
5.
ggf. hilft das:
http://bwir.de/schaltungen/miniverstaerker
Weiter kann ich Dir nicht helfen (wenn das geholfen hat, ich hoff-s, :-)
Gruß & Erfolg!
C.
@Christian
Also, das ist ja bei mir schon ein bißchen her, ich stelle aber mal als
Diskussionsgrundlage in den Raum, das es falsch ist was du über die
niedrigste Frequenz schreibst.
Erklär doch mal bitte, warum die Periodendauer der niedrigsten Frequenz
kleiner als die Messdauer sein muss?
Um eine Sinusschwingung zu beschreiben genügen zwei Abtastwerte pro
Periode. Aber warum sollte man eine komplette Periode messen müssen?
Dann könnte man ja auch nie einen Gleichanteil mit einer FFT berechnen,
schließlich müsste man dann nach deiner Begründung eine unendliche
Anzahl von Samples haben?!
Gruß
Weil die FFT für 2-pi periodische Signale anwendbar ist.
Gleichanteil: ok, ist aber hier gefilter und
hat auf die messdauer keinen einfluß, solange die anderen
Freq. in das Schema passen
ZB:
1 HZ pass in die messdauer
1,5 Hz nicht => 3 Halbperioden
was machst du mit dem Gleichanteil der jetzt da ist ?
Der ist plötzlich da , aber es liegt nur eine Freq./schwingung
OHNE gleichanteil vor.
(Da eh ein Bandpass vorliegt, gibt es keinen Gleichanteil.)
Mit zwei Meßwerten kannst man nicht immer einen Sinus beschreiben:
die beiden Werte sind, extremfall:
0= A sin(0*pi)
0= A sin(1*pi)
Wie groß ist A, wenn die messung 2x 0 ergibt ?
min. Freq. ist aber ein schlechter Ausdruck:
eher Grundwelle ?
Resumee:
Wenn also die freq-anteile 2-pi periodisch sind,
ist der Gleichanteil von der Messdauer/Sampleanzahl unabhängig,
da die Sinuswelle alle "herausfallen und nur der Gleichanteil bleibt:
die "langsamste Sinuswelle" (tiefste Freq.)
muss genau reinpassen, alle anderen sind n*
"schneller",
dann stimmt bei addition aller werte auch der gleichanteil.