Forum: Digitale Signalverarbeitung / DSP / Machine Learning FFT: Amplitude Spectral Density / Zurückrechnen auf Pegel


von Christoph K. (christoph_k314)



Lesenswert?

Hallo zusammen,

ich habe gerade folgendes Problem:

ich möchte mittels FFT Signale optischer Sensoren untersuchen. Die 
Signale sind im wesentlichen weißes Rauschen und können ggf. kleine 
schmalbandige Störanteile enthalten. Die Daten entsprechen nach 
Umrechnung der Eingangsspannung des ADC bzw. nach weiterer Umrechnung 
dem Strom der Sensoren. Die FFT trägt also als Ergebnis - sofern ich das 
Richtig verstehe - auf der Ordinate die Einheit des Eingangssignals, 
also V bzw. A.

Jetzt fangen die Schwierigkeiten an:

-Bei einem Leistungsspektrum kann ich mir ja noch vorstellen -> Verteilt 
man Leistung über immer mehr Bins (kleines deltaF) sinkt der Rauschpegel 
in der FFT. Allerdings ist das Spektrum ja kein Leistungsspektrum 
sondern ein Spannungsspektrum bzw. Stromspektrum und dort ist das für 
mich nicht mehr so anschaulich

-Die Skalierung passt, füttere ich mit einem Sinus komme ich auf die 
entsprechenden Amplituden. Jetzt möchte ich von der FFT des Rauschens 
zurück auf die Rauschamplitude. Dafür summiere ich die einzelnen Bins 
quadratisch (sie sind ja nicht korreliert). Ich komme dabei in meinem 
Beispiel (+-1V weißes, gleichverteiltes Raucshen (nicht Gausss!) auf 
0.81V und nicht auf die 1V.


Fragen: Wieso komme ich rechnerisch nicht auf die 1V nach Summation der 
Bins und wie komme ich rechnerisch auf eine Rauschspannungsdichte, die 
dann unabhängig ist von der FFT-Auflösung. (mir ist unklar wie ich auf 
Sqrt(Hz) komme - wieso dividiere ich nicht nur die Binwidth sonderne 
deren Wurzel?)

Ich habe im Anhang mal die Bilder. Jeweils ein mal Rohsignal, Histogram 
und FFT. Für nur Rauschen und für Rauschen + Sinusträger mit Amplitude 1

von Achim S. (Gast)


Lesenswert?

Christoph K. schrieb:
> ich möchte mittels FFT Signale optischer Sensoren untersuchen. Die
> Signale sind im wesentlichen weißes Rauschen und können ggf. kleine
> schmalbandige Störanteile enthalten. Die Daten entsprechen nach
> Umrechnung der Eingangsspannung des ADC bzw. nach weiterer Umrechnung
> dem Strom der Sensoren. Die FFT trägt also als Ergebnis - sofern ich das
> Richtig verstehe - auf der Ordinate die Einheit des Eingangssignals,
> also V bzw. A.

Zeigen deine Beispiele denn schon echte Messsignale oder sind das nur 
simulierte Voruntersuchungen?

Christoph K. schrieb:
> -Die Skalierung passt, füttere ich mit einem Sinus komme ich auf die
> entsprechenden Amplituden.

Aber nur, wenn du den Leckeffekt vernachlässigen kannst. Was in deinem 
Zahlenbeispiel der Fall zu sein scheint. Die exakten Zahlen lassen sich 
zwar nicht so ohne weiteres auslesen, aber der Sinus scheint eine 
Frequenz von 10Hz zu haben und die Aufzeichnungsdauer beträgt 
1/(0,01Hz)=100s. (Ich hab mir jetzt einfach mal die einfachste 
SI-Einheit an deine Skalen drangedacht. Da die Skalierung deiner Graphen 
keine Einheiten hat könnten es natürlich auch ebensogut 10kHz und 100ms 
sein).

Wenn du Signalfrequenz und Aufzeichnungsdauer exakt so gewählt hst, gibt 
es keinen Leakage-Effekt: Das Aufzeichnungsdauer beträgt exakt 1000 
Perioden des Sinus, im Spektrum sieht man eine nicht verbreiterte Linie 
mit der korrekten Höhe. Wenn die Verhältnisse nicht so günstig liegen, 
bekommst du aufgrund des Leckeffekts auch Verfälschungen beim Sinus 
(Verbreiterung und falsche Amplitude) und du brauchst eine passende 
Fensterfunktion, um die korrekte Linienhöhe zu erhalten. Wähle zum 
Vergleich mal 10,005 Hz für deinen Sinus (oder 10,005kHz, wenn deine 
Frequenzachse in kHz skaliert ist).

Sehe ich es richtig, dass du bisher ohne Fensterfunktion arbeitest?
https://de.wikipedia.org/wiki/Fensterfunktion

Christoph K. schrieb:
> Ich komme dabei in meinem
> Beispiel (+-1V weißes, gleichverteiltes Raucshen (nicht Gausss!) auf
> 0.81V und nicht auf die 1V.

Hast du denn mal die Gegenkontrolle gemacht und im Zeitbereich den 
Effektivwert über alle gesampelten Rauschwerte berechnet? Kommen da 
genau die erwarteten 1V raus?

Christoph K. schrieb:
> mir ist unklar wie ich auf
> Sqrt(Hz) komme - wieso dividiere ich nicht nur die Binwidth sonderne
> deren Wurzel?

Wenn du die Leistung gleichmäßig auf Frequenzintervalle verteilst, dann 
kann nicht gleichzeitig die Spannung genauso verteilt sein. Bei der 
Umrechnung von Spannung auf Leistung musst du quadrieren. (Das machst du 
in deiner Berechnung des Effektivwerts ja auch). Aus der Einheit 
V/sqrt(Hz) wird durch das Quadrieren V^2/Hz, und über diese gleichmäßige 
Verteilung (die nur noch die Angabe eines Arbeitswiderstands bräuchte um 
eine gleichmäßige Leistungsverteilung zu sein) mittelst du.

Christoph K. schrieb:
> wie komme ich rechnerisch auf eine Rauschspannungsdichte, die
> dann unabhängig ist von der FFT-Auflösung

vielleicht hilft dir das Stichwort "processing gain fft".
https://kluedo.ub.uni-kl.de/frontdoor/deliver/index/docId/4293/file/exact_fft_measurements.pdf

von Christoph K. (christoph_k314)


Lesenswert?

Achim S. schrieb:
> Zeigen deine Beispiele denn schon echte Messsignale oder sind das nur
> simulierte Voruntersuchungen?

Hallo Achim,

ja das siehst du genau richtig. Die Messdaten wollte ich nicht gleich 
verwenden sondern erstmal mein grundlegendes Verständnis soweit 
festigen, dass die Ergebnisse auch passen. Das geht ja meistens am 
Besten mit einem aufs nötigste reduzierten Beispiel.

Achim S. schrieb:
> Aber nur, wenn du den Leckeffekt vernachlässigen kannst. Was in deinem
> Zahlenbeispiel der Fall zu sein scheint. Die exakten Zahlen lassen sich
> zwar nicht so ohne weiteres auslesen, aber der Sinus scheint eine
> Frequenz von 10Hz zu haben und die Aufzeichnungsdauer beträgt
> 1/(0,01Hz)=100s. (Ich hab mir jetzt einfach mal die einfachste
> SI-Einheit an deine Skalen drangedacht. Da die Skalierung deiner Graphen
> keine Einheiten hat könnten es natürlich auch ebensogut 10kHz und 100ms
> sein).
>
> Wenn du Signalfrequenz und Aufzeichnungsdauer exakt so gewählt hst, gibt
> es keinen Leakage-Effekt: Das Aufzeichnungsdauer beträgt exakt 1000
> Perioden des Sinus, im Spektrum sieht man eine nicht verbreiterte Linie
> mit der korrekten Höhe. Wenn die Verhältnisse nicht so günstig liegen,
> bekommst du aufgrund des Leckeffekts auch Verfälschungen beim Sinus
> (Verbreiterung und falsche Amplitude) und du brauchst eine passende
> Fensterfunktion, um die korrekte Linienhöhe zu erhalten. Wähle zum
> Vergleich mal 10,005 Hz für deinen Sinus (oder 10,005kHz, wenn deine
> Frequenzachse in kHz skaliert ist).
>
> Sehe ich es richtig, dass du bisher ohne Fensterfunktion arbeitest?
> https://de.wikipedia.org/wiki/Fensterfunktion

Ja, alle deine Annahmen sind korrekt. Im Beispiel sind es 10Hz @ 
Amplitude 1. Das Rauschen Hat ebenfalls eine Amplitude von 1 und ist 
gleichverteilt.

Die Analyse zielt auf Messungen von Rauschvorgängen bei 
Entladungslampen. Da sind keine periodischen Signale zu erwarten 
weswegen ich auf eine Fensterung gezielt verzichte. Den Sinus habe ich 
nur verwendet um grundlegende Skalierungsfehler ausschließen zu können. 
Zur gezielten Messungen von periodischen Störern habe ich die Option ein 
Flat-Top Window zu verwenden.

Vielleicht nochmal zu meinem Vorgehen:

ich rechne:

Sqrt(Sum(Bin^2))

Also quadratische addition der einzelnen Bins. Mit der Argumentation, 
dass die Bins ja unkorreliert sind. Ab jetzt ist mir unklar wie das 
Ergebnis zu interpretieren ist. Dass da kein Peak-Peak rauskommt ist mir 
klar -> aber was genau kommt denn raus? Ist das RMS? Oder die Varianz? 
Die Einheit ist ja immernoch Volt ->  Sqrt(Volt^2), die Ordinate der FFT 
hat ja Volt.

Achim S. schrieb:
> Hast du denn mal die Gegenkontrolle gemacht und im Zeitbereich den
> Effektivwert über alle gesampelten Rauschwerte berechnet? Kommen da
> genau die erwarteten 1V raus?

Nein, eben weil mir nicht klar ist was ich überhaupt erwarte. Mein ziel 
ist es Peak-Peak des Rauschens aus der FFT zu ermitteln. Im 
Rechenbeispiel ist Peak-Peak ja 1V. Da komme ich aber auch mit *Sqrt(2) 
nicht hin

von Achim S. (Gast)


Lesenswert?

Christoph K. schrieb:
> Mein ziel
> ist es Peak-Peak des Rauschens aus der FFT zu ermitteln.

den "echten" Peak-Peak Wert bekommst du imho nur im Zeitbereich, indem 
du dir den Maximalwert und Minimalwert merkst und die Differenz bildest. 
Aus der FFT kannst du ihn vielleicht berechnen, indem du das 
Originalsignal rekonsturierst und dann die Differenz zwischen größtem 
und kleinstem Sample berechnest.

Aber wenn du über die FFT integrierst, dann erhältst du dem RMS-Wert 
(oder einen skalierten RMS-Wert, wenn du zuvor das Spektrum entsprechend 
skaliert hast). Und von diesem skalierten RMS-Wert kannst du dann unter 
Annahme eines bestimmten Rauschverhaltens auf einen "wahrscheinlichen" 
Peak-Peak-Wert zurückrechnen. Typisch rechnet man z.B. den RMS-Wert * 
6,6. Das ergibt bei Gaußschen Rauschen den Spannungsbereich, der nur für 
0,1% der Zeit verlassen wird.

Christoph K. schrieb:
> Im
> Rechenbeispiel ist Peak-Peak ja 1V.

Weil die noise-Funktion deiner Software wahrscheinlich zufällige Werte 
bildet und bei +1 und -1 hart abschneidet. Ich würde nicht erwarten, 
dass du aus dem Spektrum einfach durch Integration auf diese harten 
Abschneidewerte zurückrechnen kannst. Aber ich würde erwarten, dass die 
Integration über das Spektrum dir den korrekten RMS-Wert liefern sollte.

Also wie schon vorgeschlagen: berechne doch mal im Zeitbereich den 
RMS-Wert deiner Samples (also quadrieren, alles aufsummieren, durch die 
Zahl der Samples dividieren, und dann wieder die Wurzel ziehen). Kommen 
da deine 0,81V raus?

Hab es eben mal selbst mit LabVIEW probiert. Wenn ich dort als Quelle 
"uniform white noise" wähle und den RMS-Wert berechne, dann erhalte ich 
0,58V (also dein Wert von 0,81V geteilt durch sqrt(2)). Du hast das 
Spektrum also wohl so skaliert, dass für den Sinus die Amplitude 
angezeigt wird.

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.