关于数字化滤波器设计的一些问题

17 篇文章 6 订阅

1.滤波器设计中具体频率的意义都是设计者赋予的。

设计中使用的参数都是具体频率与采样频率的比值。例如符号速率1050bps,采样频率fs=4200hz,设计低通滤波器,过渡带1050~1050*1.2hz,通带阻带容限dev为0.1,采用kaiserord滤波器,设计滤波器系数。代码如下

ps=1050;
fc=[1*ps,ps*1.2];
Fs=4200;
mag=[1 0];
dev=[0.01 0.01];
[n,wn,beta,ftype]=kaiserord(fc,mag,dev,Fs);
fpm=[0 fc(1)*2/Fs fc(2)*2/Fs 1];
magpm=[1 1 0 0];
normal_lpf=fir1(n,wn,ftype,kaiser(n+1,beta));

当符号速率10500bps,采样频率fs=42000hz,其他参数保持不变时,设计出来的滤波器抽头系数与之前时是一样的。

ps=10500;
fc=[1*ps,ps*1.2];
Fs=42000;
mag=[1 0];
dev=[0.01 0.01];
[n,wn,beta,ftype]=kaiserord(fc,mag,dev,Fs);
fpm=[0 fc(1)*2/Fs fc(2)*2/Fs 1];
magpm=[1 1 0 0];
normal_lpf=fir1(n,wn,ftype,kaiser(n+1,beta));

2.内插滤波器

内插 FIR 滤波器简写为 IFIR 滤波器,英文名为:Interpolated FIR Filter
内插 FIR 滤波器和传统的 FIR 滤波器有类似的结构,唯一的区别就是将单位延迟替换为了 k -1个延迟单元,其中 k 称为 0填充因子。
下图是 N 抽头的IFIR滤波器:
在这里插入图片描述
该体系结构在功能上相当于在原型滤波器系数集的系数之间插入k-1零
在指定IFIR体系结构时,在coefficient文件中提供了完整的原型系数集,而不包含零填充因子所暗示的零。零填充因子是通过过滤器用户界面定义的。例如,考虑如图3-48所示的.coe文件中的过滤系数数据。
在这里插入图片描述如果指定k=2的零填充因子,则等效滤波脉冲响应如图3-49所示。
在这里插入图片描述
若零填充系数变为k=3,则脉冲响应为 图3-50。
在这里插入图片描述
这些例子使用对称的原型脉冲响应;这不是过滤器核心的限制。原型滤波器系数集可以是对称的、非对称的或负对称的。
内插滤波器是一种单速率系统,用于生成窄带滤波器的有效实现,通过一些小的改进,可以容纳宽带滤波器。当使用内插滤波器时,没有固有的速率变化——输入速率与输出速率相同

3.滤波器时域插零

,没有很好地理解(有人懂这种滤波器的作用的麻烦留言教一下)
如下图所示,时域数据插零。频域压缩了,变成了通-阻-阻-通–通-阻-阻-通滤波器。或者认为高采样率下,实现低通(这次低通的频率更低了)exm?或者实现窄带滤波?

clear all
%滤波器设计
ps=10500;
fc=[1*ps,ps*1.2];
Fs=42000;
mag=[1 0];
dev=[0.00001 0.00001];
[n,wn,beta,ftype]=kaiserord(fc,mag,dev,Fs);
fpm=[0 fc(1)*2/Fs fc(2)*2/Fs 1];
magpm=[1 1 0 0];
normal_lpf=fir1(n,wn,ftype,kaiser(n+1,beta));
%plot时域频域
figure(1)
plot(normal_lpf)
a=abs(fft(normal_lpf));
len=length(a);
figure(2)
plot(a(1:round(len/2)));
%interpolated后
k=4;
inter=zeros(k*len,1);
for i=1:len
    inter(k*i)=normal_lpf(i);
end
%plot时域频域
figure (3)
plot(inter);
figure (4)
b=abs(fft(inter));
plot((b(1:round(len*k/2))));

interpolated之前滤波器时域频域图
在这里插入图片描述

在这里插入图片描述
interpolated之后滤波器时域频域图
通-阻-阻-通

在这里插入图片描述

3.2.时域信号后补零呢?

在这里插入图片描述在这里插入图片描述
可以看到时域后补零是提高了频率分辨率。

4.vivado滤波器ip核–number of coefficient sets

FIR滤波器之 多个系数集问题
对于多系数过滤器,单个.coe文件用于指定系数集。 每个系数集应附加到前一组系数。
例如,如果设计了一个2系数集,10抽头对称滤波器,
系数集#0为:coefdata = -1,-2,-3,4,5,5,4,-3,-2 ,-1;
和系数集#1是:
coefdata = -9,-10,-11,12,13,13,12,-11,-10,-9;
那么整个过滤器的.coe文件就是
radix = 10;
coefdata = -1,-2,-3,4,5,5,4,-3,-2,-1,-9,-10,-11,12,13,13,12,-11,-10 ,-9;
多组实现中的所有系数集必须表现出相同的对称性。 例如,如果一组甚至多组具有非对称系数结构,则使用该结构实现所有组。 所有系数集也必须具有相同的向量长度。 如果一个系数集具有较少的系数,则它必须为零填充 - 在非对称或前置时附加零,并在对称时附加相等数量的零。

5.interpolation滤波器

当需要提高采样率时,在两个相邻的数据之间插入I-1个零值,再进行低通滤波,这个过程称作I倍内插,采样率变为原来的I倍。
与之对应的降低速率decimation滤波器。

6.vivado配置

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

在这里插入图片描述
“Symmetric”,对称结构,也可以选择为“Inferred”系统自己判断。
在这里插入图片描述

5.ip核接口说明

Vivado的很多IP核采用的是AXI4接口,主要有数据(tdata)、准备好(tready)、有效(tvalid)几种信号,还有主机(m)和从机(s)之分。另外在Interface这个Tab还可以配置使用更多辅助的AXI4接口信号。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

需要注意,AXI4接口的tdata位宽是以字节为单位,即只会是8的倍数,虽然本例中实际输出数据位宽位12bit,因此需要结合设计的实际位宽做相应处理。

6.例化

lowpass_filter lowpass_filter_I(
.aclk(clk), 
.s_axis_data_tvalid(1), 
.s_axis_data_tready(), 
.s_axis_data_tdata({{4{VDB_I[11]}},VDB_I}), 
.m_axis_data_tvalid(), 
.m_axis_data_tdata(VDB_LP_I)
);	
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值