Calcul d'entropie spectrale dans MATLAB

9

Comment calculer l'entropie spectrale d'un signal dans MATLAB? Je connais les étapes de base mais ce serait bien si quelqu'un pouvait aider,

  1. Calculez le spectre de puissance du signal à l'aide de la commande FFT dans MATLAB.
  2. Calculez la densité spectrale de puissance en utilisant le spectre de puissance ou en utilisant toute autre technique.
  3. Normaliser la densité spectrale de puissance entre , afin qu'elle puisse être traitée comme une fonction de densité de probabilité .[0,1]pje
  4. Calculez l'entropieH(s)=-pjeJournal2(pje)
RRelan
la source
Quant au code Matlab, essayez de demander ici dsprelated.com/code.php
user13107
Est-ce la même chose que la planéité spectrale ou l'entropie de Wiener? dsp.stackexchange.com/q/2045/29
endolith

Réponses:

9

Techniquement, ce n'est pas un forum MATLAB-esque, mais je peux vous expliquer les étapes plus en détail: Supposons que votre signal d'entrée soit , et sa DFT est X ( f ) . Pour les signaux réels, vous pouvez utiliser la DFT unilatérale, car l'autre moitié serait redondante lorsque vous regardez sa densité spectrale de puissance. (PSD).X[n]X(F)

Une fois que vous avez calculé la DFT de votre signal, le PSD est simplement . Autrement dit, vous devez prendre la magnitude absolue de votre résultat DFT, au carré.|X(F)|2

Vous devez maintenant normaliser le PSD de sorte qu'il puisse être vu comme une fonction de densité de probabilité, (PDF). Ainsi, un PSD normalisé (appelons-le ) sera simplement:PSn

PSn(F)=PS(F)F=-Fs2F=Fs2PS(F)

Enfin, votre entropie spectrale sera:

E=-F=-Fs2F=Fs2PSn(F)log2[PSn(F)]
Tarin Ziyaee
la source
5

Je fais juste ici

Mon code source:

    [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

Ce code source effectue le calcul d'entropie spectrale à partir de chaque bloc encadré ...

ederwander
la source