vivado fir核 实现 成型滤波及其前端速率匹配

一、滤波器系数生成
B = rcosfir(R, N_T, RATE, T)
N_T可以是小数,
rom初始数据所需的coe文件用:memory_initialization_radix=2;
memory_initialization_vector=
fir加载滤波器系数所需的coe文件用:radix=10;
coefdata=

clear all
N=14;%系数位数
rcos_filter=rcosfir(0.35,7.5,4,1);%
max_rcos_filter = max(rcos_filter);
rcos_filter=abs(round(rcos_filter/max_rcos_filter*(2^(N-1)-1))';
fid=fopen('shape.coe','wt');
fprintf(fid,'Radix = 10;\n');
fprintf(fid,'CoefData=\n');
for i=1:length(rcos_filter)
    if(i~=length(rcos_filter))
      fprintf(fid,'%d,\n',rcos_filter(i));
    else
      fprintf(fid,'%d;\n',rcos_filter(i));
    end
end
fclose(fid);

2.生成fir核
shape_fir61X8 U_shape_fir61X8(
.aclk(clk_in),
.s_axis_data_tvalid(map2shape_fir_vld) ,
.s_axis_data_tready(fir_rdy) ,
.s_axis_data_tdata ({map2shape_dat_i,map2shape_dat_q}),
.m_axis_data_tvalid(m_axis_data_tvalid),
.m_axis_data_tdata ({fir_dout_i,fir_dout_q})
);
插值倍数为4倍
在这里插入图片描述
number of channels 表示时隙(串行)
number of paths 表示通道(并行)
比如我iq两路便可以设置number of paths =2;或者设置为1,例化两个ip核。

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

补充:四倍成型
在这里插入图片描述

第一个数0001c2的由来:
输入数据A6(-0.707),8位有符号数
滤波器系数第一个-5,14位有符号数
先将两乘数扩展为24位再相乘
为什么是24位?AXI总线结构必须以字节为单位
在这里插入图片描述

如果是扩展到22位的话是c001c2 ,所以应该不是扩展到22位
在这里插入图片描述

ps:这里我设置的输入数据小数位为0,即A6(10100110)表示-90,
-90*-5=450 (1c2)是正确的。
但是如果我设置小数位为7位,

猜你喜欢

转载自blog.csdn.net/weixin_44884357/article/details/116273577