📄 tfar_est_mlu2.m
字号:
function [A, B, exitflag, output]= tfar_est_mlu2(Ayy, Aml0, B0l0, re_im, opts)% function [A, B, exitflag, output]= tfar_est_mlu2(Ayy, Aml0, B0l0, re_im, opts)% This file is part of the TFPM toolbox v1.0 (c)% michael.jachan@tuwien.ac.at and underlies the GPL.% % Asymptotic ML estimator for TFAR(M, L; N; 1/2) models. The switch% re_im decides how the parameters are optimized! Crucial? %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%if(0)% TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%clear;tfpm;N = 64;MAR = 2;LAR = 2;MMA = 0;LMA = LAR;re_im= 'i';mo_no= 'n';tfpm_file_gen;%-------------beta = 1/2;B0l= Bml;y= tfarma_gen(randn(N, 1), Aml, Bml, beta);qyy= corr_est(y, y, -1, 1/2);ayy= fft(qyy);ayy= [ayy(N/2+1:N, :); ayy(1:N/2, :)];Psi= tf_multiwin(N, MAR, LAR, 5, 3, 1);Ayy= ayy.*conj(Psi);ayy= ayy(N/2+1-3*LAR:N/2+1+3*LAR, N/2+1-MAR:N/2+1+MAR);[AA, BB]= tfar_est_tfywu(ayy, N);Aml0= AA(:, :, end);B0l0= BB(:, :, end);opts= optimset('MaxIter', 300, 'MaxFunEvals', 10000);%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%end;% TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Dimensions:[MAR, LAR]= param_dim(Aml0);% Check for re_im:if(re_im=='r') Aml0= param_hermite(Aml0); Aml0= [real(Aml0(1:LAR+1, 2:end)); imag(Aml0(LAR+2:end, 2:end))];else Aml0= [real(Aml0(:, 2:end)) imag(Aml0(:, 2:end))];end;B0l0= param_hermite(B0l0);B0l0= [real(B0l0(1:LAR+1, :)); imag(B0l0(LAR+2:end, :))];% Combine the parameters:AB= [Aml0 B0l0];Pyy= real(nm_to_nk(ml_to_nm(Ayy)));%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%if(0)% TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Call fminunc:[X, lX, exitflag, output]= fminunc('tfar_llfu2', AB, opts, Pyy, re_im);%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%end;% TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Call fmincon:[X, lX, exitflag, output]= fmincon('tfar_llfu2', AB, [], [], [], [], -3*ones(size(AB)), 3*ones(size(AB)), [], opts, Pyy, re_im);% Check for re_im:if(re_im=='r') A= [[zeros(LAR, 1); 1; zeros(LAR, 1)] X(:, 1:end-1)]; A= [A(1:LAR+1, :); flipud(A(1:LAR, :))] + j*[flipud(-A(LAR+2:end, :)); zeros(1, MAR+1); A(LAR+2:end, :)];else A= [[zeros(LAR, 1); 1; zeros(LAR, 1)] X(:, 1:MAR)] + j*[zeros(2*LAR+1, 1) X(:, MAR+1:2*MAR)];endB= X(:, end);B= [B(1:LAR+1); flipud(B(1:LAR))] + j*[flipud(-B(LAR+2:end)); 0; B(LAR+2:end)];%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%if(0)% TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%param_norm([AA(:, :, end) BB(:, :, end)], [Aml B0l], 1)param_norm([A B ], [Aml B0l], 1)AA(:, :, end)-A%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%end;% TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%if(0)% TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%clear;tfpm;N = 32;MAR = 2;LAR = 2;MMA = 0;LMA = LAR;re_im= 'r';mo_no= 'm';tfpm_file_gen;%-------------beta = 1/2;B0l= Bml;MM= 20;opts= optimset('MaxIter', 300, 'MaxFunEvals', 10000, 'Diagnostics', 'off', 'Display', 'off');AMLyw= zeros(2*LAR+1, MAR+2, MM);AMLml= zeros(2*LAR+1, MAR+2, MM);Iter= [];NFun= [];EFLG= [];Psi= tf_multiwin(N, MAR, LAR, 5, 3, 1);for mm= 1:MM mm y= real(tfarma_gen(randn(N, 1), Aml, B0l, beta)); Qyy= corr_est(y, y, -1, 1/2); Ayy= fft(Qyy); Ayy= [Ayy(N/2+1:N, :); Ayy(1:N/2, :)].*conj(Psi); ayy= Ayy(N/2+1-3*LAR:N/2+1+3*LAR, N/2+1-MAR:N/2+1+MAR); [AA, BB]= tfar_est_tfywu(ayy, N); Aml0= AA(:, :, end); B0l0= BB(:, :, end); [A, B, exitflag, output]= tfar_est_mlu2(Ayy, Aml0, B0l0, re_im, opts); Iter= [Iter; output.iterations]; NFun= [NFun; output.funcCount]; EFLG= [EFLG; exitflag]; figure(1);clf;plot(Iter);drawnow figure(2);clf;plot(NFun);drawnow AMLyw(:, :, mm)= [Aml0 B0l0]; AMLml(:, :, mm)= [A B];end;[mean(Iter) mean(NFun)][Myw, Vyw, Byw]= param_mse(AMLyw, [Aml B0l])[Mml, Vml, Bml]= param_mse(AMLml, [Aml B0l])[norm(Myw) norm(Mml)]mean(AMLyw, 3)mean(AMLml, 3)sum(EFLG)%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%end;% TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -