声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 1732|回复: 2

[编程技巧] 迭代法求时间延迟

[复制链接]
发表于 2011-11-29 16:19 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
急求各位大侠帮忙!不胜感激!
下面是公式:
   迭代公式1.bmp
其中,τ是要估计的时间延时,y1(t)y2(t)是两列信号,其中y2(t)可以看作y1(t)的延时,k表示第k个窗口,Tw表示窗口长度,w0是已知的,arg表示取后面括号里的相角,l指迭代次数。
下面是我编写的程序:
ra=JDH_pre(1:10:end,10)';
rb=JDH_post(1:10:end,10)';

rbset = buffer(rb,win_len,win_lap,'nodelay');
time=zeros(1,size(rbset,2));
%time
是指公式中的时间延迟
t_old=0;
%
迭代的初始值

for k=1:size(rbset,2);

t_start=1+(k-1)*(win_len-win_lap);

t_end=t_start+win_len-1;

if t_end>size(ra,2)

ra=[ra zeros(t_end-size(ra,2))];

end


for n=1:N


t_new=round(t_old/Ts1);

%
下面是对公式中的积分项进行的插值,用的是最近邻插值。

for i=1:win_len



if
t_end+i-1+t_new>size(ra,2)

ra_new(t_start+i-1)=ra(t_end);

else

ra_new(t_start+i-1)=ra(t_start+i-1+t_new);

end

end

raa=ra_new(t_start:t_end);

rbb=rbset(:,k)';

F=sum(raa.*conj(rbb));

F1=F.*exp(j*w0*t_new*Ts1);

if k==1

t_n(1)=0;

else

t_n(1)=time(k-1);

end

t_n(n+1)=t_n(n)-(1/w0)*angle(F1);

t_old=t_n(n+1);


end


time(k)=t_n(N+1);


end
我现在遇到的问题是:
1.
在迭代过程中,迭代的值应该是趋于一个稳定的值,但是我的迭代结果是震荡的。
Ps:最近邻插值是这样的:
a=s(kT)
b=s(kT+τ)
b=ak+[τ/T]

回复
分享到:

使用道具 举报

发表于 2011-12-28 17:46 | 显示全部楼层
回复 1 # apple0842 的帖子

是不是不收敛呢
发表于 2011-12-29 23:04 | 显示全部楼层
抱歉, 个人水平/时间有限, 仅能建议看下
5.建议提问的网友分清 编程问题 和 专业问题 http://forum.vibunion.com/thread-36746-1-1.html
6.提问的智慧!!!!(发帖前请认真阅读) http://forum.vibunion.com/thread-21991-1-1.html
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-11-18 01:59 , Processed in 0.067030 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表