Matlab - 设计滤波器截止频率

截止频率

通常,我们将信号幅值衰减3dB处的频率作为截止频率,这是为何?

首先,明确以下两点:

  1. 幅值的平方为功率
  2. 信号功率衰减一半时的频率被称为截止频率

当信号功率衰减一半 (1/2) 时,幅值衰减 sqrt(1/2) ,那么其对应的 dB 值为:

20*log10(sqrt(2)/2) ≈ -3dB

举例说明

滤波器设计

设计一个 butterworth 低通滤波器,采样频率 100Hz ,截止频率 20Hz ,阶次为 4 。

clc
fs = 100;           % 采样频率
tLen = 2;           % 时间长度
pointNum = fs*2;    % 采样点数
fpass = 20;         % 通带频率

wp = fpass/(fs/2);      % 计算归一化角频率
[b,a] = butter(4,wp);   % 设计滤波器

% 获取频率特性
[H,F] = freqz(b,a,pointNum,fs);
H = 20*log10(abs(H));

hold off
plot(F,H);grid on;hold on

fcAmp = H(fpass*2*pointNum/fs+1);
stem(fpass,fcAmp,'linewidth',2);
text(fpass+2,fcAmp-1,num2str(fcAmp));

setPlot('滤波器幅频特性','frequency(Hz)','amptitude(dB)',[F(1) F(end)],[-50,10]);

setPlot

程序中用到的 setPlot 函数用于设置图形的 title , xlabel , ylabel , xlim , ylim.

function [  ] = setPlot( varargin )
% setPlot()
% setPlot(title)
% setPlot(title,xlabel)
% setPlot(title,xlable,ylabel)
% setPlot(title,xlabel,ylabel,xlim)
% setPlot(title,xlable,ylabel,xlim,ylim)

narginchk(0,5);     % 判断输入参数是否足够

grid on;
axis tight;

if nargin>=1
    title(varargin{1});
end

if nargin>=2
    xlabel(varargin{2});
end

if nargin>=3
    ylabel(varargin{3});
end

if nargin>=4
    xlim(varargin{4});
end

if nargin>=5
    ylim(varargin{5});
end

end

滤波器幅频特性

截止频率

从图中可以看出,按照要求设计得到的滤波器,截止频率 20Hz 对应的幅值衰减为 -3.0103dB ,约为 -3dB ,与理论所述相吻合。