git-svn-id: http://moon:8086/svn/matlab/trunk@153 801c6759-fa7c-4059-a304-17956f83a07c
91 lines
3.5 KiB
Matlab
Executable File
91 lines
3.5 KiB
Matlab
Executable File
% ##################################################################################
|
|
% ## Loesung: Yule-Walker und Burg-Algorithmus ##
|
|
% ## -------------------------------------------------------------------------- ##
|
|
% ## Benoetigte(s) m-File(s): lywex.m, lburg.m ##
|
|
% ##################################################################################
|
|
|
|
NFFT = 2^10; N = 2^12;
|
|
p=[1 8 32]; MA = [1 -4 6 -4 1]; AR = 1;
|
|
|
|
% Teilaufg. a
|
|
q = length(MA)-1;
|
|
disp(sprintf('Wahre AKF (rxx(-%d),...,rxx(0),...,rxx(%d)):', q, q));
|
|
rxx = xcorr(MA).'
|
|
|
|
% Teilaufg. b und c:
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%% Yule-Walker %%%%%%%%%%%%%%%%%%%%%%%%%
|
|
% Ausgabe des tatsaechlichen ARMA- und des "geschaetzten" AR-Betragspektrums
|
|
Omega_norm = 0:1/NFFT:1-1/NFFT;
|
|
for k=1:3
|
|
[Sxx_ar, Sxx_arma, ar]=lywex(MA,AR,p(k),NFFT);
|
|
|
|
figure; plot(Omega_norm, abs(Sxx_arma),'--'); hold on;
|
|
plot(Omega_norm, abs(Sxx_ar)); hold off;
|
|
axis([0 1 0 1.25*max(Sxx_arma)]); ylabel('Sxx(Omega)');
|
|
title(sprintf('LDS von YW-AR(%d)', p(k))); xlabel('Omega/2pi');
|
|
figure; zplane(MA,ar); title(sprintf('Pole von YW-AR(%d)',p(k)));
|
|
xlabel('Realteil'); ylabel('Imaginaerteil');
|
|
end;
|
|
|
|
input('....naechste Teilaufgabe: RETURN druecken');
|
|
|
|
% Teilaufg. d:
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%% Burg-Methode %%%%%%%%%%%%%%%%%%%%%%%%%
|
|
% Ausgabe des tatsaechlichen ARMA- und des geschaetzten AR-Betragspektrums
|
|
Omega_norm = 0:1/NFFT:1-1/NFFT;
|
|
Sxx_arma = abs(fft(MA,NFFT)./fft(AR,NFFT)).^2;
|
|
|
|
for k=1:3
|
|
ar=lburg(N,p(k),MA,AR,NFFT);
|
|
|
|
Sxx_ar = abs(ones(1,NFFT)./fft(ar,NFFT)).^2;
|
|
Sxx_ar = Sxx_ar/sum(Sxx_ar).*sum(Sxx_arma);
|
|
figure; plot(Omega_norm, Sxx_arma,'--'); hold on;
|
|
plot(Omega_norm, Sxx_ar); hold off;
|
|
axis([0 1 0 1.25*max(Sxx_arma)]); ylabel('Sxx(Omega)');
|
|
title(sprintf('LDS von Burg-AR(%d)', p(k))); xlabel('Omega/2pi');
|
|
figure; zplane(MA,ar); title(sprintf('Pole von Burg-AR(%d)',p(k)));
|
|
xlabel('Realteil'); ylabel('Imaginaerteil');
|
|
end;
|
|
|
|
input('....naechste Teilaufgabe: RETURN druecken');
|
|
|
|
% Teilaufg. e:
|
|
MA=1; AR = [1 0.8];
|
|
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%% Yule-Walker %%%%%%%%%%%%%%%%%%%%%%%%%
|
|
% Ausgabe des tatsaechlichen ARMA- und des "geschaetzten" AR-Betragspektrums
|
|
Omega_norm = 0:1/NFFT:1-1/NFFT;
|
|
for k=1:3
|
|
[Sxx_ar, Sxx_arma, ar]=lywex(MA,AR,p(k),NFFT);
|
|
|
|
figure; plot(Omega_norm, abs(Sxx_arma),'--'); hold on;
|
|
plot(Omega_norm, abs(Sxx_ar)); hold off;
|
|
axis([0 1 0 1.25*max(Sxx_arma)]); ylabel('Sxx(Omega)');
|
|
title(sprintf('LDS von YW-AR(%d)', p(k))); xlabel('Omega/2pi');
|
|
figure; zplane(MA,ar); title(sprintf('Pole von YW-AR(%d)',p(k)));
|
|
xlabel('Realteil'); ylabel('Imaginaerteil');
|
|
end;
|
|
|
|
|
|
input('....Zum Fortfahren: RETURN druecken');
|
|
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%% Burg-Methode %%%%%%%%%%%%%%%%%%%%%%%%%
|
|
% Ausgabe des tatsaechlichen ARMA- und des geschaetzten AR-Betragspektrums
|
|
Omega_norm = 0:1/NFFT:1-1/NFFT;
|
|
Sxx_arma = abs(fft(MA,NFFT)./fft(AR,NFFT)).^2;
|
|
|
|
for k=1:3
|
|
|
|
ar=lburg(N,p(k),MA,AR,NFFT);
|
|
Sxx_ar = abs(ones(1,NFFT)./fft(ar,NFFT)).^2;
|
|
Sxx_ar = Sxx_ar/sum(Sxx_ar).*sum(Sxx_arma);
|
|
figure; plot(Omega_norm, Sxx_arma,'--'); hold on;
|
|
plot(Omega_norm, Sxx_ar); hold off;
|
|
axis([0 1 0 1.25*max(Sxx_arma)]); ylabel('Sxx(Omega)');
|
|
title(sprintf('LDS von Burg-AR(%d)', p(k))); xlabel('Omega/2pi');
|
|
figure; zplane(AR,ar); title(sprintf('Pole von Burg-AR(%d)',p(k)));
|
|
xlabel('Realteil'); ylabel('Imaginaerteil');
|
|
end;
|
|
% ##### EOF #####
|