滑动相关的原理以及用滤波器实现滑动相关(匹配滤波器捕获DMF)

滑动相关

滑动相关属于一种时域捕获方法,其具体原理是是通过本地序列与接收信号在固定窗长内滑动累加得到相关结果。
一般滑动相关算法可以用于对自相关性非常好的伪码进行同步判决。
我们首先生成一组自相关性很好的初始序列 x ( n ) x(n) x(n)
x ( n ) = e j π n 2 N , n = 1 ∼ N x(n) = e^{\frac{j\pi n^2}{N}},n=1\sim N x(n)=eNn2,n=1N
假设该信号经过信噪比为0dB的信道,得到接收信号 y ( n ) = x ( n ) + w ( n ) y(n) = x(n) + w(n) y(n)=x(n)+w(n)
二者做互相关,得到结果
R x y ( m ) = E { x n + m y n ∗ } = E { x n y n − m ∗ } R_{xy}(m) = E\{ x_{n+m}y_{n}^* \}=E\{ x_{n}y_{n-m}^* \} Rxy(m)=E{xn+myn}=E{xnynm}
在此附上互相关的自实现代码(与matlab自带的xcorr实现功能相同):

function [c,lags] = section_xcorr(x,y)
M = length(x);
N = length(y);
y = [zeros(M-1,1);y;zeros(M-1,1)];

c = zeros(M+N-1,1);
for i = 1:M+N-1
    axis_x = conj(x);
    axis_y = y(i:i+M-1);     
    c(i) = sum(axis_x.*axis_y);
end
    lags = 1:length(c);
    lags = lags - N;
    c = flip(c);
end

相关结果如下:
在这里插入图片描述

根据该相关峰进行判决,即可完成同步,找到接收序列中信号的帧头位置。

匹配滤波器捕获(DMF)

滑动相关求和累加过程与FIR滤波器相似,,因此诞生了匹配滤波器捕获(DMF)。把本地伪码当做匹配滤波器系数,数据输入滤波器,得到的滤波结果和互相关的结果大致相同。

(在硬件实现层面,例如fpga的实现。调用FIR滤波的IP core远比实现滑动相关求和累加简单得多,因此在同步算法的硬件实现层面,通常采用DMF的算法。不过如果序列过长,可以先下采样,然后对部分序列进行捕获)

滑动相关和卷积的不同在于,卷积需要对其中一个输入进行翻转,因此我们需要把本地序列做共轭翻转后再当作滤波器系数。利用fdatool工具设计滤波器
在这里插入图片描述
利用该滤波器,对接收数据进行滤波处理,得到滤波后的结果。
在这里插入图片描述
比较互相关的结果和匹配滤波的结果
在这里插入图片描述
发现二者都出现了幅度相同的峰值结果,但是出现的位置和输出结果都完全不同。这是什么原因呢?

我们将接收数据复制一份,即重复接收两次发射序列,将长度为2N的接收数据同时经过匹配滤波器和互相关。得到如下结果
在这里插入图片描述
可以看出,在两个相关峰中间的输出,滑动相关和匹配滤波的输出结果是一样的。其他地方的结果不一样主要是因为滑动相关会在数据不足的地方自动补0,而filter函数自带截尾设置,导致数据不足的地方二者输出结果不同。

总体来说,匹配滤波和滑动相关可以实现的功能是相同的。匹配滤波的优点在于捕获时间提升N倍,而缺点在于存在多普勒时捕获带宽较小,相关峰随频率衰减,漏检错检概率较大。

最后附上本仿真的主要代码:

clc;
clear;
close all;
%% 原始信号
length_seq = 1024;
seq = gen_chu_seq(length_seq); %原始数据
seq_noise = awgn([seq seq],0);
%% 设置滤波器系数
h_num = flip(conj(seq)); %用该数据设置滤波器系数
h = matched_filter;      %生成滤波器
%% 匹配滤波器效果
filter_outpiut = filter(h,[seq_noise ]);

figure();
subplot(2,1,1)
plot(abs(filter_outpiut));
hold on
plot(1024:2048,abs(filter_outpiut(1024:2048)));
axis([0,4500,0,1200])
title('匹配滤波器结果')


%% 滑动相关结果
[xcorr_output,lags] = xcorr([seq_noise ],seq);
subplot(2,1,2)
plot(abs(xcorr_output));
hold on
plot(2048:3072,abs(xcorr_output(2048:3072)));
axis([0,4500,0,1200])
title('滑动相关结果')
  • 10
    点赞
  • 42
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值