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
Gast
#987793
> % 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
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
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.