Files
matlab/common/buch/lwelch.m
T
2022-06-30 13:32:40 +02:00

46 lines
2.1 KiB
Matlab
Executable File

% ##################################################################################
% ## Funktion: lwelch.m; Welch- bzw. Bartlettverfahren ##
% ##################################################################################
%
% function Sxx = lwelch(x,K,windowtype[,NFFT[,overlap]])
%
% Schaetzung der spektralen Leistungsdichte nach dem Welch-Ansatz
% x Datenfolge (Zeilenvektor)
% K Anzahl der zu mittelnden Periodogramme = #Teilfolgen
% windowtype Fensterfunktion (z.B. 'hamming'=> Welch-Verfahren,
% 'boxcar' => Bartlett-Verfahren).
% [NFFT] FFT-Laenge (optional)
% [overlap] zusaetzliche Mittelung mit den Periodogrammen der
% um fix(L/2) verschobenen Teilfolgen (falls das
% optionale Argument vorhanden ist)
% Beispiel: Sxx = lwelch(x,4,'boxcar',1024);
function Sxx = lwelch(x,K,windowtype,NFFT,overlap)
L = floor(length(x)/K);
if nargin<4, NFFT=nextpow2(L); end;
% Fensterfunktion der Laenge
eval(['fenster =',windowtype,'(L);']); % L berechnen (Spaltenvektor)
AL = fenster.'*fenster; % Normierungskonstante
Sxx = zeros(1,NFFT);
kk = (1:L);
for i = 0:K-1 % Addition der Periodogramme
yi = fenster.' .* x(kk+i*L); % der nicht-ueberlappenden
Yi = fft(yi,NFFT); % Teilfolgen von x
Sxx = Sxx + abs(Yi).^2;
end
if nargin > 4 % zusaetzliche Addition der
kk = (1:L) + fix(L/2); % Periodogramme der ueber-
for i = 0:K-2 % lappenden Teilfolgen von x
yi = fenster' .* x(kk+i*L);
Yi = fft(yi,NFFT);
Sxx = Sxx + abs(Yi).^2;
end
Sxx = Sxx/AL/(2*K-1); % Normierung auf AL und
else % Anzahl der Mittelungen (=2K-1)
Sxx = Sxx/AL/K; % Normierung auf AL und
end % Anzahl der Mittelungen (=K)
% ##### EOF #####