資源簡介
用最小二乘法對Pisarenko算法進行分析諧波分解恢復。 可在MATLAB上仿真。

代碼片段和文件信息
function?fangzhen1_ls()
pe=6;
%生成增廣矩陣Re
M=100;
loops=20;
%pe=25;
%Re=zeros(Mpe+1);
fvMatrix=zeros(pe/2loops);
arMatrix=zeros(peloops);
for?loop=1:1:loops
%????w?=?wgn(120000);
????w?=?randn(20001);
????for?n=1:1:128
????????x(n)=(20^(1/2))*sin(2*pi*0.2*n)+(2^(1/2))*sin(2*pi*0.213*n)+w(n+50*loop);
????????%x(n)=(20^(1/2))*sin(2*pi*0.2*n);
????end
????Rxx=xcorr(x‘unbiased‘);
????for?i=1:1:M
????????for?j=1:1:pe+1
????????????Re(ij)=Rxx(pe+i+1-j+128);
????????end
????end
????kk=pe;
????%最小二乘法估計ARMA模型的參數
????b=-1*Re(:[1]);
????A=Re(:[2:1:kk+1]);
????%ar_lsline=(A‘*A)\(A‘*b);
????ar_lsline=inv(A‘*A)*A‘*b;
????arMatrix(:loop)=ar_lsline;
????
????%求諧波頻率
????for?j=2:1:kk+1
????????fc(j)?=?ar_lsline(j-1);
????end
????fc(1)?=?1;
????fz=roots(fc);
????count=1;
????for?j=1:2:kk
????????fw(count)=atan(imag(fz(j))/real((fz(j))));
????????fv(count)=fw(count)/(2*pi);
????????count=count+1;
????end
????fv=abs(fv);
????fv=sort(fv);
????fvMatrix(:loop)=fv‘;
end
%分別求AR參數估計和頻率估計的均值和方差
arMatrix
ar_mean?=?mean(arMatrix‘)‘
ar_var?=?var(arMatrix‘)‘
fvMatrix
fv_mean?=?mean(fvMatrix‘)‘
fv_var?=?var(fvMatrix‘)‘
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件????????1215??2004-10-12?11:23??pisarenko_ls.m
- 上一篇:MATLAB平面桿系程序
- 下一篇:基于Matlab的聲音信號采集與分析處理
評論
共有 條評論