基于Simulink的FIR滤波器设计与仿真--初识matlab

一直对信号分析与处理有着比较浓厚的兴趣,只可惜数学水平挺一般,难以将兴趣发展为job,因此就蜻蜓点水了。

公司里的几乎人人都会simulink,而我是十足的门外汉。看别人用得行云流水总是挺眼馋的,于是也班门弄斧试试。

实现的功能是将三个幅度都为1初相位0,频率分别为10Hz20Hz30Hz的正弦信号叠加在一起,将混叠后的信号通过一个带通滤波器,只剩下20Hz的正弦信号,用示波器显示滤波前与滤波后的效果。

首先从matlab主界面启动simulinknew一个model,找到signal procesing blockset->filter designs,添加一个FDATool模块,如图所示:

 然后找在simulink->sourcesmodel中添加三个sine wave模块,如下图所示:

 

接着在simulink->math operations下添加一个add模块,如图:

最后再simulink->sinks下添加两个scope模块:

 

 

 

 

 

 

 

添加完成后,我们先要做必要的参数设置,对sine wave模块的设置方法是双击该模块,10Hz信号发生模块参数设置为如下图所示:

这里频率是以归一化角频率出现,我们应该设置的值为w=f*2*pi。还有采样周期我设置的是0.001s,远高于奈奎斯特采样率,理论只需大于60Hz,我这样做的原因是使后面的波形显示更平滑,因为后面滤波器的显示输出采用的是零阶保持输出,采样过低导致显示效果很差。

另外两个sine wave模块的设置类似。

 

然后还要设置add模块的参数。因为默认只有两个输入端,我这有三个。双击add模块,将++改为+++即可。设置如下:

 

 

 

 

 

然后就是scope模块的设置,默认只有一个输入,我将一个设置为两个输入,对比滤波前后的信号波形,另一个设置为三输入,分别检测三个信号源。

设置scope的方法是先双击,然后找到参数设置按钮,如下所示:

 

点击参数标签,如下:

将里面number of axes设置成需要的输入通道数目即可。

 

接下来就是滤波器核心模块设置了,双击FDATool模块,配置成为如下:

这里面有很多参数我现在还没搞懂是什么作用,比如那个Density Factor,不过先放一边吧。注意采样频率设置为1KHz,阻带衰减我都只设置为20分贝,因为是仿真嘛,实际肯定是不够的。让后点击DesignFilter生成滤波器,发现滤波器阶数是216,高得挺吓人的啦,都知道FIR滤波器阶数比IIR要高,但如此高还是让我惊讶得厉害,认真想想,由于我是从10Hz~30Hz中间滤出20Hz,滤波器肯定是很痛苦的嘛。况且我的采样率设置得那么高,所以216阶也就不足为怪了。

 

 

最后的model线路连接如下:

仿真前最后还有一步,就是设置simulink的求解器,在菜单中选择simulation->configuration parameters,如下图:

仿真时间设置为2s就够了,那个solver选项选为discrete(XXXX)一项,虽说是仿真离散系统,但具体为甚么要这样我还不清楚。

 

完了就可以开始仿真了,仿真的结果如下:

第一个是滤波器输出信号,第二个是混叠信号。

可以看到,滤波器从混叠信号中还原出了20Hz的信号,效果还挺不错的,呵呵!

 

这里有个小细节,有人可能会问为啥滤波器输出信号开始有一段很不规整?我想是因为滤波器的初始状态值不确定(软件可能设为0吧,反正我是不知道),由于是216阶的,那么滤波器必须要采样216个数据后才能输出稳定的值。

评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值