基于prony算法的参数辨识算法的仿真——简化版

基于prony算法的参数辨识算法的仿真的详细版欢迎订阅本博:

https://blog.csdn.net/ccsss22/article/details/115358232

1.问题描述:

 建立如下被测信号:

被测信号中包含四个振荡模态,在数据窗宽度同样为10s的前提下,利用不同的采样频率做普罗尼计算。 

2.部分程序:
 
function X = func_Prony(Signal,dt);

s     = Signal; 
L     = length(s(1:length(Signal))); 
Order = ceil(L/2); 
R     = []; 
K1    = 0;   
K2    = 0; 

%扩展矩阵 
while K1 <= Order 
    K2  = 1; 
    Re = []; 
    while K2 <= Order 
        u  = Order - K2 +1; 
        v  = L - K2; 
        m  = Order - K1 +1; 
        l  = L - K1; 
        r  = sum(s(u:v).*conj(s(m:l))); 
        Re = [Re,r]; 
        K2  = K2 + 1; 
    end 
    R = [R,Re']; 
    K1 = K1 + 1; 
end 

%计算阶数 
Order = func_Order(R); 

%计算相关参数
K2 = Order-1; 
Re = R(2:end,2:K2+1); 
b  = R(:,1); 
b  = b(2:end); 
a  = pinv(Re)*(-b); 

R1 = R(1,:); 
R1 = R1(1:K2+1); 
a1 = [1 a']; 

Ep = sum(R1.*a1); 
P  = [1 a']; 
z  = roots(P); 

%估计序列X 
ks    = 1:K2; 
X(ks) = s(ks); 

for Order = K2+1 : L 
    Lij      = 1:K2; 
    X(Order) = sum(-a'.*s(Order-Lij)); 
    Order    = Order+1; 
end 

Zh = []; 
for mm = 0:L-1 
    Zh = [Zh,z.^mm]; 
end 

Z    = Zh'; 
Z    = conj(Z); 
Zhh  = Z'; 
b    = (Zhh*Z)^(-1)*Zhh*X'; 
%最后得到的四个参数值
A     = abs(b)
f     = angle(z)/2/pi/0.001
a     = log(abs(z))/dt
theta = angle(b)/2/pi/dt


 

3.仿真结论:
       注意,这里论文中你所给的那个公式,貌似有点小错误,这里我们使用了两组公式进行计算,一组是你所提供的公式,一组是我们给的测试数据。

       仿真结果如下所示:

A-27-6
 

  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

fpga和matlab

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值