sysgen和matlab不匹配,基于SYSGEN的FIR滤波器系数重加载功能实现与仿真

System Generator中的FIR Compiler模块在信号处理中有着广泛的应用,其不仅可以通过在配置页中的Coefficient Vector中直接写入滤波系数,还可以通过模块提供的接口进行动态重加载。

FIR Compiler模块提供了两种滤波器系数重加载方法,一种是reload方法,利用reload接口写入新系数,另一种是config方法,提前将系数分组后写到Coefficient Vector中,再通过config接口写入系数组编号,选择相应的滤波器系数。以下分别介绍。

Reload 方法

Reload方法配置步骤:

Step1: 利用fdatool生成初始滤波器系数,填入coefficient vector中。(注意,生成的滤波器系数的个数是fdatool中order(阶数)加1)

58a808df1e8d4b3b715f4be085e492b6.png

320c5fc93903239842a6e93977f6cbe6.png

Step2: 勾选Use Reloadable Coefficients选项,点击Apply按钮,这时FIR Compiler模块会自动添加reload信号接口。

618fe69d6ea2613ca432758a14ed5a7a.png

Step3: 搭建逻辑,提供reload接口信号和config信号,各个信号的定义及说明如下:

名称

定义及说明

Config_tvalid

config有效信号,由Reload_tlast信号延时几个周期实现

Config_tdata_data

config参数,此处固定写0

Reload_tvalid

Reload有效信号,高电平clk个数应等于reload数据长度

Reload_tlast

Reload数据结尾指示,1个clk宽度

Reload_tdata_data

Reload数据,即要配置的新系数

仿真与测试设计:

为测试config方法,利用DDS模块产生两个不同的点频(20MHz、40MHz),相加后输出给FIR Compiler模块。FIR Compiler模块初始滤波器截止频率设置为20MHz。

利用matlab生成要配置的滤波器系数,该新滤波器截止频率设为60MHz,阶数设置为51(与FIR Compiler模块初始滤波器阶数一致);仿真结果及主要信号波形如下。

7e9742e866706441a2f3c4890368d104.png

25bd67e13dbbb63291573c43f8fa594f.png

由图可以看出,在reload前,输入的20MHz和40MHz信号仅20MHz可以输出,40MHz信号被初始滤波器(截止频率40MHz)滤掉,在reload后,由于新滤波器系数的截止频率为60MHz,因此两个频率的信号都可以正常输出。达到了动态reload滤波器系数的功能。

2. config 方法

与reload方法相比,config方法较为简单,缺点是灵活性不够,需要提前规划好所有需要重配置的滤波器系数。其步骤为:

Step1:提前在matlab中生成所需要的多组滤波器系数,并按顺序写入coefficient Vector中,在Number of Coefficient Sets填入组数。

0417059fe80c034925fcb5091854e8ec.png

Step2:点击了Apply后,FIR Compiler模块会自动添加Config信号接口。

6dd5bf361984d58f3523ad9400d212d5.png

Step3: 搭建逻辑,提供config接口信号,各个信号的定义及说明如下:

名称

定义及说明

Config_tvalid

config有效信号,高有效

Config_tdata_fsel

滤波系数组编号,0对应第1组,1对应第2组,以此类推。

仿真与测试设计:

与config方法相同,利用DDS模块产生两个不同的点频(20MHz、40MHz),相加后输出给FIR Compiler模块。

利用matlab生成两组要配置的滤波器系数,第1组滤波器截止频率设为60MHz,第2组滤波器截止频率设为30MHz,阶数设置都为51;仿真结果及主要信号波形如下。

e9d950f9a724f247e90a0986379264b2.png

由图可以看出,由于第1组滤波器系数的截止频率为60MHz,因此输入的20MHz和40MHz信号都可以输出,在config后,40MHz信号被第2组滤波器(截止频率30MHz)滤掉,因此只有20MHz信号可以正常输出。达到了动态config滤波器系数的功能。

两种方法涉及到的滤波器生成代码如下。

%%

n = 51; % 滤波器阶数

wn = 0.2; % 通过频率为 fs/2*0.2 = 30MHz

coef_0p1=fir1(n,wn); % 滤波器系数

coef_0p1 = round(coef_0p2*(2^16-1000)); % 滤波器系数量化

%%

n = 51; % 滤波器阶数

wn = 0.4; % 通过频率为 fs/2*0.4 = 60MHz

coef_0p2=fir1(n,wn); % 滤波器系数

coef_0p2 = round(coef_0p2*(2^16-1000)); % 滤波器系数量化

文章来源: blog.csdn.net,作者:戴斯班克,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/fooleyou/article/details/110878538

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值