Разные результаты в функциях Matlab `Filtefilt` и Scipy` Filtefilt` - PullRequest
0 голосов
/ 06 января 2020

Я пытаюсь использовать ту же операцию для сигнала с python и Matlab, но окончательные результаты для кода python немного отличаются от того, что я получаю от Matlab:

Данные ссылка

Код Matlab:

load('HardwareGainAdjusted.mat');
F= 60*(1:8);
Fs=1.9259e+03;
sidebands=0.25;
Fnyq = Fs/2; % Nyquist frequency

filtered = HardwareGainAdjusted;

for ff = 1:numel(F)
    % Find bandstop interval
    interval = (F(ff)+sidebands*[-1 1])/Fnyq;


    order = 4; % Using filtfilt doubles filter order

    [b,a] = butter(order,interval,'stop');
    %ab(ff,1:18) = [a,b];

    filtered = filtfilt(b,a,filtered);
    %fil= [fil;filtered'];

end

Python код:

import numpy as np
from scipy.io import loadmat
from scipy import signal as sgn
import matplotlib.pyplot as plt

Fnyq = 1.9259e+03/2 # Nyquist frequency
F = 60*np.arange(1,9)
filtered = HardwareGainAdjusted = loadmat('HardwareGainAdjusted.mat')['HardwareGainAdjusted']
sidebands= 0.25 

    # Using filtfilt doubles filter order
order = 4

for ff in range(np.size(F)):
    # Find bandstop interval 
    interval = (F[ff]+np.array([-1,1])*sidebands)/Fnyq

    # Design suitable notch filter

    # Numerator (b) and denominator (a) polynomials of the IIR filter
    b,a = sgn.butter(order,interval, btype='bandstop')
    filtered = sgn.filtfilt(b,a,filtered, axis=0, method='pad',padtype='odd')

Может кто-нибудь объяснить, в чем состоит основное различие между этими двумя методами? а почему результаты разные?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...