Я пытаюсь использовать ту же операцию для сигнала с 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')
Может кто-нибудь объяснить, в чем состоит основное различие между этими двумя методами? а почему результаты разные?