Cálculo de Entropia Espectral no MATLAB

9

Como calcular a entropia espectral de um sinal no MATLAB? Conheço as etapas básicas, mas seria bom se alguém pudesse ajudar,

  1. Calcule o espectro de potência do sinal usando o comando FFT no MATLAB.
  2. Calcule a densidade espectral de potência usando o espectro de potência ou usando qualquer outra técnica.
  3. Normalize a densidade espectral de potência entre , para que possa ser tratada como uma função de densidade de probabilidade .p i[0 0,1 1]pEu
  4. Calcule a EntropiaH(s)=-pEuregistro2(pEu)
RRelan
fonte
Como para o código Matlab, tente perguntar aqui dsprelated.com/code.php
user13107
É o mesmo que nivelamento espectral ou entropia de Wiener? dsp.stackexchange.com/q/2045/29
endolith

Respostas:

9

Tecnicamente, este não é um fórum do tipo MATLAB, mas posso explicar as etapas com mais detalhes: Suponha que seu sinal de entrada seja e seu DFT seja . Para sinais reais, você pode usar o DFT unilateral, uma vez que a outra metade seria redundante quando você olha para a densidade espectral de potência. (PSD).X ( f )x[n]X(f)

Depois de calcular o DFT do seu sinal, o PSD é simplesmente . Ou seja, você precisa calcular a magnitude absoluta do resultado da DFT ao quadrado.|X(f)|2

Agora você precisa normalizar o PSD para que ele possa ser visto como uma Função de densidade de probabilidade (PDF). Assim, um PSD normalizado (vamos chamá-lo de ) será simplesmente:PSDn

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

Por fim, sua entropia espectral será:

E=-f=-fs2f=fs2PSDn(f)euog2[PSDn(f)]
Tarin Ziyaee
fonte
5

Eu apenas faço aqui

Meu código fonte:

    [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

Esse código fonte faz o cálculo da Entropia espectral de todos os blocos enquadrados ...

Ederwander
fonte