% ################################################################################## % ## Funktion: lrader.m ; AKF-Schaetzung mit Raderverfahren ## % ################################################################################## % % function rxx = lrader(M,x) % % Nicht erwartungstreue AKF-Schaetzung nach dem Rader-Verfahren laut % Kammeyer/Kroschel "Digitale Signalverarbeitung", S. 240-247. % Der Parameter M muss eine Zweierpotenz sein und entspricht dem % (Maximalwert+1) fuer lambda. Der Vektor x mit den Signalwerten % darf eine beliebige Dimension annehmen und kann als Spalten- oder % Zeilenvektor uebergeben werden. Die Ausgabe erfolgt als Spalten- % vektor der Dimension M sowie nur fuer positive lambda-Werte: % rxx = [rxx(0), ..., rxx(M-1)]. % Fuer negative lambda ist eine konj. gerade Ergaenzung vorzunehmen. function rxx = lrader2(M,x,y) x = x(:); % Spaltenvektoren erzeugen y = y(:); % Spaltenvektoren erzeugen N = length(x); u = zeros(2*M,1); u(1:M) = x(1:M); U = fft(u); w = zeros(2*M,1); w(1:M) = y(1:M); W = fft(w); K = floor(N/M); v = zeros(2*M,1); Sxx = zeros(2*M,1); pm = (-1).^(0:(2*M-1)).'; for ii = 1:(K-1) % Iteration und Akkumulation v(1:M) = y((ii*M+1):((ii+1)*M)); V = fft(v); Sxx = Sxx + (conj(U) .*(W + (pm .*V))); W = V; u(1:M) = x((ii*M+1):((ii+1)*M)); U = fft(u); end; if K < N/M b = N - K*M; v = zeros(2*M,1); v(1:b) = y((K*M+1):N); V = fft(v); Sxx = Sxx + (conj(U) .*(W + (pm .*V))); end; Sxx = Sxx + 0*abs(V.^2); rxx = ifft(Sxx)/N; rxx = rxx(1:M); % ##### EOF #####