原创 FIR滤波器的加窗是什么

2018-7-23 15:26 6054 16 3 分类: 处理器与DSP

窗函数法是一种设计FIR滤波器的方法,FIR全称为Finite impulse response,即有限冲激响应滤波器。

通带为的理想低通滤波器的系统函数为

反变换求它的冲激响应为

可以看出,这是一个sinc函数

可以看出,的冲激响应在时域上是无限长的,不符合FIR滤波器的要求,所以需要对它截断,也就是加窗。

为了得到一个长度为M的因果的线性相位的FIR滤波器,我们需要

也就是让之外的值全为0,这就是加窗。这个过程可以表示为

即为窗函数

在这里我们将定义为

再看看频域,使用表示因果FIR滤波器的响应,表示理想滤波器,表示窗函数响应。

时域相乘,频域卷积,这里是圆周卷积。(圆周卷积以后也会介绍)

我想在MATLAB中模拟这个加窗的过程,但是一直弄不出来,就把书上的图拿过来吧。

我不知道为什么我卷积出来的频域波形和窗函数的频域波形是一样的,很尴尬。

不过窗函数的原理基本还是理解了,直接生成书上卷积出来的频域波形不难,在matlab中直接生成一个FIR滤波器(相当于加了矩形窗),然后求它的频响。

代码如下:
子程序

function hd = ideal_lp(wc,M)
alpha = (M-1)/2;
n = [0:1M-1)];
m = n - alpha + eps;        % add smallest number to avoid divide by zero
hd = sin(wc*m) ./ (pi*m);

主程序

wc = 0.2*pi;
M = 60;
hd = ideal_lp(wc,M);
w_rect = (rectwin(M))';
h = hd .* w_rect;
fvtool(h);

◆ ◆ ◆  ◆ ◆

参考书籍:

  • Digital Signal Processing Using Matlab v4.0  John G. Proakis
  • 《数字信号处理教程》 程佩青

◆ ◆ ◆  ◆ ◆

个人博客


文章评论2条评论)

登录后参与讨论

用户3871648 2018-7-24 12:48

支持学习类的帖子,初学者共同进步

greedyhao 2018-7-23 15:27

我也是刚开始学习数字信号处理,有什么地方存在问题还请多多指教。
相关推荐阅读
greedyhao 2019-03-17 09:03
uboot链接脚本分析
上一篇uboot主编译脚本分析的编译选项参数中提到了链接脚本这么个东西我也是写到这里才开始了解链接脚本(Linker command scripts),之前只是大概知道有这么一个东西先从参考资料中的内...
greedyhao 2018-11-28 08:49
51总线方式获取adc0809数值
最近单片机有一个实验挺有意思的,使用51单片机以总线的方式读取adc0809的数据先补充点关于单片机总线的预备知识,我一开始不了解总线的时候做这个实验也是很懵逼的。单片机的三总线结构​51单片机有三条...
greedyhao 2018-09-29 21:18
对Xil_Out32未定义的引用
第一次在HLS中遇见一个官方库函数未定义问题,这就把解决方法记录下来。在创建好工程,写完工程代码后,发现报错如下./src/led_controller_test_tut_4A.o:在函数‘main’...
greedyhao 2018-09-29 21:12
Vivado生成Bitstream失败的解决方法
跟着实验指导书,难得的又遇到问题了,在最后生成Bitstream的时候出错了,无法生成Bitstream。报错信息如下[DRC NSTD-1] Unspecified I/O Standard: 4 ...
greedyhao 2018-09-17 22:26
zybo初体验
前段时间过生日,亲戚给了些钱让我自己买生日礼物,早就想搞一块zynq的板了,但是淘宝一看太贵,于是去咸鱼上淘了一块二手的ZYBO(谁知道是不是二手,反正看着挺新)来玩玩。学习肯定是从官方资料开始的,T...
greedyhao 2018-09-13 10:53
运行c代码前发生了什么
众所周知,c代码也是一种比较高级的语言了,机器是没有办法直接运行的,机器所能理解的只有机器码--那一串0和1而已。虽然早就知道c代码是先经过编译链接最后才放在机器上执行,但是在这么一个过程中究竟发生了...
我要评论
2
16
关闭 站长推荐上一条 /2 下一条