疯狂小学生

抖音风 裸舞 手把手教你用FPGA缱绻一个FIR数字滤波器|信号|单频|波形|fir|正弦波

发布日期:2025-03-21 09:25    点击次数:55

抖音风 裸舞 手把手教你用FPGA缱绻一个FIR数字滤波器|信号|单频|波形|fir|正弦波

条目抖音风 裸舞

缱绻一个带通滤波器,并考据其功能。

1、使用MATLAB缱绻滤波器通盘

MATLAB首页找到APP后找到滤波器缱绻器具并大开,使用该器具不错生成数字滤波器的通盘后续用于FPGA配置FIR IP核。

大开滤波器缱绻器具后即可输入筹谋参数并缱绻需要的滤波器,本次缱绻一个带通滤波器,是以滤波器反映类型遴荐带通;缱绻决议遴荐FIR(有限冲激反映);滤波器阶数这里遴荐最小阶,也不错我方指定阶数,阶数越大滤波器的滤波成果越好但越消耗FPGA资源,阶数不错左证推行情况进行采取;密度因子默许20;频率设定,本次缱绻的采样率成就为10MHz,滤波器的频率特点成就不错按照图示进行填写,图片诱骗的兴趣兴趣很澄莹,Fstop1为下限阻带截止频率,这里成就为50kHz,Fpass1为下限通带截止频率,这里成就为100kHz,Fpass2为上限通说念截止频率,这里成就为400kHz,Fstop2为上限阻带截止频率,这里成就为450kHz(Fpass1-Fstop1和Fstop2-Fpass2为过渡带宽度,本次缱绻的过渡带宽度为50kHz;Fpass2-Fpass1为通带宽度,本次缱绻的通带宽度为400kHz;其余为阻带);幅值设定,其中Astop为阻带衰减的幅度值,本次缱绻阻带衰减50dB,Apass为通带的纹波,这里限制通带纹波不出奇0.1dB。

成就好以上参数后点击滤波器缱绻,恭候须臾即可缱绻好所需滤波器,从左侧窗口面前滤波器信息中不错发现顺应本次缱绻需求的最小阶数为483阶。

点击器具栏:

不错搜检滤波器幅值反映、相位反映、零顶点等。

点击器具栏文献--导出,即可导出缱绻的滤波器通盘。导出后不错在使命区中看到滤波器通盘的变量Num。

以下为本次导出的通盘,一共484个。

滤波器通盘在FPGA中导入时每个通盘之间需要逗号离隔,是以这里将通盘保存到txt并使用逗号离隔,瞩目终末一个数的逗号需要删除。

生成后的通盘删除终末的逗号。

2、FPGA中FIR的竣事

这里不详FPGA工程成就经由,新建工程后点击Create Block Design。

添加FIR IP核。

配置FIR IP核,Filter Option中Select Source遴荐Vector,Coefficient Vector中粘贴之前MATLAB生成的通盘,其余保抓默许。左边Freq.Response窗口中不错搜检频率反映弧线。

Channel Specification中主要配置采样率和使命时钟,input Sampling Frequency(MHz)配置10MHz采样率,后续DDS使命时钟需要和采样率保抓一致;Clock Frequency(MHz)配置200MHz后续FIR IP核的使命时钟给200MHz。

Implement配置,Coefficient With不错左证需要进行配置,本次缱绻时配置成24,配置成24时通过搜检左边Freq.Response窗口不错发现两条红色和蓝色弧线重合较接近理思弧线Ideal,是以这里配置成24,也不错左证需要进行配置。

Interface这里配置如下:

FIR配置完后再加多一个fifo,配置如下:

配置完后将FIR和fifo贯串并引出接口:

终末右击block design先generate Output ...再Create HDL...。

3、FPGA中DDS的竣事

这里DDS用于产生FIR的输入信号。相似点击Create Block Design,添加DDS IP核。

Configuration配置System Clock(MHz)为10MHz即可,其余保抓默出嫁置。

Detailed Implementation配置如下:

终末输出频率配置成0.15MHz即150kHz,也不错左证需要进行配置。

按照上述配置再生成50kHz、350kHz、450kHz频率的DDS。

生成完DDS后再生成一个fifo。该fifo用于跨时钟域,将DDS产生的10MHz时钟域的信号转到200MHz时钟域输入FIR进行滤波。fifo配置如下,深度16,数据位宽16bit。

终末将生成的IP核按下图连线,se色综合网该dds用于测试fir滤波器。可除外部不错将DDS生成的350kHz和150kHz进行近似后再输入到fifo中,终末经过跨时钟域后从Multi_wave_M_AXIS输出到FIR进行滤波,近似后的波形存在和频(500kHz)、差频(200kHz),经过滤波器后只剩下差频200kHz,要是滤波器输出200kHz正弦波则阐明缱绻顺应预期。也不错将单频信号(50kHz/150kHz/350kHz/450kHz)输入滤波器搜检滤波器输出幅度情况。

4、top模块编写

顶层模块例化两个block_design ,dds产生50kHz、150kHz、350kHz和450kHz的正弦信号,外部将dds生成的其中两个信号作念乘法后输入到dds的fifo接口中,使相乘的信号从10Mhz时钟域到200Mhz时钟域,终末输入到FIR中进行滤波。 要是需要测试FIR单频信号的滤波器则不错将DDS输出的其中一个信号与常数相乘后再输入到FIR中进行测试。 另外top模块中还需例化一个pll产生10MHz时钟用于DDS产生信号,以及200MHz时钟用于FIR。

module fir_top( input pl_ref_clk_100m_p, input pl_ref_clk_100m_n ); reg [4:0] cnt; wire clk_10m,clk_200m; wire signed [7:0] M_AXIS_50k_tdata; wire M_AXIS_50k_tvalid,M_AXIS_50k_tready; wire signed [7:0] M_AXIS_150k_tdata; wire M_AXIS_150k_tvalid,M_AXIS_150k_tready; wire signed [7:0] M_AXIS_350k_tdata; wire M_AXIS_350k_tvalid,M_AXIS_350k_tready; wire signed [7:0] M_AXIS_450k_tdata; wire M_AXIS_450k_tvalid,M_AXIS_450k_tready; wire signed [15:0] Multi_wave_S_AXIS_tdata; wire Multi_wave_S_AXIS_tvalid,Multi_wave_S_AXIS_tready; wire signed [15:0] Multi_wave_M_AXIS_tdata; wire Multi_wave_M_AXIS_tvalid,Multi_wave_M_AXIS_tready; wire signed [15:0] FIR_S_AXIS_tdata; wire FIR_S_AXIS_tvalid,FIR_S_AXIS_tready; wire signed [23:0] FIR_M_AXIS_tdata; wire FIR_M_AXIS_tvalid,FIR_M_AXIS_tready; assign rst_n = locked; // Multi_wave_S_AXIS assign Multi_wave_S_AXIS_tdata = M_AXIS_450k_tdata * 8'hff/*M_AXIS_350k_tdata */; assign Multi_wave_S_AXIS_tvalid = M_AXIS_450k_tvalid & 1/*M_AXIS_350k_tvalid */; assign M_AXIS_50k_tready = Multi_wave_S_AXIS_tready; assign M_AXIS_150k_tready = Multi_wave_S_AXIS_tready; assign M_AXIS_350k_tready = Multi_wave_S_AXIS_tready; assign M_AXIS_450k_tready = Multi_wave_S_AXIS_tready; // Multi_wave_M_AXIS assign FIR_S_AXIS_tvalid = Multi_wave_M_AXIS_tvalid; assign FIR_S_AXIS_tdata = Multi_wave_M_AXIS_tdata; assign Multi_wave_M_AXIS_tready = FIR_S_AXIS_tready; assign FIR_M_AXIS_tready = (cnt == 'd19) && Multi_wave_M_AXIS_tvalid; dds_design_wrapper dds_design( .M_AXIS_150k_tdata (M_AXIS_150k_tdata ), .M_AXIS_150k_tready (M_AXIS_150k_tready ), .M_AXIS_150k_tvalid (M_AXIS_150k_tvalid ), .M_AXIS_350k_tdata (M_AXIS_350k_tdata ), .M_AXIS_350k_tready (M_AXIS_350k_tready ), .M_AXIS_350k_tvalid (M_AXIS_350k_tvalid ), .M_AXIS_450k_tdata (M_AXIS_450k_tdata ), .M_AXIS_450k_tready (M_AXIS_450k_tready ), .M_AXIS_450k_tvalid (M_AXIS_450k_tvalid ), .M_AXIS_50k_tdata (M_AXIS_50k_tdata ), .M_AXIS_50k_tready (M_AXIS_50k_tready ), .M_AXIS_50k_tvalid (M_AXIS_50k_tvalid ), .Multi_wave_M_AXIS_tdata (Multi_wave_M_AXIS_tdata ), .Multi_wave_M_AXIS_tready(Multi_wave_M_AXIS_tready), .Multi_wave_M_AXIS_tvalid(Multi_wave_M_AXIS_tvalid), .Multi_wave_S_AXIS_tdata (Multi_wave_S_AXIS_tdata ), .Multi_wave_S_AXIS_tready(Multi_wave_S_AXIS_tready), .Multi_wave_S_AXIS_tvalid(Multi_wave_S_AXIS_tvalid), .aresetn (rst_n ), .clk_10m (clk_10m ), .clk_200m (clk_200m ) ); always@(posedge clk_200m or negedge rst_n)begin if(!rst_n)begin cnt <= 'd0; end else begin cnt <= (cnt == 'd19)? 'd0 : (cnt + 1'b1); end end bandpass_fir_wrapper bandpass_fir( .FIR_M_AXIS_tdata (FIR_M_AXIS_tdata ), .FIR_M_AXIS_tready (FIR_M_AXIS_tready ), .FIR_M_AXIS_tvalid (FIR_M_AXIS_tvalid ), .FIR_S_AXIS_tdata (FIR_S_AXIS_tdata ), .FIR_S_AXIS_tready (FIR_S_AXIS_tready ), .FIR_S_AXIS_tvalid (FIR_S_AXIS_tvalid ), .aresetn (rst_n ), .clk_200m (clk_200m ) ); clk_wiz_0 pll( .clk_10m(clk_10m), .clk_200m(clk_200m), // output clk_200m .reset(1'b0), // input reset .locked(locked), // output locked .clk_100m_in(clk_100m) // input clk_100m_in ); IBUFDS clk_100m_ibufds( .O (clk_100m), .I (pl_ref_clk_100m_p), .IB (pl_ref_clk_100m_n) ); endmodule

5、功能仿真

DDS产生的四个信号如下:

50kHz信号,一个时钟周期的时期为102.31-82.31=20us,刚好为50kHz。

150kHz,一个时钟周期的时期为82.51-75.91=6.6us,频率约为151515Hz。

350kHz,一个是时钟周期的时期为71.21-68.31=2.9us,频率约为344827Hz。

450kHz,一个时钟周期的时期为91.51-89.31=2.2us,频率约为454545Hz。

将150kHz正弦和350kHz正弦近似后输入到FIR,输入信号代码修改如下(配图中的频率写错了,推行是150kHz和350kHz相近似,图片的是450kHz和350kHz,图片上的组合也不影响测试FIR,因为两个信号的和频以及差频为800kHz和100kHz,经过滤波器后100kHz信号平素输出而800kHz信号则被滤除):

两个光标之间的阻隔为112.975-102.975=10us,每个时钟周期为5us,是以滤波器输出的频率为200kHz。由于输入的信号为150kHz正弦波近似350kHz的正弦波,近似后的波形存在和频500kHz和差频200kHz,由于500kHz在滤波器通频带外,是以500kHz的信号会被滤除,经过滤波器后只剩下200kHz的正弦波。是以仿真扫尾顺应滤波器特点。仿真波形如下图,其中FIR_M_AXIS_tdata信号为FIR滤波输出信号。

将50kHz正弦信号输入FIR,输入信号代码修改如下:50kHz信号与常数8‘hff近似后输入到FIR。

由于50kHz在滤波器带外,是以经过滤波器后幅度应该被衰减。仿真波形如下图,FIR输出信号FIR_M_AXIS_tdata被衰减,顺应预期。

将150kHz正弦信号输入FIR,输入信号代码修改如下:150kHz信号与常数8‘hff近似后输入到FIR。

由于150kHz在滤波器带内,是以经过滤波器后幅度不变。仿真波形如下图,FIR输出信号FIR_M_AXIS_tdata幅度平素,顺应预期。

将350kHz正弦信号输入FIR,输入信号代码修改如下:350kHz信号与常数8‘hff近似后输入到FIR。

由于350kHz在滤波器带内,是以经过滤波器后幅度不变。仿真波形如下图,FIR输出信号FIR_M_AXIS_tdata幅度平素,顺应预期。

将450kHz正弦信号输入FIR,输入信号代码修改如下:450kHz信号与常数8‘hff近似后输入到FIR。

青柠视频在线观看BD

由于450kHz在滤波器带外,是以经过滤波器后幅度应该被衰减。仿真波形如下图,FIR输出信号FIR_M_AXIS_tdata被衰减,顺应预期。

6、论断

从仿真扫尾可知输入信号无论是单频信号还是近似后的双频信号,扫尾齐顺应预期。筹谋工程源码请点击阅读原文,在原贴中下载。

宽饶将咱们设为“星标”,这么能力第一时期收到推送音讯。

关心下方“汽车开导圈”,回应“Auto”,免费领取Autosar初学与推论府上包!

扫码添加小助手回应“进群”

和电子工程师们濒临面疏通劝诫抖音风 裸舞



 




Powered by 疯狂小学生 @2013-2022 RSS地图 HTML地图

Copyright Powered by站群 © 2013-2024