MATLAB——FDAtool工具箱设计滤波器(1)

FDAtool工具箱是MATLAB里专门用于生成滤波器的工具箱,功能强大,操作十分方便。我们只需要输入滤波器参数,就可以产生对应滤波器的程序以及对应滤波器的参数矩阵。本文将简要介绍FDAtool工具箱,并用生成程序的方式设计符合要求的滤波器。

一:FDAtool工具箱打开方式与界面

1.打开方式
我们只需要在命令行窗口里输入fdatool并运行,即可打开FDAtool工具箱
2.界面展示
在这里插入图片描述(1)最下面我们可以选择生成滤波器的相关参数。无论是低通还是带通;FIR滤波器还是IIR滤波器,我们都可以选择并依据参数生成。可以说功能十分强大。
(2)左下的七个模块是基于滤波器的进一步设计,在这里我们可以将生成的滤波器转成对应的simulink模型进行使用。当然功能不只如此,但编者能力有限,还有待进一步的研究。
(3)中间的两个方框,左边的说明了滤波器的信息,可以在此保存你生成过了滤波器模型,以便下一次打开FDAtool工具箱时再次使用。右边的方框显示了设计出来的滤波器的各种图像,具体的显示内容受上面的功能栏控制
(4)功能栏各图像展示说明
在这里插入图片描述
如图,这八个模块为产生滤波器各种性质的图像的常用模块。其对应功能我们会专门拿出来说明。

二:滤波器的图像分析

在一(4)中我们提到了八个常用模块,现对其进行说明。
各图像均由如下滤波器参数产生:
在这里插入图片描述
八个模块从左到右分别为:
(1)Magnitude Response——幅频响应分析
结果如上述参数图
(2)Phase Response——相频响应分析
在这里插入图片描述
(3)Magnitude And Phase Responses——幅频响应共图
在这里插入图片描述
(4)Group Delay Response——群时延分析
在这里插入图片描述
(5)Phase Delay——相位延迟
在这里插入图片描述
(6)Impulse Response——冲激响应分析
在这里插入图片描述
(7)Step Response——阶跃响应分析
在这里插入图片描述
(8)Pole/Zero Plot——零极点图分析
在这里插入图片描述

三:FDAtool程序导出式滤波器设计

1.依据二中滤波器参数生成滤波器(参数输入后点击design filter)
2.生成后,点击file—Generate MATLAB code—Filter Design Function。生成对应程序并保存
3.生成程序如下:

function Hd = FDAtool_test_BUTTER
%FDATOOL_TEST_BUTTER Returns a discrete-time filter object.

% MATLAB Code
% Generated by MATLAB(R) 9.6 and Signal Processing Toolbox 8.2.
% Generated on: 10-Mar-2020 16:08:01

% Butterworth Lowpass filter designed using FDESIGN.LOWPASS.

% All frequency values are in Hz.
Fs = 100001;  % Sampling Frequency

Fpass = 200;         % Passband Frequency
Fstop = 350;         % Stopband Frequency
Apass = 1;           % Passband Ripple (dB)
Astop = 80;          % Stopband Attenuation (dB)
match = 'stopband';  % Band to match exactly

% Construct an FDESIGN object and call its BUTTER method.
h  = fdesign.lowpass(Fpass, Fstop, Apass, Astop, Fs);
Hd = design(h, 'butter', 'MatchExactly', match);

% [EOF]

4.我们将这个程序放入主函数,使用fliter(滤波器参数,原始信号)进行滤波处理。
在本仿真程序下为:
Hd = FDAtool_test_BUTTER;
d=filter(Hd,s);
原信号图像为:
在这里插入图片描述
滤波后的图像为:
在这里插入图片描述
可以看到,我们设计的滤波器工作正常,仿真成功
当然,在生成的滤波器函数上直接更改参数,也可以改变其滤波范围。比如我们将Fpass改为500,Fstop改为 600。生成的仿真图像为:
在这里插入图片描述
我们可以看到,滤波器同样可以正常工作
所以说,在大体不变的情况下,生成的滤波器可以反复使用,相当方便

四:仿真测试代码

%%%%%%%%%%%%%%%%%%%%%%%FDAtool工具箱使用%%%%%%%%%%%%%%%%%%%%%%%%%%%%
clear all;clc;
%%%%%%%%%%%%%%%%%%%%%%%原始信号
fs=100e3;                                %高采样率还原真实频域
t=0:1/fs:1;
w1=2*pi*100;
w2=2*pi*400;
w3=2*pi*700;
s=cos(w1*t)+0.8*cos(w2*t)+0.6*cos(w3*t); %混合信号构建
s_f=fft(s)/length(t);                    %幅度还原
s_ff=fftshift(s_f);                                 
f_f=(-length(t)/2:length(t)/2-1);        %横坐标对称化,镜像消除
figure;
plot(f_f,abs(s_ff));
xlim([-800,800]);                        %图像清晰化
%%%%%%%%%%%%%%%%%%%%FDAtool程序导出式滤波器设计
Hd = FDAtool_test_BUTTER;
d=filter(Hd,s);
d_f=fft(d)/length(t);
d_ff=fftshift(d_f); 
figure;
plot(f_f,abs(d_ff));
xlim([-800,800]); 
%%%%%%%%%%%%%%%%%%%%导出程序
function Hd = FDAtool_test_BUTTER
%FDATOOL_TEST_BUTTER Returns a discrete-time filter object.

% MATLAB Code
% Generated by MATLAB(R) 9.6 and Signal Processing Toolbox 8.2.
% Generated on: 10-Mar-2020 16:08:01

% Butterworth Lowpass filter designed using FDESIGN.LOWPASS.

% All frequency values are in Hz.
Fs = 100001;  % Sampling Frequency

Fpass = 500;         % Passband Frequency
Fstop = 600;         % Stopband Frequency
Apass = 1;           % Passband Ripple (dB)
Astop = 80;          % Stopband Attenuation (dB)
match = 'stopband';  % Band to match exactly

% Construct an FDESIGN object and call its BUTTER method.
h  = fdesign.lowpass(Fpass, Fstop, Apass, Astop, Fs);
Hd = design(h, 'butter', 'MatchExactly', match);
end

五:写在结尾

本文只对生成滤波器函数的方式进行了说明。实际上,还有很多种导出滤波器数据的方式,甚至还可以直接将设计的滤波器转换成VHDL等其他语言。FDAtool是一个功能很强大的工具箱,但本人能力有限,还未进行深入研究。后续如有新的理解和功能开发,会及时补充。

发布了3 篇原创文章 · 获赞 4 · 访问量 234

猜你喜欢

转载自blog.csdn.net/qq_45001172/article/details/104780857