资源简介
程序详细的描述了prony算法的流程,给出了较为通俗易懂的程序,希望对大家有帮助!
代码片段和文件信息
%打开指定文件,并对信号进行Pon分析计算
function [M Amp Fre damp Pha main_f main_damp x xc y Amp_Response er all N dt]=x_svdprony(x_in dt fL showfigure)
format long;
x_in=[0.1999 0.1953 0.1898 0.1839 0.1768 0.1727 0.1684 0.1665 0.1664 0.1664 0.1663];
x = x_in‘
cpu=cputime;
N=size(x1);
%取N/2的整数部分为初始的P
P=floor(N/2);
%去直流环节
x_Sum = 0;
for i=1:N
x_Sum = x_Sum + x(i);
end
x_av = x_Sum / N;
if x_av > 10E-10
for i=1:N
x(i) = x(i) - x_av;
end
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%滤波环节
%fL=1;
fL=2;
if fL>1
for i=fL+1:N
x(i-fL)=0;
for j=1:fL
x(i-fL) = x(i-fL)+(1/fL)*x(i-j+1);
end
end
end
N=N-fL;
tt=0:1:N-1;
%P要求为偶数
if mod(P 2) ~= 0
P = P - 1;
end
P1=P;
if mod(P 2) == 0
% Generate R,生成样本矩阵
for i=1:P1
for j=1:P1+1
ss=0;
for k=P1:N-1
%前向预测误差
ss=ss+x(k+2-j1)*x(k+1-i1);
%后向预测误差
%ss=ss+x(k+1-P1+i)*x(k+1-P1-1+j);
%同时考虑双向误差
%ss=ss+x(k+2-j1)*x(k+1-i1)+x(k+1-P1+i)*x(k+1-P1-1+j);
end
R(ij)=ss;
end
end
% divide R into R1 and R2 and get A; R1*A=R2;
for i=1:P
for j=1:P
R1(ij)=R(ij+1);
end
end
for i=1:P
R2(i)=R(i1);
end
%添加的代码,使用SVD-TLS算法%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%首先进行SVD分解
[usv]=svd(R1);
%根据奇异值确定实际的阶数M
M=0;
%计算全部奇异值的均方和
Sum_SVD=0;
for i=1:P
Sum_SVD = Sum_SVD+s(ii)^2;
end
cur_sum = 0;
i=1;
while 1 - sqrt(cur_sum/Sum_SVD) > 0.000001 & i<=P
cur_sum = cur_sum + s(ii)^2;
M = M + 1;
i = i + 1;
end
%输出预测的阶数M
M;
%生成Sp矩阵
Sp=zeros(M+1 M+1);
for j=1:M
for i=1:(P-1)-M+1
Sp = Sp+s(jj)^2*v(i:i+Mj)*v(i:i+Mj)‘;
end
end
%根据公式生成最佳最小二乘解
Sp_inv=inv(Sp);
if isinf(Sp_inv(11)) == 1
Sp_inv = pinv(Sp);
end
a_SVD = Sp_inv(1+1:M+1 1)/Sp_inv(11);
P = M;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Get Zi
cof_SVD(1)=1;
for i=1:M
cof_SVD(i+1)=a_SVD(i);
end
Z=roots(cof_SVD);
% Get yy should be very close to x
for i=1:P
y(i)=x(i);
end
for i=P+1:N
y(i)=0;
end
for i=P+1:N
for j=1:P
y(i)=y(i)-a_SVD(j)*x(i-j);
end
end
% Get B
for i=1:N
for j=1:P
Fy(ij)=Z(j)^(i-1);
end
end
Fz=Fy‘;
FH=Fy‘*Fy;
Fn=inv(FH);
B = inv(Fy‘*Fy)*Fy‘*y‘;
% Calculate Amplitude Phasor Frequency and damp
dt=0.01;
for i=1:P
Amp(i)=abs(B
- 上一篇:蚁群算法论文+源代码
- 下一篇:分数阶chen混沌matlab程序
相关资源
- 蚁群算法论文+源代码
- 基于粒子群算法的非合作博弈的matl
- 协同进化遗传算法求解函数优化问题
- pri传统分选算法
- 基于RSSI的VIRE定位算法
- 相关向量机的快速算法
- Gardner_for _MPSK(PSK的符号同步算法)
- 粒子群算法优化pid源码 matlab仿真.ra
- 系数绝对值最大 图像融合MATLAB算法
- 灰度共生矩阵特征值不错的算法
- MATLAB烟花算法源代码
- lvq学习算法源码matlab
- EMD 算法MATLAB 程序
- 增广拉格朗日法.zip
- 世上最牛的23个图像跟踪算法MATLAB程序
- matlab2007B数模乘公交看奥运_搜索法+
- Norden E.Huang的FEEMD算法
- 基于遗传算法的旅游全国的路径最优
- 密钥生成CQG量化
- 密钥生成CQ量化
- dijkstra算法改进的matlab程序能求出两点
- 基于OFDMA系统的多用户资源分配算法,
- 基于遗传算法的机器人路径规划matl
- 基于FPGA分布式算法FIR滤波器verilog代码
- 自动寻峰谷算法matlab实现
- AR模型算法的matlab实现和实验分析
- Dijkstra最短路径算法的Matlab实现
- 多种群遗传算法的函数优化算法(源
- 随机梯度下降算法的MATLAB实现
- 数模美赛常用模型算法matlab程序包+数
评论
共有 条评论