FPGA设计滤波器使用matlab生成的滤波器系数
·
一、生成系数
1.打开 MATLAB(任意一个版本)在命令行输入以下指令
filterDesigner
2.选择对应的滤波器类型,左下角几个框框即为滤波器类型,图中为直接型FIR滤波器,接着根据自己的需求填响应类型(低通、高通、带通、带阻),并选择采样频率及通带和阻带频率,选择好之后,点击设计滤波器。

3.在界面选择文件-导出,导出到工作区,变量名是Num,所设计的滤波器系数即可出现在工作区。

4.把浮点系数转成 FPGA 可用的量化系数,FPGA 不能直接处理浮点数,必须把系数量化成整数,在命令行输入:
% 1. 获取系数
h = Num;
% 2. 归一化并量化为16位(范围:-32768 ~ 32767)
scale = 2^15 - 1; % 最大正系数为32767
h_scaled = round(h / max(abs(h)) * scale);
% 3. 生成Vivado需要的.coe文件
fid = fopen('fir_coeffs.coe', 'w');
fprintf(fid, 'radix=10;\n'); % 十进制格式
fprintf(fid, 'coefdata=');
for i = 1:length(h_scaled)
fprintf(fid, '%d', h_scaled(i));
if i < length(h_scaled)
fprintf(fid, ',');
else
fprintf(fid, ';');
end
end
fclose(fid);
运行后,会得到一个 fir_coeffs.coe 文件,这个文件就是给 Vivado 用的。
二、Vivado中使用
1.打开vivado的IP Catalog,搜索FIR,即FIR滤波器

2.在Coefficient Source 选 COE File,将刚刚生成的coe文件导入,其他的参数根据系统设计来配,比如信号位宽,系统时钟,采样率等。

3.生成完之后,点击vivado中的IP核例化模板进行例化,将自己的时钟、输入信号及输出信号接到例化里即可。

更多推荐


所有评论(0)