FPGA学习记录(2)<一般FIR滤波器的FPGA实现>
目录
- FIR滤波器
- 1、dB的含义
- 2、滤波器的类型
- 3、各种滤波器的特点(FIR、IIR)
- 4、实现FIR滤波器
- ①仿真实现正弦激励的输入(200KHz以及15MHz正弦波)
- ②仿真FIR滤波器
- ③Vivado配置
- ④Vivado配置FIR滤波器
- ⑤Vivado的Testbench文件
- ⑥Vivado运行仿真文件
FIR滤波器
1、dB的含义
dB(分贝是一个表征相对值大小的单位),两种功率之比或者电压/电流/声量之比。
功率之比: d B = 10 l g X dB =10lgX dB=10lgX。由于 10 l g 0.5 = − 3 10lg0.5=-3 10lg0.5=−3,因此半功率点是-3dB,相当于功率下降为原来的1/2。
电压/电流/声量之比: d B = 20 l g X dB =20lgX dB=20lgX。原来在-3dB下变化为原来赋值增益的 2 / 2 \sqrt{2}/2 2 /2,也就是即 20 l g 2 / 2 = − 3 20lg\sqrt{2}/2=-3 20lg2 /2=−3.
2、滤波器的类型
类型 | 作用 |
---|---|
高通滤波器 | 衰减或消除指定频率以下的频率 |
低通滤波器 | 衰减或消除指定频率以上的频率 |
带通滤波器 | 允许指定频率范围内的信号通过 |
带阻滤波器 | 去除指定范围内的信号频率 |
3、各种滤波器的特点(FIR、IIR)
1、IIR使用滤波器的输出作为输入;而FIR不使用。
2、相对于FIR滤波器,IIR能使用相对较低的阶数和项数。
3、FIR与IIR相比,IIR的计算速度更快,但同样具有稳定问题以及非线性相位的问题。因此,IIR多用于实时的滤波器应用。
4、FIR在不同频率下的延迟一致;IIR在不同频率的延迟不同。
4、实现FIR滤波器
①仿真实现正弦激励的输入(200KHz以及15MHz正弦波)
使用matlab仿真实现正弦激励的输入(200KHz以及15MHz正弦波),采样后激励波形的值,记录在txt文档中,供testbench文件进行读取。matlab代码如下所示:
%将一个频率大小为200k以及15M的波形进行合成,模拟得出采样后的波形大小,间隔采
%后输入testbench测试文件,当作激励输入。f1=200e3; %设置第一个波的频率为200KHz
f2=15e6; %设置第二个波的频率为15MHzFs=50e6; %设置采样频率
L=1000; %数据长度大小为1000,采样点数
N=8; %数据位宽(决定每一个数据采集的精度)t=0:1/Fs:(L-1)*(1/Fs);%设置采样间隔;采样频率越高,采样的间隔越短y1= fix(63*(cos(2*pi*f1*t) + cos(2*pi*f2*t)));
%量化合成两种频率的波形(200KHz以及15MHz)plot(t,y1);
title('输入信号');
xlabel('时间');
ylabel('幅度');
fid=fopen('C:\路径\sin_data.txt','w'); %数据写入for k=1:length(y1)%二进制变换
B_s=dec2bin(y1(k)+((y1(k))<0)*2^N,N);
for j=1:N
if B_s(j)=='1'
tb=1;
else
tb=0;
end
fprintf(fid,'%d',tb);
end
fprintf(fid,'\r\n');
end
fprintf(fid,';');
fclose(fid);
②仿真FIR滤波器
参考文档: FIR滤波器的FPGA实现.
可以使用文中两种方式实现FIR滤波器,分别是直接实现,以及使用量化后的实现方式。下面放出自己使用matlab仿真后的效果图。(7阶的滤波器的8位量化的系数:4、28、46、61、61、46、28、4。)
滤波前的时域和频域:
滤波后的时域和频域:
③Vivado配置
Tips1:配置Vivado与vscode的联调环境,使用vscode作为Vivado的编辑器。
选择setting,选择文本编辑器为Custom Editor,并点击选中vscode安装目录下的Code.exe文件。
将路径输入Editor中:E:/路径/Code.exe [file name] -[line number],如下图所示。
配置完成后就可以自动使用vscode打开Vivado中的.v文件、仿真文件等,配置vscode中的相关代码补齐、高亮插件,编辑十分好用。
Tips2:使用vscode中的Testbench插件,直接生成仿真文件框架
安装testbench插件,使用ctrl+shift+p可以唤出。
运行Testbench后,可以直接在终端生成Testbench代码框架。对Testbench的使用十分方便。(如果遇到不能运行的情况,可以退出Vscode,并且在外面使用vscode打开.v文件,不适用Vivado的内部链接打开)
④Vivado配置FIR滤波器
具体代码可以参考参考文档: FIR滤波器的FPGA实现.
下面就不放出具体代码文本,本文参考直接实现的方式。将量化后的波形数据量,逐一输入至滤波器中,根据这个7阶的滤波器得其8位量化的系数:4 28 46 61 61 46 28 4。与系数相乘后,求和(相当于一次卷积操作)。得到滤波之后的结果。
⑤Vivado的Testbench文件
`timescale 1ns / 1ps
//
// Company:
// Engineer:
//
// Create Date: 2021/09/25 13:36:51
// Design Name:
// Module Name: tb
// Project Name:
// Target Devices:
// Tool Versions:
// Description:
//
// Dependencies:
//
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
//
//`timescale 1ns / 1psmodule tb_lpf_direct;// lpf_direct Parameters
parameter PERIOD = 20;// lpf_direct Inputs
reg clk ;//时钟
reg reset ;//复位信号
reg [7:0] x_in ;//输入信号// lpf_direct Outputs
wire [24:0] y_out; //输出信号integer i;initial begin clk = 0 ;reset = 0 ;x_in = 0 ;i = 0;
endinitial beginforever #(PERIOD/2) clk=~clk; //产生时钟
endinitial begin#(PERIOD*2) reset = 1; //复位信号
endparameter data_num = 32'd10000;
reg [7:0] data_men[data_num:1];//采用的是8位的数字,并且数据的长度为10000initial begin$readmemb("C:/路径/sin_data.txt",data_men); //每一个数据的读取
endalways @(posedge clk) begin //每一个时钟周期输入一个采样数据,放入x_in中x_in <= data_men[i];i <= i+1;
endlpf_direct u_lpf_direct (.clk ( clk ),.reset ( reset ),.x_in ( x_in [7:0] ),.y_out ( y_out [24:0] )
);endmodule
⑥Vivado运行仿真文件
1、选择波形为模拟波形显示,选择类型为有符号类型数据。
2、进行滤波仿真,x_in为输入的滤波波形数据,y_out为输出的滤波波形数据。
FIR仿真后的结果,低通滤波器将高频信号滤除,保留低频信号。
FPGA学习记录(2)<一般FIR滤波器的FPGA实现>相关推荐
- 基于FPGA的FIR滤波器的实现(5)— 并行结构FIR滤波器的FPGA代码实现
书接上回 三.并行结构的FPGA实现 设计实例 1.matlab参数与数据 2.使用Verilog编写并行结构的FIR滤波器 3.使用matlab将产生的程序进行仿真验证 三.并行结构的FPGA实现 ...
- FPGA学习记录(5)<低通带通FIR滤波器FPGA实现>
目录 Matlab仿真低通的FIR滤波器BLACKMAN窗并使用FPGA实现 (1)FIR&IIR介绍 (2)FIR的FPGA实现与matlab仿真(FIR&BLACKMAN窗& ...
- (多图) 基于并行流水线结构的可重配FIR滤波器的FPGA实现
1 并行流水结构FIR的原理 在用FPGA或专用集成电路实现数字信号处理算法时,计算速度和芯片面积是两个相互制约的主要问题.实际应用FIR滤波器时,要获得良好的滤波效果,滤波器的阶数可能会显著增加,有 ...
- 转置型FIR滤波器的fpga实现
这一节主要讲解一下转置型FIR滤波器实现. FIR滤波器的单位冲激响应h(n)可以表示为如下式: 对应转置型结构的FIR滤波器,如图1所示,抽头系数与上一节中讲解直接型FIR滤波器的实例相同,滤波器阶 ...
- 直接型FIR滤波器的fpga实现
FIR滤波器根据输入数据速率的不同可分为串行结构.半并行结构和全并行结构.串行结构的FIR滤波器是将并行数据串行输入,所需的DSP资源较少,但是数据吞吐率较低:而全并行结构的FIR滤波器数据是并行输入 ...
- 【DA算法】基于DA算法的FIR滤波器的FPGA实现
1.软件版本 quartusii 2.本算法理论知识 DA算法的主要特点是,巧妙地利用查找表将固定系数的MAC运算转化为查表操作,其运算速度不随系数和输入数据位数的增加而降低,而且相对直接实现乘法器而 ...
- FIR数字滤波器的FPGA实现(二)-串行FIR滤波器设计(1)
(二)FIR数字滤波器的FPGA实现-串行FIR滤波器设计 文章目录 (二)FIR数字滤波器的FPGA实现-串行FIR滤波器设计 0 串行FIR滤波器基本原理 1 基于移位寄存器的串行 FIR 滤波器 ...
- FIR数字滤波器的FPGA实现(二)-串行FIR滤波器设计(2)
(二)FIR数字滤波器的FPGA实现-串行FIR滤波器设计 文章目录 (二)FIR数字滤波器的FPGA实现-串行FIR滤波器设计 0 串行FIR滤波器基本原理 1 基于移位寄存器的串行 FIR 滤波器 ...
- FPGA学习步骤(打算以后也转FPGA了,毕竟工资比硬件工程师高)
学习FPGA,在不同层次的人明显有不同的答案.先说一句,说不要开发版的都是菜鸟级选手. 我把FPGA层次划分为,鸡蛋级别,菜鸟级别,老鸟级别,高手级别四类.我是鸡蛋级别的!啥也不会. 1)熟悉语法,其 ...
- 【FPGA学习笔记】 第一章: PLD/FPGA新手入门
第一章 PLD/FPGA新手入门 1. 可编程逻辑器件的发展历程 当今社会是数字化的社会,是数字集成电路广泛应用的社会.数字集成电路本身在不断地进行更新换代.它由早期的电 ...
最新文章
- 图像抠图算法学习 - Shared Sampling for Real-Time Alpha Matting
- 计算机表格最高分,excel表格里怎样算最高分 excel各个班的最高分
- 如何使用计算机中的导出,如何将iPhone手机中的音乐导出至电脑
- Actions require unique method/path combination for Swagger
- 使用函数指针实现父类函数调用子类函数的两种方式
- 越老越值钱,除了程序员!
- asp.net通过登录后修改个人信息_微信号终于可以修改了!快来改一个
- ArrayList和LinkedList使用不当,性能差距会如此之大!
- Mysql 面试常问4 -- 锁模块之事务并发访问产生的问题以及事务隔离机制 InnoDB支持事务
- Zen Cart 常用SQL命令
- 从代码中抽离数据的原则
- java序列化方式性能比较
- selenium 清空缓存
- 计算机工程师难度排名,【2018一级造价工程师考试各个科目的难度排行榜】- 环球网校...
- 小米pro蓝牙驱动linux,【小米笔记本蓝牙驱动下载】小米笔记本蓝牙驱动程序官方下载 V20.11 通用版-七喜软件园...
- RBM算法模型应用在推荐系统 Python代码实现
- FPGA学习笔记(七): DSB调制解调的仿真
- 计算机专业选什么笔记本cpu,笔记本电脑什么配置好?来看看这款硬核办公本
- IOS APP 隐私政策
- java hdms_网盘预研 - ZICK_ZEON的个人空间 - OSCHINA - 中文开源技术交流社区