赞
踩
一、实验的背景和意义
广义相关时延估计方法:相关法是最经典的时延估计方法,通过信号的自相关函数滞后的峰值估计信号之间延迟的时间差。但是对噪声的处理不好。目前改进的算法有:
1.广义加权相关时延估计(GCC):主要是提高了信噪比。相关函数和功率谱密度函数是一对傅里叶变换对,在频域利用不同的加权函数对功率谱密度函数进行处理,从而实现信号的预白处理,即增强信噪比。
2.广义相位谱时延估计:时延D通过傅里叶变换在频域上表现为功率谱密度函数的相位函数。theta(f)=-2πfD。同GCC一样,可以使用相位加权函数在频域实现相位谱时延估计。
3.自适应时延估计:通过牺牲计算速度来降低对信号和噪声统计先验知识的要求。LMS算法是通过权矢量的迭代将问题转化为滤波器的参数估计问题,以两信号的最小均方误差为准则进行时延估计。ETDE算法是一种带约束的时延估计方法,滤波器采用N阶插值运算,直接用瞬时时延估值代替滤波器权系数进行迭代,减小了计算量。
…………………………………………………………………………………………………………………
二、实验目标和内容
采用广义相关时延估计方法,首先对信号进行延时,再加入噪声,通过信号的自相关函数滞后的峰值估计信号之间延迟的时间差。
…………………………………………………………………………………………………………………
1.信号延迟
在实际matlab仿真中,我们往往要实现信号的空间传播等等,这些实际上在不考虑信号的自由空间损耗的情况下,可以把空间传播看成一种信号的时延表示。基于信号傅里叶变换时移特性——信号发生时移,其频域的幅度谱不发生变化,变的是相位谱,利用Matlab产生一段信号。本次实验设定信号时长为1秒,采样频率为1000,实现对一个宽度为0.1的距离门信号进行0.1s的时延。处理时域步骤如下:
信号在matlab中就是一个数组的形式表示,我们在matlab中对信号进行时延操作其实就是对信号数组进行操作,使用插零法实现信号延迟。
由 时延点数=时延×采样频率,在原数组前面添加采样点数个0,原信号数组长度变为 原长度+时延点数,取数组原信号长度个数。即:信号时长1s,采样频率1000,则信号数组长度为1000(1×1000),时延0.1s,则需要在原信号数组前加上100(0.1×1000)个0,然后此时信号数组变为1100,与之前的信号数组长度不同,所以取前1000个赋值给一个变量,就相当于将原来的信号右移延迟。
2.信号加噪声
利用y = awgn(x,snr)将白高斯噪声添加到向量信号x中。标量snr指定了每一个采样点信号与噪声的比率,单位为dB。
3.基本互相关时延估计
由于源距离接收阵一定距离且方向非垂直,两个阵元间由于声程差必然存在到达时延差。设两个接收信号分别为x1和x2:
x1(t)=s(t)+n1(t) x2(t)=s(t-D)+n2(t) |
时延估计即估计其中的D值。
时延估计中常使用最大似然估计,因为其在这里具有无偏、有效和一致性三大性质。而时延估计的最大似然估计经过推导可以发现其是一个相关器。对于互相关函数,其定义为:
理论上在时刻D时,两阵元信号相似度最高,此时是相关器峰值位置。对两路信号作互相关之后再进行峰值检测即可得到时延D。
y=real(xcorr(s2,s1)); y=y(abs(length(s1)-length(2)+1):end);%消除xcorr函数自动补零的影响 ty=(0:length(y)-1)/fs; figure plot(ty,real(y)); [m1,ND1]=max(real(y)); delay1=(ND1-length(s1)-1)/fs; |
因此,基本互相关求时延的缺点为基本互相关的峰值不够尖锐,周围旁瓣或者噪声幅值很大,当信噪比下降时时延估计成功率明显下降。同时时延估计精度受采样率的影响也很大,当采样率不够高时,相关峰值可能位于两次采样点之间,从而漏掉峰值,精度受限。
本次实验完整Matlab实现如下:
%对原始信号做延时 fs = 1000; gentime = 1; t = (0:1:gentime*fs-1)/fs; y1 = rectpuls(t-0.2,0.1); figure; subplot(411);plot(t,y1);legend('原信号'); delayNum = 0.1*fs; y2 = [zeros(1,delayNum) y1]; y2 = y2(1:length(t)); subplot(412);plot(t,y2);legend('延迟信号'); % 信噪比和信号指定功率 snr=20; px_dBW=0; % 调用awgn函数直接计算 h1=awgn(y1,snr,px_dBW); subplot(4,1,3);plot(t,h1);legend('原始信号加噪声'); % 调用randn函数产生噪声序列再叠加 pn_W=10^((px_dBW-snr)/10); n=sqrt(pn_W)*randn(1,length(y2)); h2=y2+n; subplot(4,1,4);plot(t,h2);legend('延迟信号加噪声'); %计算互相关函数 [corr,lag]=xcorr(y1,h2); % 找到延迟 [~,I] = max(abs(corr)); delay = lag(I); delay_time = delay/fs; % 延迟时间 % 显示结果 fprintf('Delay between y1 and h2 is %f seconds.', delay_time); % 绘制互相关函数图像 figure; subplot(2,1,1); plot(t, y1, 'b', t, h2, 'r'); xlabel('时间(s)'); ylabel('波幅'); title('原始信号'); legend('原始信号y1', '加噪声的延迟信号h2'); subplot(2,1,2); plot(lag, corr); xlabel('延迟'); ylabel('相关'); title('原始信号y1和加噪声的延迟信号h2的互相关'); |
如下图所示,信号时长为1秒,采样频率为1000,实现对一个宽度为0.1的距离门信号进行0.1s的时延并加入高斯白噪声。
如下图所示,可以观察到信号加噪声后的时延仍为1s,通过互相关计算,也为1s。
…………………………………………………………………………………………………………………
五、实验结论:
………………………………………………………………………………………………………………………………………………………
MATLAB中有丰富的图形处理能力,提供了绘制各种图形、图像数据的函数。他提供了一组绘制二维和三维曲线的函数,他们还可以对图形进行旋转、缩放等操作。MATLAB内部还包含丰富的数学函数和数据类型,使用方便且功能非常强大。通过对MATLAB的系统环境,数据的各种运算,矩阵的分析和处理,程序设计,绘图,数值计算及符号运算的学习,初步掌握了MATLAB的实用方法。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。