特权同学

基于FPGA的高斯滤波器设计

0
阅读(2627)

点击下载基于FPGA的GMSK调 制之高斯滤波器设计

先生成一个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

Baidu
map