在讲解滤波器的种类之前,必须先讲解滤波器实现滤波的过程。怎么实现?matlab中是可以用filter函数,那总不能在单片机或者FPGA中也调用filter函数吧。可能吗?
不可能!
那怎么实现滤波过程呢?先来了解滤波过程的本质,就是乘加运算。FPGA里面实现乘加运算时非常容易的。
先来看看FIR滤波器在窗函数设计方式中采用不同窗的效果。怎么观察效果?肯定是通过幅频响应了。
数字信号处理中通常是取其有限的时间段进行分析,而不是对无限长的信号进行测量和运算。具体做法是从信号中截取一个时间段,然后对信号进行傅里叶变换、相关分析等处理。信号的截断产生了能量泄漏,而用FFT计算频谱又产生了栅栏效应,从原理上讲这两种误差都是不能消除的。在FFT分析中为了减少或消除频谱能量泄漏及栅栏效应,可采用不同的截取函数对信号进行截短,该函数称为窗函数,简称为窗。
泄漏与窗函数频谱的两侧旁瓣有关,对于窗函数的选用总的原则是,要从保持最大信息和消除旁瓣的综合效果出发来考虑问题,尽可能使窗函数频谱中的主瓣宽度应尽量窄,以获得较陡的过渡带。旁瓣衰减应尽量大,以提高阻带的衰减,但通常都不能同时满足这两个要求。频谱中的如果两侧瓣的高度趋于零,而使能量相对集中在主瓣,就可以较为接近于真实的频谱。不同的窗函数对信号频谱的影响是不一样的,这主要是因为不同的窗函数,产生泄漏的大小不一样,频率分辨能力也不一样。信号的加窗处理,重要的问题是在于根据信号的性质和研究目的来选用窗函数。
在设计FIR滤波器时,同样要求窗函数不仅可以影响过渡带宽度,还能影响肩峰和波动的大小。因此,,选择窗函数应使其满足以下两个要求:
(1)主瓣宽度尽量小,以使过渡带尽量陡。
(2)旁瓣相对于主瓣越小越好,这样可使肩峰和波动减小,即尽可能集中于主瓣内。
fir1函数默认使用的是什么窗呢?
在matlab的help中查找该函数就能知晓!
还有哪些窗可以选择呢?
再来看看程序如何?
理论和仿真结合在一起,
会使得大家牢固的掌握概念。
格式必须规范!
这里只举高通滤波器和低通滤波器的例子。
程序很简单。
只要同学们花时间就能搞清楚。
规范的写程序是写好程序的开始!
继续讲解滤波过程的乘加等效原理。
用程序说话是硬道理!
生成一个滤波器!
写程序伴随着注释会让程序很亲民哦!
fir_order = 128;
%滤波器的阶数
fir_low_filter = fir1(fir_order,0.2);
%fir1函数
使用filter函数进行滤波!
filter_sin_signal = filter(fir_low_filter,1,sin_signal);
怎么用乘加等效呢?
思考一下再看程序!
for i=129:length(sin_signal)
sum = 0;
for ii=1:length(fir_low_filter)
sum=sum+sin_signal(i-(ii-1))*filter_sin_signal(ii);
end
filter_sin_signal1(i)=sum;
end
看看结果会一致吗?
肯定的啦!
是不是和卷积过程很像啊?好吧,尴尬的告诉大家,其实就是卷积。这就是为什么在课上强调卷积是《数字信号处理课程》基础的原因!
未完,待续!
责任编辑:xj
原文标题:电气信息类专业课程之matlab系统仿真 第三章 滤波器的种类(1)
文章出处:【微信公众号:算法工匠】欢迎添加关注!文章转载请注明出处。
全部0条评论
快来发表一下你的评论吧 !