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(abs(rcos_filter));
rcos_filter=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位,

  • 0
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值