1、可以在命令行窗口直接输入filterDesigner
这里注意大小写,MATLAB会有提示。
2、在APP页面中搜索filterDesigner工具箱。
参考这一篇文章
MATLAB设计滤波器之新版filterDesigner使用_matlab滤波工具箱-CSDN博客
这部分功能很全(频率响应,冲击响应,阶跃响应,滤波器参数等等),可以自己点点试试,不懂的可以参考matlab手册
滤波器设计工具快速入门- MATLAB & Simulink- MathWorks 中国
导出成函数或者导出成对象,参考文章中很详细
如果导出成对象
如果导出成函数,就直接调用函数名即可。y1为你要滤波的对象。
figure('color',[1,1,1]);
subplot(3,1,1);
plot(y1);
% xlim([0, 2000]);
title('滤波前波形');
y2 = filter(lowpass1Hz,y1); % 直接使用设计好的滤波器进行滤波,filter函数是滤波函数
subplot(3,1,2);
plot(y2);
% xlim([0, 2000]);
% hold on;
% plot(original);
title('滤波后波形');
至此就可以设计和使用滤波器了。
下面是一些心得。
导出SOS和G矩阵(sos:二阶级联形式的矩阵,具体是啥不太清楚)
先把sos转成传递函数的形式得到分子分母系数
也可以转成零极点的形式,sos2zp(),具体怎么使用自己搜搜
[b, a] = sos2tf(SOS, G);
figure;
freqz(b, a, 1024, fs); % 绘制波特图
title('Butterworth Lowpass Filter Bode Plot');
我们使用freqz
函数来计算并绘制滤波器的频率响应。freqz
函数的第一个参数是滤波器的Numerator(分子)系数 b
,第二个参数是滤波器的Denominator(分母)系数 a。第三个参数是计算频率响应的点数(分辨率),这里设置为1024。最后一个参数是采样频率。
MATLAB中的butter
函数用于设计Butterworth滤波器,其语法如下:
[b, a] = butter(n, Wn, 'ftype')
[b, a] = butter(2, fc/(fs/2), 'low'); % 2阶Butterworth低通滤波器设计
该函数返回了低通或高通Butterworth滤波器的系数 b
和 a
。
参数说明:
n
:滤波器的阶数(或级数),必须是一个正整数。阶数越高,滤波器的频率响应越陡峭,但计算复杂度也会增加。Wn
:截止频率(或归一化截止频率)。对于低通和高通滤波器,可以是一个标量或一个长度为2的向量。如果Wn
是标量,则表示截止频率为Wn
。如果Wn
是一个长度为2的向量 [W1, W2]
,则表示截止频率范围为[W1, W2]
。截止频率的单位是采样频率的一半(即归一化频率)。例如,如果采样频率为100Hz,则截止频率为1Hz的归一化截止频率为0.01。ftype
:滤波器类型,可以是字符串 'low'
(低通滤波器)或 'high'
(高通滤波器)。默认为低通滤波器。输出说明:
b
:滤波器的Numerator(分子)系数,是一个长度为N+1的向量,其中N是滤波器的阶数。a
:滤波器的Denominator(分母)系数,是一个长度为N+1的向量,其中N是滤波器的阶数。MATLAB中与butter
函数相似的函数,用于设计不同类型的滤波器。
cheby1
:用于设计Chebyshev Type I滤波器。与Butterworth滤波器相比,Chebyshev Type I滤波器在通带内具有更大的波纹(ripples),但可以实现更陡的滚降(rolloff)。
cheby2
:用于设计Chebyshev Type II滤波器。Chebyshev Type II滤波器在阻带内具有更大的波纹,但可以实现更陡的滚降。
ellip
:用于设计Elliptic滤波器,也称为Cauer滤波器。Elliptic滤波器可以在通带和阻带内都实现更陡的滚降,但会引入通带和阻带内的波纹。
fir1
:用于设计FIR(Finite Impulse Response)滤波器。FIR滤波器是一种非递归滤波器,可以实现任意形状的频率响应。与IIR滤波器(如前面提到的Butterworth、Chebyshev和Elliptic滤波器)相比,FIR滤波器具有线性相位特性。
[b, a] = cheby1(n, Rp, Wn, 'ftype')
[b, a] = cheby2(n, Rs, Wn, 'ftype')
[b, a] = ellip(n, Rp, Rs, Wn, 'ftype')
b = fir1(n, Wn, 'ftype')
这些函数在设计滤波器时提供了不同的选项和参数,可以根据具体的需求选择适合的函数。它们的语法和参数用法可能会有所不同,仅供参考,建议查阅
调用直接 afterfilter = filter(b, a, signal);
调用滤波器时一定要注意滤波器的采样频率与信号的采样频率是否一致,否则无法滤波
尤其是从工具箱导入滤波器,调用时要格外注意,上面快捷生成的反而比较容易发现。
以下是采样频率与滤波器设计之间的几个关系:
采样定理:根据奈奎斯特-香农采样定理,为了避免采样导致的混叠效应(aliasing),采样频率至少应为信号中最高频率成分的两倍。因此,在设计滤波器之前,需要确定信号的最高频率成分,以确保采样频率满足奈奎斯特-香农采样定理。
频率归一化:在滤波器设计中,通常会对滤波器的截止频率、带宽等参数进行归一化处理。归一化是为了将滤波器设计与具体的采样频率解耦,使得滤波器设计参数在不同采样频率下具有相对一致的意义。通常,采样频率被归一化为单位周期内的频率,例如将采样频率归一化为1。
频率响应范围:滤波器设计中,截止频率、通带、阻带等参数通常是相对于采样频率的一部分。例如,截止频率可能表示为截止频率与采样频率的比例。因此,采样频率的选择会直接影响滤波器的频率响应范围。