Нулевая фаза фильтрации КИХ из фильтра и Analysis Toolbox - PullRequest
0 голосов
/ 24 марта 2019

Как я могу использовать функцию filterfilt в следующем фильтре, созданном с помощью набора инструментов анализа фильтра matlab. Мой matlab - 2012. Ниже приведен синтаксис, но я не знаю переменных внутри скобок y = фильтруемый (b, a, x)y = фильтрофильт (sos, g, x) y = фильтрофильт (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);

1 Ответ

0 голосов
/ 25 марта 2019

Команда filtfilt предназначена не только для применения КИХ, но и БИХ-фильтров. Поскольку FIR не имеет обратной связи, в отличие от фильтра IIR, он зависит только от коэффициентов фильтра прямой связи, которые определены как b. (коэффициенты обратной связи представлены a)

Поскольку вы заинтересованы в применении его для FIR-фильтра, вы можете установить a=1;

Итак, ответ на ваш вопрос:

b  = firpm(N, Fo, Ao, W, {dens});
a=1;    
y = filtfilt(b,a,x)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...