Выбор точного частотного интервала для спектра мощности - PullRequest
1 голос
/ 25 апреля 2020

Я хочу сравнить спектры мощности временных следов двух случайных процессов, но возвращенный частотный диапазон отличается.

Как выбран этот частотный диапазон и как его изменить?

В частности, я делаю следующее:

from scipy import signal as sgn

spectrum1=sgn.periodogram(signal1,fs=fs1)
spectrum2=sgn.periodogram(signal2,fs=fs2)

, и моя проблема в том, что spectrum1[0] имеет значительно другой диапазон по отношению к spectrum2[0].

1 Ответ

1 голос
/ 26 апреля 2020

periodogram вычисляется с использованием БПФ (быстрого преобразования Фурье), которое реализует ДПФ (дискретное преобразование Фурье). ДПФ сигнала периода c имеет дискретные частоты, все кратные основной частоте, согласующиеся с длительностью кадра T: f_0=1/T.

Как следствие, чтобы получить те же частоты, длительности кадра должны быть одинаковыми, по крайней мере, кратными друг другу:

len(signal1)/fs1 = k*len(signal2)/fs2

Может потребоваться усечение одного из массивов. Аргумент nfft из scipy.signal.periodgram() также может быть использован, требование становится следующим:

nfft1/fs1 = k*nfft2/fs2

Если длительность кадра не соответствует фактическому периоду сигнала, или если сигнал не периодический c, оконный может ограничивать эффекты спектральной утечки. Это настолько полезно, что оно интегрируется в scipy.signal.periodgram() в качестве аргумента. Вы можете попробовать значения 'hann' или 'parzen', как указано здесь .

Если частоты дискретизации не похожи, может потребоваться повторная дискретизация сигнала. Для этого можно применить scipy.signal.resample () . Он также содержит аргумент window и использует FFT для повторной выборки, что позволяет избежать некоторых ошибок, которые могут возникнуть при линейной интерполяции.

...