添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
相关文章推荐
奋斗的烤土司  ·  react ref ...·  1 年前    · 
满身肌肉的铁链  ·  android ...·  1 年前    · 

在信号处理领域中,我们经常会用到自相关函数和互相关函数,例如利用自相关函数在语音信号处理中提取基音频率,又例如常利用互相关函数提取两接收信号之间的时间延迟。一般是用线性相关函数,但用FFT方法可快速计算线性相关和循环相关。循环相关比线性相关的计算量更小,那么是否能用循环相关获取延迟量呢?在某些情况下是可以使用的!

当相关函数的峰值结构衰减很快时,可以从循环相关中提取峰值,从而得到延迟量。

当相关函数的峰值结构衰减很慢时,就不能从循环相关中提取峰值了,从而得到延迟量。

案例1、从delaydatal.txt文件读入两通道数据,分别设为x和y。它们之间的延迟量为54个样点,以xcorr、快速线性相关和循环相关计算延迟量,比较它们的结果,程序如下:

clear all; clc; close all;
xx=load('delaydata1.txt');% 读入数据
x=xx(:,1);               % 设为x
y=xx(:,2);               % 设为y
N=length(x);             % 数据长度
[Rxy,lags]=xcorr(y,x);   % 用xcorr计算线性相关
% 快速计算线性相关
X=fft(x,2*N);            % FFT
Y=fft(y,2*N);            % FFT
Sxy=Y.*conj(X);
sxy=ifftshift(ifft(Sxy));% IFFT,调整序列排列
Cxy=sxy(2:end);          % 只取2*N-1点
subplot 211; 
line([lags],[Rxy],'color',[.6 .6 .6],'linewidth',3); hold on
plot(lags,Cxy,'k'); axis([-100 100 -50 200]);
box on; title('(a) 两种方法得到x和y的线性相关')
xlabel('样点'); ylabel('相关函数幅值')
legend('xcorr','快速线性相关','Location','northwest')
% 计算循环相关
Xc=fft(x);               % FFT
Yc=fft(y);               % FFT
Scxy=Yc.*conj(Xc);
scxy=ifftshift(ifft(Scxy));% IFFT,调整序列排列
Ccxy=scxy(2:end);        % 只取N-1点
lagc=-N/2+1:N/2-1;       % 设置延迟序列
subplot 212; plot(lagc,Ccxy,'k'); 
axis([-100 100 -50 200]); title('(b) x和y的循环相关')
xlabel('样点'); ylabel('相关函数幅值')
set(gcf,'color','w')

运行结果如下:

在本程序中用两种方法计算线性相关:用xcorr函数和FFT得到上图,可以看出这两种方法得到的相关函数很好地重叠在一起,且计算出延迟量为54个样点。而通过FFT计算得的循环相关函数,也可以看出也能很好地反映出延迟量为54个样点。

delaydatal.txt文件的数据是振动信号,周期性不强,所以可以用循环相关法提取延迟量。

案例2、从delaydata3.txt文件读入两通道数据,分别设为x和y。它们是矩形脉冲,两序列之间的延迟量为14个样点,以xcorr线性相关和循环相关计算延迟量,并比较它们的结果。程序如下:

clear all; clc; close all;
xx=load('delaydata3.txt');% 读入数据
x=xx(:,1);               % 设为x
y=xx(:,2);               % 设为y
N=length(x);             % 数据长度
fs=1000;                 % 采样频率
Xc=fft(x);               % FFT
Yc=fft(y);               % FFT
Scxy=Yc.*conj(Xc);       % 计算循环相关
scxy=ifftshift(ifft(Scxy));
Ccxy=scxy(2:end);        % 循环相关函数
lagc=-N/2+1:N/2-1;       % 延迟量刻度
subplot 211; plot(lagc,Ccxy,'k'); 
title('(a) x和y的循环相关');
xlabel('样点'); ylabel('相关函数幅值')
[Rxy,lags]=xcorr(y,x);   % 计算线性相关
%[maxr,locr]=max(Rxy);
% locr=locr-1000;
subplot 212; plot(lags,Rxy,'k');
title('(b) x和y的线性相关')
xlabel('样点'); ylabel('相关函数幅值')
set(gcf,'color','w')

运行结果如下:

从图中可看到y对x有14个样点的延迟量。用循环相关法计算得到的相关系数中有几个数值相同的峰值,不可能找最大峰值来获取延迟量;而通过线性相关仍可以观察到它们之间的延迟关系,进一步计算的话能提取到延迟量为14个样点。

通过上面2个案例得出结论:当信号是周期性的时,就不能从循环相关函数中获取延迟量,这也说明了要从循环相关函数中获取延迟量是有条件的。

实验数据下载链接如下:

https://mp.csdn.net/mp_download/manage/download/UpDetailed

https://download.csdn.net/download/qq_42233059/86406504

参考文献:MATLAB数字信号处理85个实用案例精讲——入门到进阶;宋知用(编著)

提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 信号 处理第二式—— 计算 两个序列的时间 延迟 一、 计算 二、代码实现1.非周期 信号 计算 时间 延迟 2.读入数据总结 提示:以下是本篇文章正文内容。 一、 计算 计算 两个序列的时间 延迟 通常使用如下两种算 :快速 线性相关 循环 相关 设两个有限长序列x(n),n=0,.,N-1 y(n),n=0,1…,M- 1, 相关 长度L=N+M-1 (1)快速 线性相关 实现 ①为防止 循环 卷积发生混叠,首
波束形成的基本部分是 计算 阵列元素之间波到达时间的差异。 波束形成文献主要使用两种方 : 简单几何或矢 点积。 本此介绍使用两种方 如何 计算 到达阵列元素的平面波前与任意参考点之间的时间差。 当光源被认为距阵列很远时,通常假定为平面波。 基本几何 计算 延迟 下面的左图显示了沿x轴放置的单个麦克风。 这反映了一维数组的单个元素位置(右图)。 在这种设置中,平面波到达的角度是从y轴测 的; 角度为0°是宽边平面波,角度为±90°是端射。 所有 延迟 均参考单个点(在这种情况下为轴原点)进行。
要在不增加噪声功率的情况下对 信号 求导。MATLAB® 提供的 函数 diff会放大噪声,对于高阶导数会恶化不精确性。要解决此问题,请改用微分滤波器。 分析地震时建筑物楼层的位移。找到速度 加速度作为时间的 函数 。 加载文件 earthquake。该文件包含以下变 : drift:楼层位移,以厘米为单位进行测 t:时间,以秒为单位进行测 Fs:采样率,等于 1 kHz load('earthquake.mat') .........
matlab·练习·用互 相关 估算 信号 时延值 一、题目内容 某接收机在接收一正弦 信号 s1时,发现接收到|的实际 信号 s2 延迟 了D秒。要想获得 延迟 前的 信号 ,就要求出 延迟 值,在接收到的实际 信号 后加上 延迟 值。要求:模拟产生 信号 s1 s2,并通过采取一定的算 ,估计时间 延迟 值D,并绘图显示。 提示:可令s1=sin(wt), s2=sin(w(t-D)), 给定一个具体的D值,画出正弦 信号 ,再通过算 估计D’值,将估计值D’与 给定D值进行比较,两者误差越小,算 就越好。 二、算 概述 寻找两 信号 相关 性最强时的值作
https://github.com/rtlsdrblog/kerberossdr/blob/master/_signalProcessing/hydra_signal_processor.py 这部分是最重要的部分,它里面包含几个重要的算 ,采样时间同步,相位同步,以及调用了空间谱估 计算 。 # KerberosSDR Signal Processor