概述
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求两个信号的延迟所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复