当前位置: 首页 > news >正文

通信算法之317:基于Xilinx FPGA平台的符号同步算法(接收序列与本地序列互相关-不共轭乘)

文章目录

  • 一.峰值搜索方法
  • 二.接收数据量化
  • 三.互相关共轭乘
  • 四.累加运算

一.峰值搜索方法

提示:
1.通常采用搜索最大值的方法,这对硬件的实现来说需要比较复杂的逻辑电路与控制电路。因此,从简化硬件设计的角度出发,采用制定门限值的方法来代替,当abs(C) 的值超过了预先设定的门限值,即认为找到了峰值。

二.接收数据量化

提示:
1.训练序列长度为1024个采样点,每个采样点都是复数类型,这样1024个复数乘法器所实现的匹配滤波,势必将占用FPGA上宝贵的乘法器资源,且对运算速度也是不利的。
2.采用持续累加重复训练符号的方法,来降低高斯白噪声的影响,并将接收到的信号量化为{1,-1},这样硬件电路实现时可以省去所有的乘法器

例如:因为复数乘法器需要占用较多的器件资源,为了简化硬件实现,将接收到的信号量化为{1,-1},即大于0的量化为1,而小于0的量化为-1。同时,为了降低高斯白噪声的影响,将重复序列对应位置的值,在量化前持续累加处理。

在这里插入图片描述

持续累加参考代码:

12位表示一个符号,16个符号等于192位。
/*持续累加用寄存器 *//////
reg [191:0] Continual_Accumulation_Real;		  
reg [191:0] Continual_Accumulation_Imag;/*持续累加移位寄存器左移一个单元*****/
Continual_Accumulation_Real[191:12] <= Continual_Accumulation_Real[179:0];	  
Continual_Accumulation_Imag[191:12] <= Continual_Accumulation_Imag[179:0];
/*最高一个单元与输入数据的12位扩展相加赋值给最低一个单元****/
Continual_Accumulation_Real[11:0] <= {{4{BufferDataR[7]}},BufferDataR} + Continual_Accumulation_Real[191:180]; 
Continual_Accumulation_Imag[11:0] <= {{4{BufferDataI[7]}},BufferDataI} + Continual_Accumulation_Imag[191:180];

量化参考代码:
移位缓存16个。最高位表示符号位。

/*量化结果移位******//////
Quantization_Result_Real[14:0] <= Quantization_Result_Real[15:1];			
Quantization_Result_Imag[14:0] <= Quantization_Result_Imag[15:1];
/*最高位为0,表正,量化为+1, 在此用0代替,下面语句只是用于判断******//////
Quantization_Result_Real[15] <= Continual_Accumulation_Real[11];
/*最高位为1,表负,量化为-1,在此用1表示******//////
Quantization_Result_Imag[15] <= Continual_Accumulation_Imag[11];

三.互相关共轭乘

提示:
1.接收信号经过量化后,送入匹配滤波单元,首先与本地1024个训练符号取样进行相关计算,并将相关值累加,然后通过寻找其幅值的峰值来确定各个训练符号的位置
2.互相关运算,不采用乘法器。将乘法运算可以简单地由相应的加法运算实现,从而避免器件资源的大量占用。

例如:
在这里插入图片描述

共轭乘替代加减法 参考代码:

input         multiplier_Real;	 /*移位寄存器实部******//////
input         multiplier_Imag;   /*移位寄存器虚部******//////
input  [15:0] known_Real;		 /*本地已知短训练序列实部,二进制补码表示*******///////
input  [15:0] known_Imag;		 /*短训练序列虚部*******///////
output [16:0] output_Real;	     /*输出实部,扩展为17位输出,输出为二进制补码表示*******///////
output [16:0] output_Imag;	     /*输出虚部*******////////*输入的multiplier等于0表示正数,等于1表示负数*****//////
if (multiplier_Real == 0 && multiplier_Imag == 0)			 beginoutput_Real <= {{1{known_Real[15]}},known_Real} + {{1{known_Imag[15]}},known_Imag};output_Imag <= {{1{known_Real[15]}},known_Real} - {{1{known_Imag[15]}},known_Imag};endelse if (multiplier_Real == 0 && multiplier_Imag == 1)beginoutput_Real <= {{1{known_Real[15]}},known_Real} - {{1{known_Imag[15]}},known_Imag};output_Imag <= - {{1{known_Real[15]}},known_Real} - {{1{known_Imag[15]}},known_Imag};endelse if (multiplier_Real == 1 && multiplier_Imag == 0)beginoutput_Real <= - {{1{known_Real[15]}},known_Real} + {{1{known_Imag[15]}},known_Imag};output_Imag <= {{1{known_Real[15]}},known_Real} + {{1{known_Imag[15]}},known_Imag};endelse  //(buffer_multiplier_Real==1 && buffer_multiplier_Imag==1)beginoutput_Real <= - {{1{known_Real[15]}},known_Real} - {{1{known_Imag[15]}},known_Imag};output_Imag <= - {{1{known_Real[15]}},known_Real} + {{1{known_Imag[15]}},known_Imag};end

在这里插入图片描述

四.累加运算

提示:参考代码:

wire [16:0] CorrelationR0;
reg [20:0]CorrelationSumR;
/*赋值语句右边的操作数位宽已扩展为21位,跟左边的结果位宽一致,保证带符号位二进制加法运算的正确性*******//////CorrelationSumR <= ((({{4{CorrelationR0[16]}},CorrelationR0} + {{4{CorrelationR1[16]}},CorrelationR1}) + ({{4{CorrelationR2[16]}},CorrelationR2} + {{4{CorrelationR3[16]}},CorrelationR3})) + (({{4{CorrelationR4[16]}},CorrelationR4} + {{4{CorrelationR5[16]}},CorrelationR5})+ ({{4{CorrelationR6[16]}},CorrelationR6} + {{4{CorrelationR7[16]}},CorrelationR7}))) + ((({{4{CorrelationR8[16]}},CorrelationR8} + {{4{CorrelationR9[16]}},CorrelationR9})+ ({{4{CorrelationR10[16]}},CorrelationR10} + {{4{CorrelationR11[16]}},CorrelationR11})) + (({{4{CorrelationR12[16]}},CorrelationR12} + {{4{CorrelationR13[16]}},CorrelationR13})+ ({{4{CorrelationR14[16]}},CorrelationR14} + {{4{CorrelationR15[16]}},CorrelationR15})));
http://www.dtcms.com/a/343003.html

相关文章:

  • ODDR实现多bit单边沿采样数据转为多bit双沿采样数据
  • 前端-Vue笔记(核心语法)
  • linux内核 - 内存分配机制介绍
  • MySQL 8.4.6 LTS 安装教程 windows
  • 如何在mac玩windows游戏?3个工具推荐,不用换电脑!
  • MiniGPT-4
  • 在Excel和WPS表格中合并多个单元格这样最快
  • 第14章 结构和其他数据形式
  • 数据分类分级的关键难点以及应对之道
  • Go1.25的源码分析-src/runtime/runtime1.go(GMP)g
  • U盘安装 CentOS Stream 10 实战复盘:三大常见问题与解决方法
  • 通义千问VL-Plus:当AI“看懂”屏幕,软件测试的OCR时代正式终结!
  • Java 项目中 MySQL 数据向 Redis 迁移的技术实践与深度剖析
  • JVM 性能监控工具全解析:从命令行到可视化全方位指南
  • 图像形态学:膨胀、腐蚀和边缘检测与绘制
  • Java后端面试场景题大全:2025年高频考点深度解析
  • 大模型部署
  • 造成云手机闪退的原因有哪些?
  • 使用VBA宏批量修改Word中表格题注格式
  • HYPE分布式水文模型建模方法与案例分析实践技术应用
  • AI 时代的数字伦理选择题
  • Mac 电脑 IDEA 执行 Maven 出现 No route to host 问题
  • Django REST框架核心:GenericAPIView详解
  • 【力扣 买股票的最佳时机II Java/Python】
  • rt-thread使用sfud挂载spi flash, 并使用spi驱动st7789 lcd的trace分析(使用spi dma)
  • 生信分析自学攻略 | R语言函数与参数介绍
  • kylin v10只允许kylin用户登录解决办法
  • 雅菲奥朗SRE知识墙分享(四):『AI已开始重塑劳动力市场,美国年轻科技从业者首当其冲』
  • 数据结构-HashSet
  • 黑马程序员jbdc笔记