У меня проблемы с python из-за метода scipy.signal, называемого welch (https://docs.scipy.org/doc/scipy-0.14.0/reference/generated/scipy.signal.welch.html),), который оценивает частотный спектр сигнала времени, потому что он (вообще) не обеспечивает тот же вывод, что и метод MATLABназывается pwelch, учитывая те же параметры (размер окна, перекрытие и т. д.). Ниже приведен мой код на каждом языке, а входные и выходные файлы находятся по ссылке здесь:
https://www.dropbox.com/s/2ch36phbbmjfhqg/inputs_outputs.zip?dl=0
Вход представляет собой двумерный массив со строками, являющимися временными шагами, а каждый столбец является сегментом сигнала. Столбцы на выходе представляют собой спектр от соответствующих столбцов на входе.
Python:
import numpy as np
from scipy.signal import welch, get_window
input = np.genfromtxt('python_input.csv', delimiter=',')
fs = 128
window = get_window('hamming', fs*1)
ff,yy = welch(input, fs=fs, window = window, noverlap = fs/2, nfft=fs*2,
axis=0, scaling="density", detrend=False)
np.savetxt("python_spectrum.csv", 10*np.log10(yy), delimiter=",")
MATLAB:
input = csvread('matlab_input.csv');
fs = 128
win = hamming(fs);
[pxx,f] = pwelch(input ,win,[],[],fs,'psd');
csvwrite('matlab_spectrum.csv',pxx);
Я подозреваю, что проблема в scipy, поскольку его вывод не имеет смысла с точки зрения отражения фильтров, которые я использовал (полоса пропускания Баттерворта 4-го порядка от 0,3 до35 Гц с фильтрованием) заранее - вывод MATLAB, однако, делает:
Каждый метод выводится с использованием imagesc в MATLAB
И некоторых графиках элементамудрые различия здесь
Поэлементные различия (ось Y должна быть 0-64!) (третий график, я исключил самые крайние значения)
Я попробовалс простой синусоидой, и она хорошо работала на обоих языках программирования - так что я полностью потерялся.