滑动相关的原理以及用滤波器实现滑动相关(匹配滤波器捕获DMF)
目录
- 滑动相关
- 匹配滤波器捕获(DMF)
滑动相关
滑动相关属于一种时域捕获方法,其具体原理是是通过本地序列与接收信号在固定窗长内滑动累加得到相关结果。
一般滑动相关算法可以用于对自相关性非常好的伪码进行同步判决。
我们首先生成一组自相关性很好的初始序列x(n)x(n)x(n)
x(n)=ejπn2N,n=1∼Nx(n) = e^{\frac{j\pi n^2}{N}},n=1\sim Nx(n)=eNjπn2,n=1∼N
假设该信号经过信噪比为0dB的信道,得到接收信号y(n)=x(n)+w(n)y(n) = x(n) + w(n)y(n)=x(n)+w(n)
二者做互相关,得到结果
Rxy(m)=E{xn+myn∗}=E{xnyn−m∗}R_{xy}(m) = E\{ x_{n+m}y_{n}^* \}=E\{ x_{n}y_{n-m}^* \}Rxy(m)=E{xn+myn∗}=E{xnyn−m∗}
在此附上互相关的自实现代码(与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-1axis_x = conj(x);axis_y = y(i:i+M-1); c(i) = mean(axis_x.*axis_y);
endlags = 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('滑动相关结果')
相关文章:
滑动相关的原理以及用滤波器实现滑动相关(匹配滤波器捕获DMF)
目录滑动相关匹配滤波器捕获(DMF)滑动相关 滑动相关属于一种时域捕获方法,其具体原理是是通过本地序列与接收信号在固定窗长内滑动累加得到相关结果。 一般滑动相关算法可以用于对自相关性非常好的伪码进行同步判决。 我们首先生成一组自相关…...
计算机网络笔记(三)—— 数据链路层
数据链路层概述 数据链路层以帧为单位传输数据。 封装成帧:给网络层提供的协议数据单元添加帧头帧尾 差错检测:检错码封装在帧尾 可靠传输:尽管误码不能避免,但如果可以实现发送什么就接受什么,就叫可靠传输 封装成…...
【日常】矩阵正态分布参数检验问题
最近给凯爹做的一个苦力活,统计检验这个东西说实话也挺有趣,跟算法设计一样,好的检验真的是挺难设计的,就有近似算法的那种感觉,检验很难保证size和power都很理想,所以就要做tradeoff,感觉这个假…...
QML矩形(Rectangle)
Rectangle 用于绘制矩形 常见的属性: 填充颜色:纯色:color 渐变 :Gradient类 渐变的优先级大于纯色Gradient(渐变色): 渐变由多种颜色定义,这些颜色将无缝混合,…...
CSS自定义鼠标样式
CSS自定义鼠标样式 属性值 属性描述url需使用的自定义光标的 URLdefault默认光标(通常是一个箭头)auto默认。浏览器设置的光标crosshair光标呈现为十字线pointer光标呈现为指示链接的指针(一只手)move此光标指示某对象可被移动e…...
春招Leetcode刷题日记-D4-双指针算法-滑动窗口快慢指针
D4-双指针算法-滑动窗口&&快慢指针快慢指针算力扣141. 环形链表思路代码力扣142. 环形链表 II思路代码滑动窗口力扣76. 最小覆盖子串思路代码力扣424. 替换后的最长重复字符思路代码快慢指针算 快慢指针算法,多用于链表当中,常见的如࿱…...
【go】结合一个go开源项目分析谷歌浏览器cookie为什么不安全 附go项目导包失败怎么解决教程
本文创作背景 源于谷歌浏览器提示密码被泄露 并且某站很快收到了异地企图登录的提醒。 当即怀疑是不是谷歌浏览器保存的密码不安全,最后查阅诸多资料 并找到一个go语言编写的开源项目进行研究,虽然最终不能确定密码是如何泄露的 但研究结论还是让人不由感…...
Windows瘦身方法
一、快速删除系统盘临时文件方法, 1、winr打开运行对话框,输入%temp%命令,如图1 图1 2、打开temp文件夹,如图2,选择所有文件,鼠标右键删除或按Del键删除。 图2 二、磁盘清理 1、winr,输入cleanmgr&#x…...
19. 删除链表的倒数第 N 个结点
题目链接:https://leetcode.cn/problems/remove-nth-node-from-end-of-list/进阶:你能尝试使用一趟扫描实现吗?解题思路:最简单的方法是先遍历一次链表,得到链表的长度len,然后再一次遍历链表,遍…...
【Linux】网络编程 - 基础概念
目录 一.OSI七层模型vsTCP/IP五层模型 1.一些周边概念 2.OSI七层模型 3.TCP/IP五层模型 4.网络传输流程图 二.什么是MAC地址 三.什么是IP/IP地址 1.什么是IP 2.什么是IP地址 四.什么是端口号 一.OSI七层模型vsTCP/IP五层模型 1.一些周边概念 局域网vs广域网 网络互…...
Unity 多语言 轻量高效的多语言工具集 LanguageManager
效果展示 支持excel导入自动化 组件化 更方便 也提供直接获取多语言的接口 没有挂 LanguageText的对象也可以获取多语言文本内容 支持 Format接口 可以传递N个参数进来组装多语言 支持首次系统语言自测 支持语言切换后本地自动保存配置 支持实时切换 同步刷新所有UI 容错处…...
在Linux和Windows上安装zookeeper-3.5.9
记录:378场景:在CentOS 7.9操作系统上,安装zookeeper-3.5.9。在Windows上操作系统上,安装zookeeper-3.5.9。版本:JDK 1.8 CentOS 7.9 zookeeper-3.5.9官网地址:https://zookeeper.apache.org/源码地址&…...
【ESP32+freeRTOS学习笔记-(八)资源管理】
目录1、 资源使用概况2、互斥方法之一:基本临界区2.1、taskENTER_CRITICAL_FROM_ISR() 和taskEXIT_CRITICAL_FROM_ISR()3、互斥方法之二:挂起或锁定调度程序3.1 vTaskSuspendAll()3.2 xTaskResumeAll()4 互斥方法三:互斥信号量(和…...
P1427 小鱼的数字游戏(赋值运算符和String)
小鱼的数字游戏 题目描述 小鱼最近被要求参加一个数字游戏,要求它把看到的一串数字 aia_iai(长度不一定,以 000 结束),记住了然后反着念出来(表示结束的数字 000 就不要念出来了)。这对小鱼…...
Java学的好,工作不愁找
俗话说的好:“Java学的好,工作不愁找”,不管我们学习哪一门语言,我们都要掌握从抽象化中提取出来的方法,这样你才能提高我们的学习能力,并且在学习新事物的时候可以提取我们自己的想法。学习java࿰…...
表情包可视化编辑、生成配置信息数据工具
合成GIF图片 - 表情包 后续,用于快速、便捷生成 img_config.js 中 要生成的GIF每一帧数据(写入头像图片信息参数); 1、先上传 写入GIF中头像 标准图,同时获取图片信息,更新 写入GIF中头像 初始值࿰…...
java简单循环结构
while循环结构 Java提供的while条件循环。它的基本用法是: while (条件表达式) {循环语句 } // 继续执行后续代码while循环在每次循环开始前,首先判断条件是否成立。如果计算结果为true,就把循环体内的语句执行一遍,如果计算结果…...
【Servlet+Jsp+Mybatis+Maven】WEB图书馆管理系统
web图书馆管理系统一、绪论二、流程和其页面展示效果流程页面效果项目结构三、具体实现第一步:备数据库表第二步:编写登录前端代码第三步:利用过滤器处理安全问题第四步:控制层去实现相关调用第五步:实现持久化层与数据…...
【WPF】WindowChrome 自定义窗口完美实现
WindowChrome 自定义窗口完美实现简介效果图自定义最小化、最大化、关闭按钮布局实现结语简介 Microsoft官网关于 WindowChome 的介绍 截取Microsoft文章的一段话: 若要在保留其标准功能时自定义窗口,可以使用该 WindowChrome 类。 该 WindowChrome…...
Python客户端使用SASL_SSL连接Kafka需要将jks密钥转换为pem密钥,需要转化成p12格式再转换pem才能适配confluent_kafka包
证书生成 生成证书以及jks参考以下文章 https://blog.csdn.net/qq_41527073/article/details/121148600 证书转换jks -> pem 需要转化成p12以下转换才能适配confluent_kafka包,直接jks转pem会报错不能使用,具体参考以下文章 https://www.ngui.cc/z…...
AI-调查研究-01-正念冥想有用吗?对健康的影响及科学指南
点一下关注吧!!!非常感谢!!持续更新!!! 🚀 AI篇持续更新中!(长期更新) 目前2025年06月05日更新到: AI炼丹日志-28 - Aud…...
CTF show Web 红包题第六弹
提示 1.不是SQL注入 2.需要找关键源码 思路 进入页面发现是一个登录框,很难让人不联想到SQL注入,但提示都说了不是SQL注入,所以就不往这方面想了 先查看一下网页源码,发现一段JavaScript代码,有一个关键类ctfs…...
rknn优化教程(二)
文章目录 1. 前述2. 三方库的封装2.1 xrepo中的库2.2 xrepo之外的库2.2.1 opencv2.2.2 rknnrt2.2.3 spdlog 3. rknn_engine库 1. 前述 OK,开始写第二篇的内容了。这篇博客主要能写一下: 如何给一些三方库按照xmake方式进行封装,供调用如何按…...
反向工程与模型迁移:打造未来商品详情API的可持续创新体系
在电商行业蓬勃发展的当下,商品详情API作为连接电商平台与开发者、商家及用户的关键纽带,其重要性日益凸显。传统商品详情API主要聚焦于商品基本信息(如名称、价格、库存等)的获取与展示,已难以满足市场对个性化、智能…...
前端倒计时误差!
提示:记录工作中遇到的需求及解决办法 文章目录 前言一、误差从何而来?二、五大解决方案1. 动态校准法(基础版)2. Web Worker 计时3. 服务器时间同步4. Performance API 高精度计时5. 页面可见性API优化三、生产环境最佳实践四、终极解决方案架构前言 前几天听说公司某个项…...
【JVM】- 内存结构
引言 JVM:Java Virtual Machine 定义:Java虚拟机,Java二进制字节码的运行环境好处: 一次编写,到处运行自动内存管理,垃圾回收的功能数组下标越界检查(会抛异常,不会覆盖到其他代码…...
Xen Server服务器释放磁盘空间
disk.sh #!/bin/bashcd /run/sr-mount/e54f0646-ae11-0457-b64f-eba4673b824c # 全部虚拟机物理磁盘文件存储 a$(ls -l | awk {print $NF} | cut -d. -f1) # 使用中的虚拟机物理磁盘文件 b$(xe vm-disk-list --multiple | grep uuid | awk {print $NF})printf "%s\n"…...
[USACO23FEB] Bakery S
题目描述 Bessie 开了一家面包店! 在她的面包店里,Bessie 有一个烤箱,可以在 t C t_C tC 的时间内生产一块饼干或在 t M t_M tM 单位时间内生产一块松糕。 ( 1 ≤ t C , t M ≤ 10 9 ) (1 \le t_C,t_M \le 10^9) (1≤tC,tM≤109)。由于空间…...
JDK 17 序列化是怎么回事
如何序列化?其实很简单,就是根据每个类型,用工厂类调用。逐个完成。 没什么漂亮的代码,只有有效、稳定的代码。 代码中调用toJson toJson 代码 mapper.writeValueAsString ObjectMapper DefaultSerializerProvider 一堆实…...
Python的__call__ 方法
在 Python 中,__call__ 是一个特殊的魔术方法(magic method),它允许一个类的实例像函数一样被调用。当你在一个对象后面加上 () 并执行时(例如 obj()),Python 会自动调用该对象的 __call__ 方法…...
