复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17fs=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)))
复制代码
1
2ans = 3
可以求出两个正弦信号的延迟为3个采样间隔。
貌似xcorr函数只能求整数延迟,我在一个项目中需要求分数时延,我的思路是将信号插值n倍,再将时延结果缩小1/n。
部分代码如下:
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16x=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求两个信号内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复