Разница между результатом array_spectrum доступна в matplotlib.mlab и numpy.abs (numpy.fft.fft (данные))
У меня простая синусоида. Я пытаюсь найти спектр амплитуд в частотной области.
Я использовал функцию matplotlib.mlab.magnitude_spectrum(data)
Я хотел проверить этот результат, поэтому я попробовал numpy.abs(numpy.fft.fft(data))
. Результаты разные.
Это должно быть такое же право? Даже если я попытаюсь
numpy.sqrt(matplotlib.mlab.psd(data))
, результаты разные.
Я ищу объяснение этого.
- Почему я получаю строки нулей в 2D 2D?
- Как работает numpy.fft.fft?
- «Расширенный» IFFT
- Записанный звук одной заметки создает несколько периодов начала
- Вычисление спектра мощности
Есть два основных отличия. Во-первых, matplotlib.mlab.magnitude_spectrum
применяет функцию окна к входным данным перед тем, как принимать БПФ (по умолчанию – окно Ханнинга ). Во-вторых, он возвращает только положительные частоты, тогда как np.fft.fft
возвращает как положительные, так и отрицательные частоты:
import numpy as np from matplotlib import pyplot as plt x = np.random.randn(500) mag1, f = plt.mlab.magnitude_spectrum(x) # apply a hanning window to x xw = np.hanning(x.shape[0]) * x # use np.fft.rfft to get the positive frequencies only mag2 = np.abs(np.fft.rfft(xw)) fig, ax = plt.subplots(1, 1) ax.hold(True) ax.plot(f, mag1, '-k', lw=2) ax.plot(f, mag2, '--r', lw=2) plt.show()
matplotlib.mlab.psd
делает что-то более сложное – он вычисляет периодограмму с использованием метода Уэлша , а не просто принимает квадрат величины БПФ. Он в основном принимает среднюю периодограмму по окклюзованным перекрывающимся сегментам вашего сигнала, что дает вам более «плавную» периодограмму, более устойчивую к шуму, за счет некоторого частотного разрешения. В зависимости от того, как выглядит ваш сигнал, и вашего выбора NFFT=
и noverlap=
параметров в psd
, вы должны ожидать, что результат будет выглядеть совсем по-другому, чем результат noverlap=
.
- Преобразование кода Matlab в Python: Матрицы не выровнены
- Регулярное выражение Python несовместимо с группами () и группой ()
- Как управлять процессом интенсивного процессора на сервере
- Возврат вещественных, фазированных скремблированных таймсерий с использованием Python
- Фундаментальная частота по методу Кепстрала
- Сделать оператор умножения матрицы @ работать для скаляров в numpy
- SciPy "lfilter" возвращает только NaNs
- Анализ сигналов в Python – удаление выбросов из кривой
- Самый эффективный способ найти самую длинную инкрементную подпоследовательность в списке списков
- Расчет спектра турбулентности
- sklearn – модель продолжает перерабатывать