我是靠谱客的博主 单身羊,最近开发中收集的这篇文章主要介绍利用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求两个信号的延迟所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

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

评论列表共有 0 条评论

立即
投稿
返回
顶部