8192 또는 8193 주파수 (0에서 Nyquist까지)의 제곱을 얻기 위해 10 개의 창 (겹치지 않습니까?)을 평균하여 스펙트럼을 계산하는 것처럼 보이지만 일부 알고리즘은 bin 8192에서 Nyquist 주파수를 떨어 뜨릴 수 있습니다.
가장 먼저 확인해야 할 것은 피크가 오른쪽 저장소에 있다는 것입니다. 샘플링 속도가 무엇인지 말하지 않았지만 빈 743은 샘플링 속도의 743/16384 배입니다. 신호가 실제로 800Hz이면 Fs는 약 17640 샘플 / 초입니다. 그건 잘못된 것 같습니다. 테스트 신호는 아마도 8000, 16000, 22050, 32000, 44100 또는 48000과 같은 표준 속도 일 것입니다. Fs = 22050의 경우 bin 800 / 22050 * 16384 = 594에서 피크가 급격히 증가합니다.
확인해야 할 또 다른 기준은 신호의 총 에너지가 시간 및 주파수 영역에서 거의 동일하다는 것입니다. 다음은 Python의 예입니다.
In [1]: NFFT = 2048; N = 10*NFFT; n = arange(N); Fs = 22050
In [2]: x = 0.4*cos(2*pi*400/Fs*n) + 0.6*cos(2*pi*800/Fs*n)
In [3]: y,freqs = psd(x, NFFT=NFFT, Fs=Fs, pad_to=16384) # PSD by Welch's Method
In [4]: sum(x**2)/Fs # time-domain energy
Out[4]: 0.24149869319296949
In [5]: sum(y) * N/16384 # frequency-domain energy
Out[5]: 0.24148752834391252
Fs = 22050 샘플 / 초로 샘플링 된 2 개의 정현파로 구성된 입력 신호 x는 NFFT = 2048 샘플 크기의 겹치지 않는 10 개의 창으로 분할됩니다. psd에 대한 호출 (전력 스펙트럼 밀도)은 16384 포인트 DFT 10 개의 제곱 크기의 평균으로 스펙트럼 y를 계산합니다 (실제로 x가 실제 값이므로 8193 포인트입니다).
psd 함수가 y를 전체 신호 길이 대신 DFT 크기로 스케일링했기 때문에 계산 된 주파수 영역 에너지의 스케일링 계수는 N / 16384입니다. 이것이 문제인지 여부는 시스템에서 PSD 정규화를 처리하는 방법에 따라 다릅니다. 다른 선택적인 정규화는 1 / F에 의한 스케일링입니다. 이것은 에너지를 원래의 아날로그 신호와 일치시킵니다. 기본 정규화는 라이브러리에 잘 문서화되어야합니다.