第1个回答 推荐于2016-06-11
双线性法设计低通滤波器:
fp=1000;
fc=1200;
as=100;
ap=1;
fs=22000;
wp=2*fp/fs;
wc=2*fc/fs; %归一化截止频率
[n,wn]=ellipord(wp,wc,ap,as);%求数字滤波器的最小阶数和归一化截止频率
[b,a]=ellip(n,ap,as,wn);%求传递函数的分子分母系数
d=filter(b,a,y);%用设计的滤波器进行滤波
然后你把滤波前后的频谱画出来比较就好了.本回答被提问者采纳
第2个回答 2020-05-23
我们知道设计一个fir滤波器,首先要知道它的冲击函数,或者说它的系数,如何知道它的序数呢,那就要根据要求设计啦。matab中为我们提供了很多有用的窗函数,可以直接调用;不过从最优化的角度来说remez函数是最好的。其优点是,设计指标相同时,使滤波器阶数最低;或阶数相同时,使通带最平坦,阻带最小衰减最大;通带和阻带均为等波形形式。具体用法可以参考matalb中的帮助文件。同样matlab里面的toolbox中也有一个工具filterdesign是直接可以用来设计滤波器的,你只要直接输入设计要求既可以得出序数。
设计好了滤波器,我们下一步就是如何用vhdl实现它。由于我们用matalb得到的系数是浮点数,处理起来不方便。这就要求我们将其定点化,如何定点化呢,就是将它化为整数,乘以一个倍数即可。但是为了后面处理方便,一般是乘以2的n次方。定点化后就根据滤波器输入与输出的关系式进行编程,其实就是一个相乘累加的关系。最后结果我们要再缩小。还有一个问题就是结果用什么形式的数来表示,我觉得用补码表示比较好一点,因为很多AD或DA都是补码的,计算机内也是这样的。