Hallo an alle, ich möchte ein Sinussignal mittels eines ADC auslesen und einer implementierten FFT analysieren. Es soll die Amplitude des Signals ermittelt werden. FFT-Code gibts zu hauf im Internet, meine Frage geht eher ums allgemeine Verständnis: Ich übergebe der FFT n Samplepoints in das Realteilarray, die FFT wandelt das ganze in Real- und Imaginärteil und ich erhalte dann quasi 2 Ergebnisarrays. Wie bekomme ich jetzt die Amplitude? Muss ich die Magnitude (sqrt(R^2+I^2)) bestimmen? Sitze da etwas am Schlauch... Gruß
Gast
#4636890
Hali H. schrieb: > ich möchte ein Sinussignal mittels eines ADC auslesen und einer > implementierten FFT analysieren. Es soll die Amplitude des Signals > ermittelt werden. Wenn du die Frequenz kennst, ist eine FFT völlig übertriebener Rechenaufwand.
Gast
#4636912
Ja, man muss die einzelnen Werte aufsummieren und euklidsch verrechnen. Danach noch auf die FFT-Länge beziehen. Aber Achtung: Manche FFT-Codes bauen einen Faktor mit rein.
Hilfegeber schrieb: > Ja, man muss die einzelnen Werte aufsummieren und euklidsch > verrechnen. > Danach noch auf die FFT-Länge beziehen. Aber Achtung: Manche FFT-Codes > bauen einen Faktor mit rein. Heißt das, ich muss alle Magnitude Werte in einem seperaten Array aufsummieren? Also quasi magnitude[i]= sqrt(Re(i)^2+Im(i)^2)) oder berechne ich die Magnitude nur einmal? Auf die Länge der FFT heißt denke ich durch die Anzahl der Samples teilen? Wolfgang schrieb: > > Wenn du die Frequenz kennst, ist eine FFT völlig übertriebener > Rechenaufwand. Wie geht es denn einfacher? ;)
Hali H. schrieb: > Es soll die Amplitude des Signals > ermittelt werden. Das macht man mit einem Spitzenwertgleichrichter.
Hali H. schrieb: > ich möchte ein Sinussignal mittels eines ADC auslesen und einer > implementierten FFT analysieren. Es soll die Amplitude des Signals > ermittelt werden. Wenn man einen Sinus mit einer FFT analysieren will, dann hat man vermutlich auch Oberwellen, ansonsten braucht man die FFT nicht und misst direkt die Amplitude. Wenn ein Sinus aber Oberwellen beinhaltet, dann muss man sich Fragen, welche Amplitude soll denn gemessen werden? Der Sinus kann dann ganz schön verformt sein. Ich denke mal, Du musst zur Grundwelle jede Oberwelle phasenrichtig addieren. Willst Du das wirklich? mfg klaus
Gast
#4637012
Hali H. schrieb: > Wie geht es denn einfacher? ;) Mit dem Goertzel-Algorithmus. Der rechnet nur den relevanten Teil.
Gast
#4637013
Klaus R. schrieb: > Wenn ein Sinus aber Oberwellen beinhaltet, dann muss man sich Fragen, > welche Amplitude soll denn gemessen werden? Der Sinus kann dann ganz > schön verformt sein. Dann ist der Sinus kein Sinus.
Klaus R. schrieb: > Hali H. schrieb: >> ich möchte ein Sinussignal mittels eines ADC auslesen und einer >> implementierten FFT analysieren. Es soll die Amplitude des Signals >> ermittelt werden. > > Wenn man einen Sinus mit einer FFT analysieren will, dann hat man > vermutlich auch Oberwellen, ansonsten braucht man die FFT nicht und > misst direkt die Amplitude. > > Wenn ein Sinus aber Oberwellen beinhaltet, dann muss man sich Fragen, > welche Amplitude soll denn gemessen werden? Der Sinus kann dann ganz > schön verformt sein. Ich denke mal, Du musst zur Grundwelle jede > Oberwelle phasenrichtig addieren. Willst Du das wirklich? > mfg klaus Ja genau, das Sinussignal wird verzerrt sein. Reicht es nicht aus, den maximalen Magnitude zu nehmen? Ein Sinus hat ja nur den einen Peak. der Rest wird doch "nur" das Rauschen (Ober-/Unterwellen) sein?
Hali H. schrieb: > Ja genau, das Sinussignal wird verzerrt sein. Hier mal ein extremes Beispiel: https://www.mikrocontroller.net/attachment/294695/Input_pwl_5_1a.jpg > Reicht es nicht aus, den maximalen Magnitude zu nehmen? Ein Sinus hat ja > nur den einen Peak. der Rest wird doch "nur" das Rauschen > (Ober-/Unterwellen) sein? Schon mal ein Rechteck per FFT analysiert? Ein Rechteck besteht aus unendlich vielen Sinussignalen. Jetzt kannst Du Dir vorstellen das auch die Phasenlage der Oberwellen zur Ermittlung einer Amplitude interessant sein kann. Es kommt natürlich auf die gestellten Ansprüche an, wie genau soll gemessen werden? Beim Klirrfaktor von 10% sieht man im Sinus schon optisch die Verzerrungen. mfg klaus
Wenn also der Klirrfaktor genügend klein ist, man das Eingangsignal schon zuvor analog filtert, dann kann man die Amplitude über die maximale Magnitude ermitteln oder? Also bei einem Sinussignal.
Hali H. schrieb: > Wenn also der Klirrfaktor genügend klein ist, man das Eingangsignal > schon zuvor analog filtert, dann kann man die Amplitude über die > maximale Magnitude ermitteln oder? Also bei einem Sinussignal. Dann braucht Du zur Ermittlung der Amplitude aber kein FFT mehr. mfg klaus
Moin, FFT halt' ich eh' fuer schlecht geeignet die Amplitude zu messen, wenn nicht das Messsignal und die Abtastrate phasenstarr miteinander verkoppelt sind. Ich wuerd' den Effektivwert des Signals messen und seinen linearen Mittelwert. Daraus kann man dann dann, so man annimmt, das Signal waere ein Sinus (mit ueberlagertem Gleichanteil z.b. durch den Offset des Wandlers) die Amplitude berechnen. Gruss WK
Du könntest auch, um "nur" den Maximalwert zu bestimmen das Signal über mehrere Perioden abtasten und immer schauen ob du ein Maximum hast. Aus dieses Maxima berechnest du noch den Mittelwert. Also einen großen Buffer vollsamplen, diesen anschließend nach Mixima scannen. Ein Maxima hast du wenn Sample[i-1] < Sample[i] > Sample[i+1] ist. Dieses Maxima addierst du in einen extra Buffer, gleichzeitig zählst du die Maxima mit.
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
Gast
#4637691
Oder du besorgst die nen uC mit HW FFT Register... Das ist super schnell! :)
Er hat ja noch nicht gesagt was er überhaupt nutzt.
> Oder du besorgst die nen uC mit HW FFT Register
Welcher µC kann sowas?
Gast
#4637721
Hi ich noch mal.. dieser zum Beispiel TMS320C5505
Deine ursprüngliche Frage war
> Muss ich die Magnitude (sqrt(R^2+I^2)) bestimmen?
Ja, aber nur wenn die Frequenz deines Signals genau auf einer deiner
Spektrallinien liegt. Was "genau" heißt, kannst du dir selber
definieren. Ansonsten musst du noch benachbarte Spektrallinien
berücksichtigen.
Die anderen Antworten hier beantworten deine Frage zwar nicht, aber
solange es um das Ziel, und nicht um den Weg geht, sind sie berechtigt.
Und es gibt viele Möglichkeiten. Alle haben unter realen Bedingungen
Messfehler, und es liegt an dir, mit einem Verfahren einen geeigneten
Kompromiss zwischen Messgenauigkeit und Rechenaufwand zu finden.
Ich bringe noch drei Verfahren in die Diskussion:
1. Signal gleichrichten (Betrag) und Mittelwert bilden (Tiefpass).
Korrekturfaktor dazu, fertig. Aber alle Oberwellen und Störspannungen
bleiben in der Messung, nur erheblich geringer als bei
Spitzenwertgleichrichtung.
2. Signal quadrieren und Mittelwert bilden (Tiefpass). Wurzel daraus,
fertig. Aber alle Oberwellen und Störspannungen bleiben auch hier in der
Messung, nur erheblich geringer als bei Spitzenwertgleichrichtung.
3. Signal mit Sinus mit möglichst gleicher Frequenz 2 x multiplizieren:
1 x 0°, 1 x 90°, beide Multiplizierer auf je einen Tiefpass, so
dimensioniert, dass weder eine Frequenzabweichung noch die zu
unterdrückenden Oberwellen und Störspannungen zu einem unzulässigen
Fehler führen (-> Kompromiss). Messsignal = sqrt(R^2+I^2).
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.