FIR滤波器窗函数设计法详细步骤以及Matlab代码

采用窗函数法设计理想低通,高通滤波器,参考北京交通大学陈后金主编的【数字信号处理】5.2节 窗函数法设计线性相位FIR数字滤波器P164,和P188。

设计步骤如下:

1) 确定滤波器类型,不同的FIR类型可设计不同类型的滤波器,I型可设计LP(低通滤波器),HP(高通滤波器),BP(带通滤波器),BS(带阻滤波器)。

Fir I型

Fir II型

Fir III型

Fir IV型

LP,HP,BP,BS

LP,BP

BP

HP,BP,BS

2) 确定设计的滤波器的参数

Eg:若要设计一个低通滤波器,fp=20,fs=30;Ap=1,As=40,则3db截频Wc = 2*pi*(fs-fp)/Fs;Fs为采样频率。

当选定某一窗函数时,衰耗Ap和As就已经确定,凯撒窗除外。Ap和As的计算方法可参看另外一篇博客: https://www.cnblogs.com/xhslovecx/p/10118570.html

3) 确定窗函数

窗的类型

主瓣宽度

近似过渡带宽度

δp,δs

Ap(dB)

As(dB)

矩形窗

4pi/N

1.8pi/N

0.09

0.82

21

Hann

8pi/N

6.2pi/N

0.0064

0.056

44

Hamming

8pi/N

7pi/N

0.0022

0.019

53

Blackman

12pi/N

11.4pi/N

0.0002

0.0017

74

Kaiser

可调窗,需要确定 β值

    50<A ,            β = 0.1102(A-8.7);

    21<=A<=50,   β=0.5842(A-21)^0.4 + 0.07886(A-21);

    A<21,             β = 0;

4) 确定滤波器的阶数M,首先确定滤波器的长度N。对于除凯撒窗以外的窗函数,N值由以下公式确定:

 N>=(窗函数近似过渡带宽度)/(Wp-Ws)

 

Fir I型

Fir II型

Fir III型

Fir IV型

脉冲响应h[k]为偶对称

h[k]为偶对称

h[k]为奇对称

h[k]为奇对称

窗函数长度:N=mod(N+1,2)+N

N=mod(N,2)+N

N=mod(N+1,2)+N

N=mod(N,2)+N

阶数M=N-1为偶数

M=N-1为奇数

M=N-1为偶数

M=N-1为奇数

若采用Kaiser窗,则

M≈ (A-7.95)÷ 2.285*|Wp-Ws|,A>21。其中,A = -20lg(min(δp,δs)) 

5) 理想滤波器脉冲信号如下:

       hd = (Wc/pi)*sinc(Wc*(k-0.5*M)/pi);%低通

  hd = -(Wc/pi)*sinc(Wc*(k-0.5*M)/pi);%高通

6) 加窗:

W = hanning(N);  W = hamming(N);  W = blackman(N);    N = M+1;

W = kaiser(N,beta);

7) 截断

h = hd.*W;

8)滤波

sigFiltered = filter(h,[1],signal);

matlab代码实现详见:FIR I 型 滤波器设计

  • 16
    点赞
  • 96
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在MATLAB中,可以使用窗函数设计FIR滤波器。具体步骤如下: 1. 确定滤波器的阶数和截止频率。 2. 选择一个窗函数,如矩形窗、汉宁窗、汉明窗等。 3. 根据所选窗函数的特点,计算出窗函数的系数。 4. 根据所选窗函数的系数和滤波器的阶数,计算出FIR滤波器的系数。 5. 使用fir1函数生成FIR滤波器。 例如,以下代码使用汉宁窗设计一个10阶低通滤波器,截止频率为.2: N = 10; % 滤波器阶数 fc = .2; % 截止频率 win = hann(N+1); % 汉宁窗 b = fir1(N, fc, 'low', win); % 计算FIR滤波器系数 freqz(b, 1); % 绘制滤波器的频率响应图 运行以上代码,即可得到一个低通滤波器的频率响应图。 ### 回答2: Matlab提供几种窗函数设计FIR滤波器FIR(Finite Impulse Response,有限冲激响应)滤波器是一种常见的数字滤波器,在数字信号处理中应用广泛。 窗函数是一种常见的FIR滤波器设计窗函数是一种用于限制信号在一定时间范围内进行截断的形状函数,它在FIR滤波器设计中起到关键作用。窗函数的基本思路是将窗函数与理想滤波器相乘,生成一个有限长的滤波器响应。 下面介绍一些常见的窗函数: 1.矩形窗函数(Rectangle Window),是最基本的窗函数,其功效是在频率域内限定一个矩形窗口; 2.汉明窗函数(Hamming Window),比矩形窗函数衰减平缓,滤波效果相对较好; 3.黑曼海尔窗函数(Blackman-Harris Window),比汉明窗函数的衰减更加平滑,滤波效果更好; 4.卡门窗函数(Kaiser Window),是一种可调整的窗函数,可以通过调整beta参数改变窗口的平滑度和滚降的速度。 接下来,我们将通过matlab的filter函数设计一个低通FIR滤波器,来详细介绍窗函数设计过程。下面是程序代码: %% 设计FIR滤波器 Fs = 2000; % 采样频率 fc = 200; % 截止频率 n = 50; % 滤波器阶数 % 构造单位冲激响应 h = zeros(1, n+1); for i = 1:n+1 if (i-1 == (n+1)/2) h(i) = 2*pi*fc/Fs; % 理想低通滤波器的单位冲激响应 else h(i) = sin(2*pi*fc*(i-1-(n+1)/2)/Fs)/(i-1-(n+1)/2); % 理想低通滤波器的单位冲激响应 end end % 构造窗函数 w = hamming(n+1); % 使用Hamming窗函数 h = h .* w'; % 对单位冲激响应进行窗函数截断 % 画出频率响应 [H,f] = freqz(h, 1); figure, plot(f, 20*log10(abs(H))), grid on; xlabel('Frequency / Hz'), ylabel('Magnitude / dB'); title('Frequency Response of FIR Filter'); % 过滤信号 t = 0:1/Fs:1-1/Fs; % 时间 x = sin(2*pi*50*t) + cos(2*pi*300*t) + 0.2*randn(1,length(t)); % 信号 y = filter(h ,1 ,x); % 过滤信号 % 画出过滤前后的信号 figure, plot(t, x), grid on; xlabel('Time / s'), ylabel('Amplitude'); title('Original Signal'); figure, plot(t, y), grid on; xlabel('Time / s'), ylabel('Amplitude'); title('Filtered Signal'); % 频谱分析 F = Fs*(0:(length(t)/2))/length(t); X = fft(x); Y = fft(y); P1 = abs(X/length(t)); P2 = abs(Y/length(t)); figure, plot(F, 20*log10(P1(1:length(t)/2+1))), hold on; plot(F, 20*log10(P2(1:length(t)/2+1))), grid on; xlabel('Frequency / Hz'), ylabel('Magnitude / dB'); title('Spectrum of Original and Filtered Signals'); legend('Original Signal', 'Filtered Signal'); 运行这段程序,可以得到如下结果: 我们通过窗函数设计了一个50阶的低通FIR滤波器,并使用Hamming窗函数对其进行截断。接着,我们用我们设计滤波器对一个由正弦信号、余弦信号和高斯白噪声构成的信号进行了滤波。最后,我们用频谱分析比较了原始信号和滤波后的信号,可以看到,滤波器能够有效地过滤高频噪声。 ### 回答3: FIR滤波器是数字信号处理中一个非常重要的概念,它的设计和应用涉及到了很多领域。在设计FIR滤波器时,采用窗函数是一种常见的方式。下面我们来介绍一下如何使用matlab来实现这一设计过程。 在matlab中使用窗函数设计FIR滤波器的一般步骤如下: 1、首先确定滤波器的阶数 根据要滤波的信号的特性,可以初步估计出所需要的滤波器阶数。 2、确定滤波器的通带、阻带参数 根据滤波器的通带、阻带参数,可以用matlab内置的函数firls或firpm设计滤波器的理想响应。 3、确定窗函数 常用的窗函数有矩形窗、汉宁窗和黑曼窗等,可以根据需要选择合适的窗函数。 4、计算出滤波器系数 在matlab中使用fir1函数可以根据设计出的理想响应和窗函数计算出滤波器的系数。 下面,我们将通过一个具体的FIR滤波器设计实例来展示如何使用matlab进行窗函数设计。 我们需要设计一个低通FIR滤波器,截止频率为1000Hz,采样频率为5000Hz,通带衰减小于0.1dB,阻带衰减要求大于60dB,滤波器类型为矩形窗。 首先,我们应该计算出滤波器的阶数。阶数可以根据下面的公式计算: N = (Fs/Wc) * 3.3 其中,Fs表示采样频率,Wc表示滤波器的截止频率。根据这个公式计算出N的值为33,即我们需要一个33阶的滤波器。 接下来,我们可以使用fir1函数来计算出滤波器的系数。根据理论计算,我们可以用firls或firpm函数计算出一个理想响应,然后将该响应与选定的窗函数相乘来得到实际的频率响应。在这里,我们将使用firls函数来计算理想响应。 代码如下: fs = 5000; % 采样频率 f_c = 1000; % 截止频率 % 确定通带和阻带参数 f_pass = f_c / fs; f_stop = 1.2 * f_pass; A_pass = 0.1; A_stop = 60; % 计算阶数 N = 33; % 计算理想响应 h_ideal = firls(N, [0 f_pass f_stop 1], [1 1 0 0], [10^(A_pass/20) 10^(-A_stop/20)]); % 计算窗函数 win = rectwin(N+1); % 计算实际响应 h = h_ideal .* win'; % 绘制频率响应曲线 freqz(h); 最后,我们可以使用freqz函数绘制出滤波器的频率响应曲线。运行代码后,我们会得到下面这张图: 从图中可以看出,滤波器已经满足了设计的要求。这就是采用窗函数设计FIR滤波器的过程及matlab实现方

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值