Harbin Institute of Technology匹配滤波器实验报告课程名称:信号检测理论院系:电子与信息工程学院姓名:高亚豪学号:14SD05003授课教师:郑薇哈尔滨工业大学1. 实验目的通过Matlab 编程实现对白噪声条件下的匹配滤波器的仿真,从而加深对匹配滤波器及其实现过程的理解。
通过观察输入输出信号波形及频谱图,对匹配处理有一个更加直观的理解,同时验证匹配滤波器具有时间上的适应性。
2. 实验原理对于一个观测信号()r t ,已知它或是干扰与噪声之和,或是单纯的干扰,即0()()()()a u t n t r t n t +⎧=⎨⎩这里()r t ,()u t ,()n t 都是复包络,其中0a 是信号的复幅度,()u t 是确知的归一化信号的复包络,它们满足如下条件。
2|()|d 1u t t +∞-∞=⎰201||2a E = 其中E 为信号的能量。
()n t 是干扰的均值为0,方差为0N 的白噪声干扰。
使该信号通过一个线性滤波系统,有效地滤除干扰,使输出信号的信噪比在某一时刻0t 达到最大,以便判断信号的有无。
该线性系统即为匹配滤波器。
以()h t 代表系统的脉冲响应,则在信号存在的条件下,滤波器的输出为00()()()d ()()d ()()d y t r t h a u t h n t h τττττττττ+∞+∞+∞=-=-+-⎰⎰⎰右边的第一项和第二项分别为滤波器输出的信号成分和噪声成分,即00()()()d x t a u t h τττ+∞=-⎰()()()d t n t h ϕτττ+∞=-⎰则输出噪声成分的平均功率(统计平均)为220E[|()|]=E[|()()d |]t n t h ϕτττ+∞-⎰**00*00200=E[()(')]()(')d d '=2()(')(')d d '2|()|d n t n t h h N h h N h ττττττδττττττττ+∞+∞+∞+∞+∞---=⎰⎰⎰⎰⎰而信号成分在0t 时刻的峰值功率为2220000|()||||()()d |x t a u t h τττ+∞=-⎰输出信号在0t 时刻的总功率为22000E[|()|]E[|()()|]y t x t t ϕ=+22**0000002200E[|()||()|()()()()]|()|E[|()|]x t t x t t t x t x t t ϕϕϕϕ=+++=+上式中输出噪声成分的期望值为0,即0E[()]0t ϕ=,因此输出信号的功率成分中只包含信号功率和噪声功率。
则该滤波器的输出信噪比为222000022000|||()()d ||()|E[|()|]2|()|d a u t h x t t N h τττρϕττ+∞+∞-==⎰⎰根据Schwartz 不等式有222000|()()d ||()|d |()|d u t h u t h τττττττ+∞+∞+∞-≤-⎰⎰⎰当且仅当*0()()h cu t ττ=-时等号成立,其中c 为任意非零复常数。
此时获得最大信噪比,即22000|||()|d 2m a u t N ττρ+∞-=⎰对该式进行0t t τ=-的变量置换,得到220|()|d |()|d t u t u t t ττ+∞-∞-=⎰⎰因此,()u t 只有在0t t =时刻之前结束,才能使信噪比达到最大值。
即观察时刻0t 需设置在输入信号结束之后,此时022|()|d |()|d 1t u t t u t t +∞-∞-∞==⎰⎰。
则最大信噪比为2000||2m a EN N ρ==综上所述,匹配滤波器的单位冲激响应为*0()()m h cu t ττ=-,对其进行傅里叶变换得到它的频率响应为0j2*()()e ft m H f cU f π-=,其中()U f 输入信号()u t 傅里叶变换。
从匹配滤波器的频率响应可以看出,滤波处理不仅对信号的幅度进行了匹配,使输入信号较强的频率成分得到较大的加权,而且将输入信号的非线性相位补偿掉,使输出信号具有线性相位。
3. 实验步骤(1)设定采样频率、噪声功率等仿真参数,产生输入信号的波形()u t 。
(2)根据()u t 得到匹配滤波器的单位冲激响应()h t 。
u t及其延迟叠加构成,即输入信号中存在两个回(3)生成输入信号,它有()波。
(4)对输入信号和单位脉冲响应分别进行N点FFT,其中N不小于输入信号和冲激响应的点数之和,将它们的结果相乘,在进行FFT的逆变换,得到滤波器的输出信号。
(5)生成输出信号的波形图即频谱图。
检测输出信号的两个峰值,将它们出现的时间与理论值比较,验证滤波器在时间上的适应性。
4.实验结果与分析本实验中采用的仿真参数如下:采样频率为100KHz,载波频率为2KHz,信号脉冲宽度为0.015s,第二个回波信号延迟为0.025s。
首先,在无噪声干扰的条件下,将有限时间的正弦信号及其延迟输入匹配滤波器,得到各部分仿真波形如下所示:τ=,与仿真设定值相等。
计算得到的延迟结果为0.025s从图像中可以看出,匹配滤波器的输出有两个峰值,分别对应两个输入信号结束的时刻,且它们之间的时间间隔等于输入信号的延迟时间,验证了匹配滤波器具有时间上的适应性。
即当信号存在延迟时,不需要改变滤波器的形式,只需将观察时刻延迟相应的时间即可。
输出信号的幅度谱与输入信号相比,有了更强的对比度,即在较大的频率分量上得到了较大加权,并且输出信号具有线性相位,验证了匹配处理对输入信号进行了幅度匹配和相位匹配。
在有噪声干扰的条件下,仿真得到的结果如下所示,其中噪声平均功率为0.3:τ=。
其中滤波器的频率响应与上面的相同,计算得到的延迟结果为0.025s在此不再列出。
以上结果说明在该噪声环境下仍能够实现信号的匹配滤波。
只是输出信号的相位不再是线性的,这是由于滤波器无法对噪声的相位进行补偿。
仍在该噪声条件下,将输入信号改为线性调频信号,得到的仿真结果为:其它条件不变,只将输入信号改为m序列的二相编码,其码元速率为2Kb/s,伪码周期为31,得到如下结果:可见,当改变信号波形时,进行相应的匹配滤波可以得到相似的结果,与理论推导结果一致,从而验证了匹配滤波器的幅度和相位匹配特性,以及时间适应性。
5.实验仿真程序clear all;close all;clc;%仿真参数设定fs = 1e5; %采样频率100kHzA = 0.3; %设置噪声平均功率fo = 2e3; %载波频率2kHzTo = 0.015; %调制脉冲长度0.015sts = 1 / fs; %采样周期td = 0.01; %第二个回波的延时%df = 1e4; %线性调频信号频率变化率%rb = 2e3; %二相编码的码元速率tu = 0 : ts : (To - ts);% mseq = m_sequence([0, 0, 1, 0, 1], 1);% [u, tu] = wave(mseq, fs, rb); %m序列二相编码%u = cos(2 * pi * (fo + df * tu) .* tu); %线性调频信号u = cos(2 * pi * fo * tu); %回波信号为正弦信号h = fliplr(u); %匹配滤波器单位脉冲响应x = [u, zeros(1, fix(td / ts)), u] + A * randn(1, 2 * size(u, 2) + fix(td / ts)); N1 = size(x, 2);N2 = size(h, 2);M = N1 + N2 - 1; %傅里叶变换的点数X = fft(x, M);H = fft(h, M);Y = X .* H;y = ifft(Y, M);[C, I1] = max(y);y1 = y;y1(I1 - 10 : I1 + 10) = 0;[C, I2] = max(y1);tao = ts * abs(I1 - I2)%仿真图像t = 0 : ts : ts * (M - 1);figure(1);tx = 0 : ts : ts * (N1 - 1);plot(tx, x);axis([0, 0.045, -2, 2]);title('匹配滤波器输入信号波形(两个回波)');xlabel('时间/s');ylabel('幅度/V');figure(2);fd = fs / M;f = 0 : fd : (fs - fd);subplot(2, 1, 1);plot(f, abs(H));title('匹配滤波器幅频响应');xlabel('频率/Hz');ylabel('幅度');subplot(2, 1, 2);plot(f, angle(H));title('匹配滤波器相频响应');xlabel('频率/Hz');ylabel('角度/rad');figure(3);plot(t, y);title('匹配滤波器输出');xlabel('时间/s');ylabel('幅度/V');figure(4);subplot(2, 1, 1);plot(f, abs(X));title('输入信号与输出信号的幅频特性比较');xlabel('频率/Hz');ylabel('幅度');subplot(2, 1, 2);plot(f, abs(Y));xlabel('频率/Hz');ylabel('幅度');figure(5);subplot(2, 1, 1);plot(f, angle(X));title('输入信号与输出信号的相频特性比较');xlabel('频率/Hz');ylabel('角度/rad');subplot(2, 1, 2);plot(f, angle(Y));xlabel('频率/Hz');ylabel('角度/rad');%产生m序列function mseq = m_sequence(fbconnection, period)n = length(fbconnection);N = 2^n - 1; %m序列的长度for k = 1 : periodregister = [zeros(1,n - 1) 1]; %定义移位寄存器的初始状态mseq(1 + N * (k - 1)) = register(n); %m序列的第一个输出码元for i = 2 + (N * (k - 1)) : (N * k)newregister(1) = mod(sum(fbconnection.*register),2);for j = 2 : nnewregister(j) = register(j-1);end;register = newregister; %移位后的寄存器mseq(i) = register(n); %新的寄存器输出endend%对m序列进行二相编码function [y, t] = wave(code, fs, rb)T = fs / rb;N = length(code);for i = 1 : N;if code(i) == 1;for j = 1 : T;y(T * (i - 1) + j) = 1;endendif code(i) == 0;for j = 1 : T;y(T * (i - 1) + j) = -1;endendendy = [y, y(T * N)];t = 0 : (1 / fs) : (N / rb);。