matlab - 来自滤波器和分析工具箱的 FIR 零相位滤波
问题描述
如何在 matlab 过滤器分析工具箱创建的以下过滤器中使用 filtfilt 函数。我的 matlab 是 2012。下面是语法,但我不知道括号内的变量 y = filtfilt(b,a,x) y = filtfilt (sos,g,x) y = filtfilt(d,x)
% MATLAB Code
% Generated by MATLAB(R) 8.2 and the Signal Processing Toolbox 6.20.
% Generated on: 18-Mar-2019 12:11:31
% Equiripple Lowpass filter designed using the FIRPM function.
% All frequency values are in Hz.
data = xlsread('Smoothendata2.xlsx',1);% read csv content
d1 = data(:,1); % Original Time Vector
d2 = data(:,2); % Original Data Vector
L = length(d1);
tv = linspace(min(d1), max(d1), L); % Time Vector For Interpolation
dv = interp1(d1, d2, tv, 'linear'); % Interpolated Data Vector
Ts = mean(diff(tv)); % Sampling Time Interval
t_stats = [Ts std(tv)];
Fs = 1/Ts; % Sampling Frequency
Fn = Fs/2; % Nyquist Frequency
FTD = fft(dv)/L; % Fourier Transform
Fv = linspace(0, 1, fix(L/2)+1)*Fn; % Frequency Vector
Iv = 1:length(Fv); % Index Vector
figure(1)
semilogy(Fv, abs(FTD(Iv))*2) % Plot Fourier Transform
grid
xlabel('Frequency (Hz)')
ylabel('Amplitude')
%
Fpass = 50; % Passband Frequency
Fstop = 60; % Stopband Frequency
Dpass = 0.17099735734; % Passband Ripple
Dstop = 1; % Stopband Attenuation
dens = 20; % Density Factor
% Calculate the order from the parameters using FIRPMORD.
[N, Fo, Ao, W] = firpmord([Fpass, Fstop]/(Fs/2), [1 0], [Dpass, Dstop]);
% Calculate the coefficients using the FIRPM function.
b = firpm(N, Fo, Ao, W, {dens});
Hd = dfilt.dffir(b);
解决方案
该filtfilt
命令不仅用于应用 FIR,还用于应用 IIR 过滤器。由于 FIR 没有反馈,因此与 IIR 滤波器相比,它仅取决于由 定义的前馈滤波器系数b
。(反馈系数用 表示a
)
由于您有兴趣将其应用于 FIR 滤波器,您可以设置a=1
;
所以你的问题的答案是:
b = firpm(N, Fo, Ao, W, {dens});
a=1;
y = filtfilt(b,a,x)
推荐阅读
- python - 使用 ForeignKey 在 Django 中查询集过滤器()
- html - CYPRESS:检查列表中的每个项目
- docker - 尝试启动 Docker 容器时出现用户错误
- swift - 无法转换 Observable 类型的类型值
到预期的参数类型 Observable - mysql - 有没有办法通过 mysqlworkbench 更改存储过程所需的权限?
- php - 按顺序对这些变量进行排序(将单词转换为等于其长度的数字)。(使用条件)
- python - 为什么 Python 不能为我识别“kivy”模块?
- swift - 在 Combine 中链接 n 个请求
- rust - 如何通过回调管理生命周期
- python - VScode 在 scipy stats 中找不到模块规范