在Matlab中使用Window方法设计FIR滤波器

Design of FIR Filter Using Window method in Matlab

我必须根据给定的绘图(附图片)设计 FIR 高通滤波器。使用具有不同截止频率的 Rectangular 和 Kaiser Window。

我的问题是我能够生成宽度相等的阻带纹波,但在给定的问题中,纹波宽度会随着频率的增加而衰减。我应该使用 fir1 以外的命令吗?

过滤器待设计

我设计的滤波器输出

到目前为止,这是我的代码。

clc;clear all; close all;
A=36;
N=30;
fs=48000;
fc=10000;
omega=2*fc/fs;
k=0:1:N;
beta=0.5842*((A-21)^0.4)+0.07886*(A-21)
kaiser_win=kaiser(N+1,beta);
b_fir1 = fir1(N,omega,'high',kaiser_win);
f = linspace(0,10000,10000); %frequency vector
H_fir1 = freqz(b_fir1,1,f,fs);

plot(f,db(abs(H_fir1)))
grid
xlabel('frequency in Hz'), ylabel('amplitude in dB')
%axis([0 10000 -60 6])
title('Window method (FIR)')

好消息是您的设计实际上很好,但您只是以不同的方式看待它,而不是您试图重现的图,它绘制了对数频率标度上的幅度响应。

要获得类似的图,请像这样使用 semilogx

semilogx(f(2:end),db(abs(H_fir1(2:end))))
grid
xlabel('frequency in Hz'), ylabel('amplitude in dB')
axis([10 20000 -60 6])

这应该给你一个看起来像这样的图表: