我是靠谱客的博主 单身羊,这篇文章主要介绍利用matlab求两个信号的延迟,现在分享给大家,希望可以做个参考。

fs=10e4;
T=1/fs;
L=1000;
t=(0:L-1)*T;
f0=10e3;
x=sin(2*pi*f0*t);
y=x(100:200);
z=x(103:203);
%delay=xcorr(y,y,'coeff');
[delay,zuobiao]=xcorr(y,z,'coeff');
figure(1)
plot(y);
hold on
plot(z);
figure(2)
stem(zuobiao,delay)
zuobiao(find(delay==max(delay)))

ans =
3

可以求出两个正弦信号的延迟为3个采样间隔。

貌似xcorr函数只能求整数延迟,我在一个项目中需要求分数时延,我的思路是将信号插值n倍,再将时延结果缩小1/n。

部分代码如下:

x=1:4900;
xi=x(1):(x(2)-x(1))/10:x(end);
in=src_data(x);
out=delay_data(x);
delay_data_10=interp1(x,out,xi);
src_data_10=interp1(x,in,xi);
figure(2)
plot(src_data_10/max(src_data));
hold on
plot(delay_data_10/max(delay_data));
%%自相关函数
[delay,zuobiao]=xcorr(src_data_10,delay_data_10,'coeff');
figure(3)
stem(zuobiao,delay)
%延迟
zuobiao(find(delay==max(delay)))

其中interp1是插值函数,详见help文档。

最后

以上就是单身羊最近收集整理的关于利用matlab求两个信号的延迟的全部内容,更多相关利用matlab求两个信号内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(133)

评论列表共有 0 条评论

立即
投稿
返回
顶部