一个匹配滤波器的设计
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
m
| a0 | 2 2N 0
0
| u (t 0 ) | 2 d
E* N0
满足上述公式的线性滤波器称为匹配滤波器,匹配滤波器的脉冲函数为:
hm ( ) cu * (t0 )
那么,在 t 0 前后对于输入的信号都会有一个响应信号,对于某一个时刻,响 应会达到最大即峰值, 对这个响应进行分析就可以得到信号发生的具体时间和位 置。
r( n ) u ( n) 1
编程得所示波形如图 2:
图 2 理想条件下匹配滤波器输出波形图
由图 2 可看出,峰值点出现在第 49 点处,第 49 点是输入信号结束的位置, 满足匹配滤波器输出的峰值点在全部信号都输入之后才出现这一规律。 2.2.2 有延迟的情况 输入信号延迟 6 点时有如图 3 所示:
4.2 匹配滤波
function [x_result,num] = correlate(qpsk,h0) [time0,time1] = size(qpsk); [time_0,time_1] = size(h0); for n=0:(time_0-1) h1(n+1,1) = h0(time_0-n,1); %conj(u(49-t)) end num = time0 + time_0 -1; for i = 0:(time+time_0 - 2) x_result(i+1,1) = c0(qpsk,h1,time0,time_0,i); end end function xcorr_result = c0(qpsk,h1,tme0,time_0,t2) xcorr_result = 0; if(t2 < time0) if(t2 < time_0) for n0 = 0:t2 xcorr_result = xcorr_result + qpsk(t2+1-n0,1)*h1(n0+1,1); end else% for m = 0:(time0-1) qpsk1(m+1,1) = qpsk(time0-m,1); end for n_0 = 0:(time_0 -1) xcorr_result = xcorr_result + qpsk1(time0 - t2 + n_0)*h1(n_0 + 1,1); end end else if(t0 <= time_0) for n1 = (t2 - time0 + 1) : (time0-1) xcorr_result = xcorr_result + qpsk1(t2+1-n1,1)*h1(n1+1,1); end else% for n1 = (t2 - time0 + 1):(t_0-1) xcorr_result = xcorr_result + qpsk1(t2+1-n1,1)*h1(n1+1,1);% end end%
0
由 Schwartz 不等式,有
| u(t 0 )h( )d | 2 | u(t 0 ) | 2 d | h( ) | 2 d
0 0 0
当 h( ) hm ( ) cu * (t 0 ) 时等号成立,这时,滤波器有最大的输出信噪比:
图 3 输入信号延迟 6 点匹配滤波后的输出结果
由图 3 可看出,前 6 点输出为 0,峰值点在第 55 点出。对图 3 而言,在输入序 列前 6 点内,只有输入的 0 与脉冲序列对应上,输出结果为 0;当输入序列与脉 冲函数完全对齐时才有峰值出现,输入序列延迟了 6 点,故只能是在 55 是才能 满足入序列与脉冲函数完全对齐的情况,故此时的峰值点出现在第 55 点处。
end end
4.3 激励
RandomNum=randi([0,1],2*50,1); SeriesToParallel=s2p(RandomNum,2); qpsk0=bitmap_qpsk(SeriesToParallel); for n=1:50 qpsk1(n,1) = qpsk0(n); end con = conj(qpsk1);%conj(u(t)) N = 6; delay0 = zeros(N,1); delay1 = zeros(2*N,1); behind = zeros(N,1); qpsk1_delay0 = [delay0; qpsk1]; qpsk1_delay1 = [delay1;qpsk1]; qpsk1_delay0_0= [qpsk1_delay0;behind]; noise = randn(50+2*N,1); for n = 1:50 qpsk1_n(n,1) = qpsk1(n,1) + noise(n,1); end for n = 1:(50+N) qpsk1_delay(n,1) = qpsk1_delay0(n,1) + noise(n,1); end for n = 1:(50+2*N) qpsk1_delay_n(n,1) = 0.1*qpsk1_delay0_0(n,1) + 0.9*qpsk1_delay1(n,1) + noise(n,1); qpsk1_delay_nn(n,1) = 0.5*qpsk1_delay0_0(n,1) + 0.5*qpsk1_delay1(n,1); end %[x_result,num] = correlate(pss_delay,conj(qpsk_delay)); %[x_result,num] = correlate(qpsk1_n,con); % 加有白噪声 %[x_result,num] = correlate(pss,h0); %[x_result,num] = correlate(qpsk1_delay,con); %延迟为 6 且加有白噪声 %[x_result,num] = correlate(qpsk1_delay0,con); % 延迟为 6 %x_r = xcorr(qpsk_delay,100); %pss_delay = [delay;qpsk]; %[x_result,num] = correlate(qpsk_delay,conj(qpsk_delay)); %[x_result,num] = correlate(qpsk1,h0); %x_r = xcorr(qpsk_delay,100); x=0:num-1; %subplot(2,2,1);
stem(x,abs(x_result)); %plot(x,abs(x_result)); xlabel('相关点数'); ylabe源自文库('幅值');
二、匹配滤波器设计
2.1 匹配滤波器脉冲函数
设计相应的匹配滤波器的脉冲函数:
hm(m ) cuu* ( 4 9m
那么经匹配滤波器后的输出序列为:
)
y(n )
其中 r (n) 为输入信号。
m 0
r(n
49
m )hm(m )
2.2 无噪声条件下的匹配滤波
2.2.1 无延迟的情况 此时设滤波器的输入信号为:
| x(t 0 ) | 2 | a0 || u(t 0 )h( )d | 2
0
那么滤波器道德输出信噪比可以表示为:
| a0 | 2 | u ( t 0 )h( ) | 2 | x(t 0 ) | 2 0 2 E[| (t ) | ] 2 N 0 | h( ) | 2 d
r (t ) * h(t )
图 1 线性滤波器
其中 h(t ) 为该线性滤波器的脉冲函数,由线性系统理论,该滤波器的输出为:
y(t ) r (t )h( )d
0
a0 u(t )h( )d n(t )h( )d
0 0
令
x(t ) a0 u(t )h( )d
2.3 加有白噪声的匹配滤波
对输入信号加一白噪声时,此时滤波器的输入信号如公式:
r( n ) u ( n ) 1
n( n )
2.3.1 无延迟的情况 其中 n(n )为均值为 0,方差为 1 的白噪声,输入信号经此匹配滤波器后的 输出结果如图 4 所示:
图 4 加上白噪声无延迟后的输出结果
因为白噪声与滤波器不匹配,所以白噪声经滤波器后的输出结果赋值很小, 叠加到有用信号上对有用信号的输出幅值影响很小,从图 4 可看出,峰值点位置 没有变化,只是峰值稍微有一些变化。所以在有一定噪声存在的情况下,用匹配 滤波法还是可以检测出有用信号的。 2.3.2 有延迟的情况 在此基础上,对信号加入 6 点的延迟,得波形图 5:
一个匹配滤波器的设计
一、基本理论
1.1 匹配滤波器理论基础
通常情况下接收机即滤波器收到的信号是发送信号和外界的干扰信号混合 而成的,用公式表示为:
r( t ) A u ( t )
其中 A 为信号的复幅度, n(t ) 为参杂的噪声。 一线性滤波器的模型如图 1 所示:
n ( t)
r (t )
线性滤波器 h (t )
0
(t ) n(t )h( )d
0
其中 x(t ) 表示有用信号经滤波器的输出部分, (t ) 为噪声经滤波器输出部分。在 任意 t 时刻,输出噪声的平均功率可正比于:
E[| (t ) | 2 ] 2 N 0 | h( ) | 2 d
0
有用信号在 t t 0 的峰值功率正比于:
图 5 加上白噪声有延迟后的输出结果
三、 小结
匹配滤波实质利用信号自身的相关性来检测信号, 通过观察峰值点的位置可 以确定出信号的延迟、 起始位置等信息,匹配滤波器的这种性质可以应用于信号 的同步当中。
四、程序源代码
4.1 信号源
function c=bitmap_qpsk(m) colum=numel(m(1,:)); row=numel(m(:,1)); dec=[]; c=[]; a=1./sqrt(2); b=-1./sqrt(2); if row~=2 disp('wrong !!!') else for k=1:colum dec(k)=m(2,k).*2+m(1,k); end for k=1:colum switch dec(k) case 0 c(k)=a+a.*1i; case 1 c(k)=a+b.*1i; case 2 c(k)=b+a.*1i; case 3 c(k)=b+b.*1i; otherwise disp('input is wrong') end end end