Forum: Digitale Signalverarbeitung / DSP / Machine Learning Berechnung der Energie und der Leistung eines Signals


von Merlin E. (Firma: none) (new_user)


Lesenswert?

Hallo, liebe Entwickler!
Ich mache gerade ein Praktikum mit Hauptthema Digitale 
signalverarbeitung. Und gleich habe ich eine Hurde. Die Berechnung der 
Energie und der Leistung eines Signal.

Ich nehme einfach mal ein Beispiel:

Fs = 1000;  % Sampling Frequency
N    = 20;         % Order
Fc   = 250;        % Cutoff Frequency
flag = 'noscale';  % Sampling Flag
% Create the window vector for the design algorithm.
win = hamming(N+1);
% Calculate the coefficients using the FIR1 function.
b  = fir1(N, Fc/(Fs/2), 'low', win, flag);

Wie sie sehen, habe ich einfach mal ein filter mit Matlab entworfen.

Die Energie des filters in Zeitbereich habe ich einfach so berechnet:
   W_zeitbereich = b*b'  ( vektorweise );

Danach wandle ich den filter in Frequenzberecih mit dem FFT:
   Filt_FFT = fft(b, Fs);
   Filt_Magn = abs(Filt_FFT);
   Filt_Phase = angle(Filt_FFT);

   % Converting The Amplitude in dB
   Filter_Magn = 10*log10(Filt_Magn);

Nun möchte ich die Energie und die Leistung(nach Parseval) des Filters 
berechnen. So bin ich vorgegangen:
   W_frequenzbereich = filter_Magn * filter_Magn';

So kriege ich nicht das gleiche Ergebnis mit der in Zeitbereich.

Was mache ich falsch? Wie kann ich vorgehen?

Ich danke im voraus für Ihre Hilfe

von FL (Gast)


Lesenswert?

> % Converting The Amplitude in dB
>   Filter_Magn = 10*log10(Filt_Magn);

Was soll diese Logarithmierung? Du benutzt das Ergebnis 'Filter_Mag' 
dann zur Berechnung der Energie?


Gruß
FL

von Detlef _. (detlef_a)


Lesenswert?

Log weglassen und normieren:

b=rand(1,1000);
W_zeitbereich =(b*b')
Filt_FFT = fft(b);
Filt_Magn = abs(Filt_FFT);
W_frequenzbereich = Filt_Magn * Filt_Magn'/1000
Filt_FFT*conj(Filt_FFT).'/1000

Eleganter als diese abs() Geschichte ist das Rechnen mit der konjuguiert 
komplexen FFT wie in der letzten Zeile.

Cheers
Detlef

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.