FPGA数字信号处理(十二)滑动平均滤波器

FPGA数字信号处理(⼗⼆)滑动平均滤波器
上⼀篇介绍了数字通信系统中ASK解调技术的FPGA实现。在ASK解调系统中,需要对低通滤波器提取出的基带包络信号做判决输出,本⽂将介绍其中涉及到的判决门限问题,以及在FPGA中的实现⽅法。主要介绍了如何使⽤滑动平均滤波器求得信号均值。
判决门限
由上⼀篇可知,LPF输出的基带包络信号包含有直流分量。2ASK信号只有2种电平状态,因此只需要将基带波形的直流分量作为判决门限即可。4ASK信号有4种电平状态:最⼤幅度的0、1/3、2/3、1倍,选取中间值1/6、1/2、5/6作为判决门限正确率最⾼。可见,⽆论是2ASK还是4ASK,都需要先获得直流分量。
本⽂将讲述ASK解调系统中判决门限的选择问题,以及FPGA的设计。由于ASK解调出的基带信号含有直流分量,因此需要这样处理。对于2FSK、BPSK这种不含直流分量的解调系统⽽⾔,判决门限直接选择0即可。
滑动平均
在FPGA中,求取信号的直流分量即为求信号的均值,参与均值运算的数据越多,则计算准确度越⾼,
消耗的资源也越⼤。
最⽅便实现的求均值⽅法便是滑动平均滤波器,之所以称之为滤波器是因为该算法本⾝有⼀种保留低频分量、滤除⾼频分量的特性。如3点滑动平均滤波器的输出y(n)=[x(n-2)+x(n-1)+x(n)]/3。滑动平均滤波器的频率响应与CIC滤波器的完全⼀致,系数都是1(CIC滤波器参考本系列16~19篇)。
甲苯二异氰酸酯用途
上述⽰例x(n)的每个取样点权值相同,都为1/3。也可以为每个取样点选择不同的权值,即为所说的加权滑动平均滤波器,将在后⾯的⽂章中叙述。
FPGA设计
在Vivado开发环境下完成256点滑动平均滤波器的设计。模块接⼝如下:
`timescale 1ns / 1ps
//--------------------------------------------------------
//  ASK解调系统,符号判决模块
//--------------------------------------------------------
module gate
(
input rst,
input clk,
青鸟网input signed [13:0] din,  //LPF输出的基带信号包络
output signed [13:0] mean //基带信号的直流分量
);
使⽤⼀组256个寄存器移位存储基带信号数据,即求平均值时共选取256个数据进⾏运算。代码如下:
//--------------------------------------------------------
//  256级寄存器移位缓存数据
//--------------------------------------------------------
万事无忧4
reg [13:0] din_reg [255:0];
integer i, j;
always @ (posedge clk or posedge rst)
if (rst)        //复位清0
for (i=0; i<=255; i=i+1)
din_reg[i] <= 'd0;
else begin
din_reg[0] <= din;
for (j=0; j<255; j=j+1)
din_reg[j+1] <= din_reg[j];
end
代码中使⽤integer类型的变量i和j来对寄存器组进⾏操作。需要注意:i和j在这⾥只是起辅助作⽤,即利⽤for循环来使代码更简洁易懂。在
综合时,这两个变量是会被综合器优化掉的,有如下提⽰:
•  [Synth 8-6014]Unused sequential element i was removed. ["C:/Users/GodWa/Desktop/ASKdemod_liuqi/ASKdemod_liuqi.srcs/sources_1/new/gate.v":20•  [Synth 8-6014]Unused sequential element j was removed. ["C:/Users/GodWa/Desktop/ASKdemod_liuqi/ASKdemod_liuqi.srcs/sources_1/new/gate.v":20
这个结果是可以预料的,因为我们完全可以⽤“din_reg[0]=0; din_[1]=0;……”这种写法将所有寄存器清0,显然不需要⽤到i和j这两个变
量。这就要感谢智能的综合器,可以让我们在不浪费资源的情况下,使⽤简洁的代码编写⽅式。
对连续256个寄存器数据求和并计算均值,由于是带符号数,相加时⾼位 应该补符号位,代码如下:
//--------------------------------------------------------
//  计算基带信号连续256个数据的均值
//--------------------------------------------------------
iradonreg signed [21:0] sum;
always @ (posedge clk or posedge rst)
if (rst) sum <= 'd0;
//将最⽼的数据换为最新的数据
else sum <= sum + {{8{din[13]}},din}
- {{8{din_reg[255][13]}},din_reg[255]};
assign mean = sum[21:8];  //右移8bit等效为÷256
endmodule
这样便得到了基带信号的直流分量。对于2ASK解调,这个值可以直接作为判决门限;对于4ASK解调,还需要由直流分量(即1/2)得到
1/6和5/6两个判决门限。这会涉及到常系数的乘除法,对于FPGA⽽⾔,这两种运算很消耗资源(尤其是除法),可以采⽤在 ⽤过的移位bppv
相加的⽅法来代替。
仿真与⼯程下载
将判决门限模块加⼊到ASK解调系统的⼯程中进⾏仿真。对2ASK信号解调的仿真效果如下图所⽰:
看到黄⾊标签处的基带信号最⼤值为3923,此时的直流分量为1904,可以作为判决门限。直流分量的值⼀直都⽐较稳定。4ASK信号解调的仿真效果如下图所⽰:
山西职工医学院学报看到黄⾊标签处的基带信号最⼤值为4303,此时的直流分量为2031,可以作为判决门限。
不过可以预料到的是,在初始阶段,当数据点数不⾜256个时(不够的值会采⽤默认值0填充),计算
得到的直流分量会有相当⼤的误差,这在应⽤于解调系统时会造成⼀定的错误,具体情况可参考本系列第11篇的仿真。

本文发布于:2024-09-24 02:23:51,感谢您对本站的认可!

本文链接:https://www.17tex.com/xueshu/8441.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:信号   分量   基带
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议