2014-06-19 1 views
0

잡음, PSD (power spectral denisty) 및 통계적 차이에 대해 자세히 알아 내려고합니다. 이 점에 관해서는 백색 잡음의 파워 스펙트럼 밀도를 계산하려고 시도하지만, 매우 홀수의 대칭을 얻을 때 그렇습니다. 내 스펙트럼은 분명히 부정확 한 중심 주파수 값을 중심으로 대칭으로 보인다. 저는 자기 상관과 파워 스펙트럼 밀도를 사용하는 것에 익숙하지 않아 누군가가 오류의 방향으로 나를 찔러 주도록 도울 수 있다면 고맙겠습니다. 여기 https://drive.google.com/#folders/0B8BdiIhqTYw7Vk1EaDFMQW84RHM를 액세스 할 수 있습니다 나는 다음과 같은 그래프를 생산하고이 코드를 사용하여백색 잡음의 전력 스펙트럼 밀도를 계산할 때 설명되지 않는 대칭

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])) 

:

코드 PSD를 계산하는 계산하기 전에 잡음

  1. 임시 프로필을

  2. 자기 상관 함수는 시간 프로파일로부터 계산됩니다. (저는 x 축 스케일이 잘못되었지만 그것이 어떤 도움의 사람이 가장 도움이 될 것이 대칭을 일으키는 원인에 관해서는 제공 할 수

있어야하지 불구하고 아름답게 대칭 코드 언제 어디 다른

  • 파워 스펙트럼 Denisty. 간단한 sin 웨이브 신호로 코드를 테스트했고 예상 결과를 얻었습니다 (대칭 없음)

  • +0

    코드 구현이 아닌 결과의 해석 – jonrsharpe

    +0

    예 : [신호 처리] (http://dsp.stackexchange.com/help/on-topic) 또는 [Cross-Validated] (http://stats.stackexchange.com/help/on-topic) – jonrsharpe

    +0

    죄송합니다. 코드 구현이 잘못되었다고 느낍니다. 나는 멍청한 기능이 어떻게 작동하는지 완전히 이해하지 못한다. 비록 당신이 그것의 오프 토픽을 느낀다면 나는 그것을 물론 옮길 수 있습니다 – Leavenotrace

    답변

    0

    먼저 함수가 잘못 작성되었습니다. 처음 신호 배열이 아닌 autocorr에서 fft를 취합니다. 재밌는 점은 반올림 오류의 특성 때문에 psd와 같은 부엉이 잡음이 발생한다는 것입니다. 둘째, N/(t * 2) (Nyquist fr)까지 확장해야하므로 주파수 축을 잘못 계산했습니다. 대신 freq_axis 배열 길이가 N이므로 sig 배열에서 N 개의 원소를 가져옵니다. 그 때문에 여러분은 대칭을 일으키는 동일한 psd로 음수를 읽습니다 (로그를 사용하면 변수를 실수로 변환하고 모든 푸리에 음의 주파수에 대한 계수는 양의 주파수에 대한 공액입니다). 다음 하나 코드가 완벽하게 좋은 결과를 줄 교체 :

    sig = white(N,1,N/t) 
    (siglog,freq_axis)=ml.psd(sig,N,(N/t), detrend=ml.detrend_none, 
        window=ml.window_hanning, noverlap=0, pad_to=None, 
        sides='default', scale_by_freq=None) 
    plt.plot(freq_axis,np.log10(siglog)) 
    plt.show() 
    

    matplotlib.mlab.psd result

    가져 잊지 마세요를

    이 질문은 그것에 대해 때문에 주제에서 벗어난 것으로 보인다
    import matplotlib.mlab as ml 
    
    관련 문제