MATLAB에서의 스펙트럼 엔트로피 계산


9

MATLAB에서 신호의 스펙트럼 엔트로피를 어떻게 계산합니까? 기본 단계는 알고 있지만 누군가 도울 수 있다면 좋을 것입니다.

  1. MATLAB에서 FFT 명령을 사용하여 신호의 전력 스펙트럼을 계산하십시오.
  2. 전력 스펙트럼 또는 다른 기술을 사용하여 전력 스펙트럼 밀도를 계산하십시오.
  3. 사이의 전력 스펙트럼 밀도 정규화 [0,1]확률 밀도 함수로 취급 될 수 있도록 pi.
  4. 엔트로피 계산 H(s)=pilog2(pi)

MATLAB 코드에 관해서는, 여기 물어보십시오 dsprelated.com/code.php
user13107

스펙트럼 편평도 또는 위너 엔트로피와 같은 것입니까? dsp.stackexchange.com/q/2045/29
endolith

답변:


9

기술적으로 이것은 MATLAB-esque 포럼이 아니지만 자세한 단계를 설명 할 수 있습니다. 입력 신호가 x[n]DFT는 X(f). 실제 신호의 경우 한쪽 DFT를 사용할 수 있습니다. 다른 절반은 전력 스펙트럼 밀도를 볼 때 중복되기 때문입니다. (PSD).

신호의 DFT를 계산하면 PSD는 단순히 |X(f)|2. 즉, DFT 결과의 절대 크기를 제곱해야합니다.

이제 PSD를 확률 밀도 함수 (PDF)로 볼 수 있도록 PSD를 정규화해야합니다. 따라서 정규화 된 PSD (이를 호출하겠습니다)PSDn)는 다음과 같습니다.

PSDn(f)=PSD(f)f=fs2f=fs2PSD(f)

마지막으로 스펙트럼 엔트로피는 다음과 같습니다.

E=f=fs2f=fs2PSDn(f)log2[PSDn(f)]

5

난 그냥 여기서

내 소스 코드 :

    [x, Fs, nbits] = wavread('ederwander.wav'); 


    winSize = 2048;

    n_samples = length(x);


    %50% overlap or 0 to not use overlap
    OverlapStep = 50;

    if OverlapStep > 0

        Overlap = floor((OverlapStep*winSize) / 100); 
        nFrames=floor(n_samples/Overlap)-1; 
    else
        Overlap= winSize;
        nFrames=floor(n_samples/Overlap)-1;
    end

    Entropy = zeros(nFrames,1);

    k=1;
    inc=1;

    while ( (k+winSize-1) <= n_samples )

        FrameSignal = x(k:k+winSize-1);

        v = FrameSignal .* hann(length(FrameSignal));           

        N = length(v);

        Y=fft(v);

        % Compute the Power Spectrum
        sqrtPyy = ((sqrt(abs(Y).*abs(Y)) * 2 )/N);
        sqrtPyy = sqrtPyy(1:winSize/2);



       %Normalization
       d=sqrtPyy(:);
       d=d/sum(d+ 1e-12);

       %Entropy Calculation
       logd = log2(d + 1e-12);
       Entropy(inc) = -sum(d.*logd)/log2(length(d));


       k=k+Overlap;
       inc=inc+1;
end

이 소스 코드는 모든 프레임 블록에서 스펙트럼 엔트로피 계산을 수행합니다 ...

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.