(三)FPGA实现滤波器

这篇具有很好参考价值的文章主要介绍了(三)FPGA实现滤波器。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

在fpga中实现对信号的滤波,FPGA学习笔记,fpga开发

  • 配置DDS IP核

 DDS:直接数字式频率合成器,可以根据需求产生不同频率和相位的正弦波数据,通常用于通信系统中的调制解调。

配置过程:

【IP CATALOG】à【modulation DDS complier】

Configuration Options

Phase generator and SIN COS LUT

相位和查找表(本实验中选这个)

Phase Generator only

只产生相位

SIN COS LUT only

只产生查找表

Spurious free dynamic range(dB)

信号的信噪比

根据需求设置

Frequency resolution

频率的分辨率

根据需求设置

Output frequencies

信号输出频率

根据需求设置

        .aclk(clk),                                                                        //系统时钟

        .m_axis_data_tvaild(m_axis_data_tvaild_1),                  //输出有效信号

        .m_axis_data_tready(m_axis_data_tready_1),               //输入是否准备好工作

        .m_axis_data_tdata(dout_fre_1),                                   //输出频率

        .m_axis_phase_tvaild(m_ axis_ phase _tvaild_1),         //以下三个是相位的

        .m_axis_ phase_tready(m_ axis_ phase _ tready _1),

        .m_axis_ phase_tdata(dout_pha_1),

  • 配置乘法器IP核

        【IP CATALOG】à【MATH functions multiplier】

         在【input options】中选择输入是有符号数还是无符号数以及输入的位宽

  • 配置滤波器IP核

        【IP CATALOG】à【digital signal processing FIR compiler】

        使用matlab产生滤波器系数(.coe文件)

  1. 打开matlab,在命令行窗口输入【fdatool】
  2.         【filter order】可设置滤波器阶数,阶数越高精确度越高,计算更复杂
  3.         【frequency specifications】中设置采样频率【Fs】、起始和截止频率
  4.      2.【design filter】
    1.      3.在fpga中实现对信号的滤波,FPGA学习笔记,fpga开发由于FPGA的计算能力,在这个图标内的【filter arithmetic】选择【Fixed point】,点击【Apply】
      1.      4.【targets】->【XLINX Coefficient.(COE) File】,保存到当前工程下

         返回IP核配置界面加载生成的coe文件即可文章来源地址https://www.toymoban.com/news/detail-569243.html

  • 编写顶层文件

module dds_filter(
	input clk,
	output sig1,
	output sig2,
	output sig3,
	output filter_sig
);
	wire clk;
	wire [7:0] sig1;
	wire [7:0] sig2;
	wire [7:0] sig3;
	wire [39:0] filter_sig;
//用DDS0产生3MHz的正弦波信号	
dds_compiler_0 dds0(
	.aclk(clk),
	.m_axis_data_tvalid(m_axis_data_tvalid),
	.m_axis_data_tdata(sig1)
	);

//用DDS1产生4MHz的正弦波信号
dds_compiler_1 dds1(
	.aclk(clk),
	.m_axis_data_tvalid(m_axis_data_tvalid),
	.m_axis_data_tdata(sig2)
	);
	
//用乘法器进行混频输出
mult_gen_0 your_instance_name(
	.CLK(clk),
	.A(sig1),
	.B(sig2),
	.P(sig3),
);

fir_compiler_0 fir_filter(
	.aclk(clk),
	.s_axis_data_tvalid(1'b1),			//设置为1,一直有效
	.s_axis_data_tready(s_axis_data_tready),
	.s_axis_data_tdata(sig3),			//滤波器输入
	.m_axis_data_tvalid(m_axis_data_tvalid1),
	.m_axis_data_tdata(filter_sig)		//滤波器输出
);

//把产生的滤波信号保存为txt文件
integer dout_file1;
initial begin
	dout_file1=$fopen("*************.txt")
		if(dout_file1==0)begin
			$display("cannot open the file!"); 	//提示创建文件失败
			$stop;
		end
end

always @(posedge clk)
	if(m_axis_data_tvalid1)
		$fdisplay(dout_file1,"%d",$signed(filter_sig));//保存为有符号信号

integer dout_file2;
initial begin
	dout_file1=$fopen("*************.txt")
		if(dout_file1==0)begin
			$display("cannot open the file!"); 	//提示创建文件失败
			$stop;
		end
end

always @(posedge clk)
	if(m_axis_data_tvalid1)
		$fdisplay(dout_file1,"%d",$signed(sig3));//保存为有符号信号
  • 编写testbench文件

module tb_adds_filter();
	reg clk;
	wire [7:0] sig1;
	wire [7:0] sig2;
	wire [15:0] sig3;
	wire [39:0] filter_sig;
	dds_filter dds_tb(
		.clk(clk),
		.sig1(sig1),
		.sig2(sig2),
		.sig3(sig3),
		filter_sig(filter_sig)
	);
	initial               //初始化时钟
	begin
	clk = 1;
	end
	always #10 clk=~clk;	//每10ns翻转一次
	
endmodule
  • 使用Matlab对波形进行验证

clc
clear
close all;
load **********.txt
load ----------.txt   %两个自己命名的波形文件

before=before_filter_data1;
after=after_filter_data1;
figure(1);
plot(before);
title('滤波前混频信号时域波形');
figure(2);
plot(after);
title('滤波后信号时域波形');
fs=50e6;	%采样
len=1533;	%取点
ff=1:len;	
f=fs/len*ff-fs/2;

%FFT
bfft=fft(before);
afft=fft(after);
figure(3);
plot(f,abs(fftshift(bfft)));
title('滤波前混频信号频谱');
figure(4);
plot(f,abs(fftshift(afft)));
title('滤波后单频信号频谱');

到了这里,关于(三)FPGA实现滤波器的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • (三)FPGA实现滤波器

     DDS:直接数字式频率合成器,可以根据需求产生不同频率和相位的正弦波数据,通常用于通信系统中的调制解调。 配置过程: 【IP CATALOG】à【modulation DDS complier】 Configuration Options Phase generator and SIN COS LUT 相位和查找表(本实验中选这个) Phase Generator only 只产生相位 SIN CO

    2024年02月16日
    浏览(28)
  • FPGA实现CIC滤波器

    上一节MATLAB CIC滤波器_小小低头哥的博客-CSDN博客介绍了如何使用MATLAB仿真不同要求的CIC滤波器,并对结果进行了分析。这次使用FPGA分别实现单级、多级CIC滤波器。   单级CIC滤波器的实现非常简单。根据 y ( n ) = ∑ k = 0 M − 1 x ( n − k ) = x ( n ) − x ( n − M ) + ∑ k = 0 M − 1

    2024年02月04日
    浏览(28)
  • 升余弦滤波器的FPGA实现

    升余弦滤波器与无码间串扰(一) 升余弦滤波器与无码间串扰(二) 升余弦滤波器的FPGA实现 成形滤波器采用vivado中的FIR ip核实现。滤波器的系数用matlab产生并转成coe文件。 FIR滤波器的输入数据是s_axis_data_tdata,输出数据是m_axis_data_tdata。输入和输出接口均采用AXIS总线,即接

    2024年02月14日
    浏览(31)
  • 孩子都能学会的FPGA:第十六课——用FPGA实现IIR滤波器滤波

    (原创声明:该文是 作者的原创 ,面向对象是 FPGA入门者 ,后续会有进阶的高级教程。宗旨是 让每个想做FPGA的人轻松入门 , 作者不光让大家知其然,还要让大家知其所以然 !每个工程作者都搭建了全自动化的仿真环境,只需要双击 top_tb.bat 文件就可以完成整个的仿真(前

    2024年01月21日
    浏览(46)
  • 基于FPGA的IIR滤波器的实现

    IIR滤波器原理以及架构在此不做阐述,如何从模拟滤波器到数字滤波器进行设计,可参考 https://blog.csdn.net/k331922164/article/details/117265704?spm=1001.2101.3001.6661.1utm_medium=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-1-117265704-blog-123083652.235%5Ev38%5Epc_relevant_anti_t3_based

    2024年02月04日
    浏览(29)
  • 基于FPGA的RC滤波器设计实现

    目录 简介: 传递函数 FPGA代码实现 总结 RC滤波器的特性基本情况介绍 RC一阶低通滤波介绍;RC滤波器电路简单,抗干扰性强,有较好的低频性能,并且选用标准的阻容元件易得,所以在工程测试的领域中最经常用到的滤波器是RC滤波器。 这里我们主要认识和介绍低通滤波器。

    2024年02月16日
    浏览(23)
  • FIR内插滤波器的FPGA实现(一)-matlab实现

    FIR内插滤波器是一种基本的插值方法,主要有两个步骤: 1)在输入的每一个初始采样中间插入L个零点; 2)插零后的数据经过低通滤波器。 运行结果如图(时域、频域): 我们的目标是把采样频率提升五十倍。 得到的频域图: 可以看出内插零点在频域会实现频谱扩展,因此

    2024年02月03日
    浏览(40)
  • FIR滤波器的FPGA实现【IP核实现版】

    本文使用FPGA来实现FIR滤波器设计,设计中使用的DDS、乘法器与FIR滤波器均采用IP core进行实现,实现效果是将3MHz和4MHz的正弦信号混频后使用FIR低通滤波器滤除7MHz信号得到1MHz的信号。 首先用两个DDS核生成3MHz以及4MHz的正弦波信号。 注意:此处的dds的命名要和代码中对应,系统

    2024年02月04日
    浏览(39)
  • 利用FPGA实现全串行低通FIR滤波器

    设计一个15阶(长度为16)的具有线性相位低通FIR滤波器,采用布拉克曼窗函数设计,截止频率为500HZ,抽样频率为2000HZ;采用FPGA实现全串行FIR滤波器,系数的量化位数为12比特,输入数据位数为12比特,输出数据位数为29比特,系统时钟为16KHZ 设计思路 :首先采用MATLAB根据要

    2024年02月07日
    浏览(40)
  • 解析使用FPGA逻辑实现FIR滤波器的几种架构

    有限脉冲响应(finite impulse response,FIR)数字滤波器         FIR滤波器的实质就是输入序列与系统脉冲响应的卷积,即:         其中,N为滤波器的阶数,也即抽头数;x(n)为第n个输入序列;h(n)为FIR滤波器的第n级抽头系数。         FIR滤波器基本结构如下:      

    2024年02月08日
    浏览(29)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包