基于FPGA的高斯滤波器设计
0赞先生成一个50kbps码率的源(带宽为25KHz),码元1编码成7FFFH(+1)发送,码元0编码成80000H(-1)发送。利用SystemView制作一个采样频率为500KHz的低通高斯滤波器,把生成的21阶滤波器系数做成.coe文 件(如IIR filter的datasheet要求)加载到IP Core中生成所需低通滤波器。
最后将码元通过高斯滤波器进行滤波。
SystemView生成的高斯滤波器时域波形图:
SystemView生成的高斯滤波器频域波形图:
功能仿真波形如下。连续发送的码元为1011101001010101,最后通过高斯滤波后得到的平滑的波形如下,与原始码元型号一一 对应。
布局布线后仿真的波形如下。可以看到有明显的毛刺。
Verilog程序:
module gmsktop(CLK,clk_50,RST,RDY,dout);
input CLK;//主时钟信号,500KHz
input clk_50;//50KHz时钟信号
input RST;
//input ND;
output RDY;
output[33:0] dout;
wire ND,RFD;
wire[15:0] source;
sent_source sent_source(clk_50,RST,ND,RFD,source);
gsfir gsfir(ND,RDY,CLK,RST,RFD,source,dout);
endmodule
module sent_source(clk_50,RST,ND,RFD,source);
input clk_50;//50KHz时钟信号
input RST;//复位信号,高电平有效
input RFD;
output[15:0] source;//1bit基带信号,用16bit表 示
output ND;
reg[15:0] source;
reg[15:0] scode;
reg[3:0] num;
reg ND;
always @(posedge clk_50)
begin
if(RST)
begin
ND <= 0;
source <= 16'd0;
num <= 4'b1111;
scode <= 16'b1011101001010101;
end
else if(RFD)
begin
if(scode[num]) begin source <= 16'h7fff; end
else begin source <= 16'h8000; end
ND <= 1;
num <= num-1;
end
else ND <= 0;
end
endmodule