Почему fft- js не дает частотный интервал для fs / 2 - PullRequest
2 голосов
/ 14 февраля 2020

Я выполняю БПФ на волне, состоящей из двух простых синусоидальных волн, с БПФ- js. Количество образцов составляет 512, а время работы составляет 16 секунд. Таким образом, частота дискретизации составляет 32 Гц. Если смотреть на результирующую частоту, то она достигает 15,9375 вместо частоты дискретизации, деленной на два (16 Гц). Почему это так, и есть ли способ включить частоту дискретизации, деленную на два?

1 Ответ

0 голосов
/ 14 февраля 2020

Этот короткий Python пример показывает, что вы были правы, ища самую высокую частоту, и она находится в неинтуитивном месте. Частота Найквиста для БПФ фактически находится на другом конце частотного вектора:

import numpy as np
import matplotlib.pyplot as p
%matplotlib inline

T=1 # secs
d=0.1 # secs
n=int(T/d)

t=np.arange(0,T,d)  
print(f'time : {t}')

freq=np.fft.fftfreq(n,d)
print(f' frequencies (unshifted) : {freq}')

sfreq=np.fft.fftshift(freq)
print(f' frequencies (shifted) : {sfreq}')

выход:

time : [0.  0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9]
 frequencies (unshifted) : [ 0.  1.  2.  3.  4. -5. -4. -3. -2. -1.]
 frequencies (shifted) : [-5. -4. -3. -2. -1.  0.  1.  2.  3.  4.]

Теперь Пол также прав, что правильное использование БПФ следует использовать меры сглаживания, чтобы в идеале энергия на самых высоких частотах была почти равна нулю.

...