Я пытаюсь узнать больше о шуме, спектральной плотности мощности (PSD) и статистических отклонениях. Что касается этого, я пытаюсь вычислить спектральную плотность мощности белого шума, однако, когда я это делаю, я получаю очень странную симметрию. мой спектр кажется симметричным относительно значения центральной частоты, что явно неверно. Я новичок в использовании автокорреляций и спектральной плотности мощности, поэтому я был бы признателен, если бы кто-нибудь помог мне подтолкнуть меня к ошибке.
Код для расчета PSD:
import numpy as np
from math import sin, pi, log10
from allan_noise import white,pink,brown, violet
import acor
import numpy as np
#METHOD ONE: AUTOCORRELATION FUNCTION METHOD
def psd1(time_dats):
#auto_corr = acor.function(time_dats)
auto_corr = np.correlate(time_dats,time_dats,mode="same")
#To check autocorrelation
for i in range(len(auto_corr)):
print i*.0000001 ,auto_corr[i]
return fft(auto_corr)
#DEFINE VARIABLES
t = .0001 #simulation time
N = 100000 #number of data points
dt = t/N #time interval between data points
#CREATE SIGNAL
sig = white(N)
df = 1.0/(t)
freq_axis = np.arange(0,N/t,df)
spec = psd1(sig)
#OPEN UP OUTPUT FILE
f = open('data/psdtest_f','w')
g = open('data/psdtest_t','w')
#PRINT OUT DATA
for i in range(N):
f.write('%g %g\n' %(freq_axis[i],log10(abs(spec[i]))))
g.write('%g %g\n' %(i*dt, sig[i]))
Используя этот код, я создаю следующие графики, доступ к которым можно получить здесь https://drive.google.com/#folders/0B8BdiIhqTYw7Vk1EaDFMQW84RHM :
Временной профиль шума до расчетов
Автокорреляционная функция, рассчитанная по временному профилю (я знаю, что шкала по оси X неверна, но это не влияет на код где-либо еще
Power Spectral Denisty, красиво симметричный, хотя и не должен быть
Любая помощь, которую кто-либо мог бы оказать относительно того, что вызывает эту симметрию, была бы наиболее полезной. я протестировал код с простым синусоидальным сигналом и получил ожидаемые результаты (без симметрии)