спектральная плотность мощности-scipy.signal - PullRequest
0 голосов
/ 20 февраля 2019

При попытке вычислить спектральную плотность мощности с частотой захвата 300000 Гц, используя ... signal.periodogram (x, fs, nfft = 4096), я получаю график до 150000 Гц, а не до 300000. Почему это до половины?Значение ?Что означает здесь частота дискретизации?

В примере, приведенном в документации scipy, частота дискретизации составляет 10000 Гц, но мы видим на графике только до 5000 Гц.

https://docs.scipy.org/doc/scipy-0.14.0/reference/generated/scipy.signal.periodogram.html

Ответы [ 2 ]

0 голосов
/ 21 февраля 2019

Спектр действительного сигнала всегда симметричен относительно частоты Найквиста (половина частоты дискретизации).В результате часто нет необходимости хранить или отображать избыточную симметричную часть спектра.

Если вы все еще хотите увидеть весь спектр, вы можете установить аргумент return_onesided равным True какследующим образом:

f, Pxx_den = signal.periodogram(x, fs, return_onesided=False)

Результирующий график того же примера, который приведен в scipy.periodogram документации , затем будет охватывать частотный диапазон 10000 Гц, как и следовало ожидать:

enter image description here

0 голосов
/ 20 февраля 2019

Если вы проверите длину f в примере:

>>> len(f)
>>> 50001

Это НЕ 50000 Гц.Это связано с тем, что scipy.signal.periodogram вызывает scipy.signal.welch с параметром nperseg=x.shape[-1] по умолчанию.Это правильный ввод для scipy.signal.welch.Однако, если углубиться в source и увидеть строки 328-329 (на данный момент), вы увидите причину, по которой размер вывода составляет 50001.

if nfft % 2 == 0:  # even
   outshape[-1] = nfft // 2 + 1
...