日志档案

发表于 2008-5-11 20:51:23

1

标签: 无标签

基于FPGA的高斯滤波器设计

点击下载基于FPGAGMSK调制

之高斯滤波器设计

 

       先生成一个50kbps码率的源(带宽为25KHz),码元1编码成7FFFH+1)发送,码元0编码成80000H-1)发送。利用SystemView制作一个采样频率为500KHz的低通高斯滤波器,把生成的21阶滤波器系数做成.coe文件(如IIR filterdatasheet要求)加载到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

系统分类: CPLD/FPGA   |   用户分类: FPGA   |   来源: 原创   |   【推荐给朋友】

    阅读(131)    回复(0)  

投一票您将和博主都有获奖机会!