Spektrale Entropieberechnung in MATLAB


9

Wie berechne ich die spektrale Entropie eines Signals in MATLAB? Ich kenne die grundlegenden Schritte, aber es wäre schön, wenn jemand helfen könnte,

  1. Berechnen Sie das Leistungsspektrum des Signals mit dem Befehl FFT in MATLAB.
  2. Berechnen Sie die spektrale Leistungsdichte mithilfe des Leistungsspektrums oder einer anderen Technik.
  3. Normalisieren Sie die spektrale Leistungsdichte zwischen , so dass sie als Wahrscheinlichkeitsdichtefunktion p i behandelt werden kann .[0,1]pi
  4. Berechnen Sie die Entropie H(s)=pilog2(pi)

Fragen Sie
user13107

Ist das dasselbe wie spektrale Flachheit oder Wiener Entropie? dsp.stackexchange.com/q/2045/29
Endolith

Antworten:


9

Technisch gesehen ist dies kein MATLAB-ähnliches Forum, aber ich kann die Schritte für Sie genauer erläutern: Angenommen, Ihr Eingangssignal ist und seine DFT ist X ( f ) . Für reale Signale können Sie die einseitige DFT verwenden, da die andere Hälfte redundant wäre, wenn Sie die spektrale Leistungsdichte betrachten. (PSD).x[n]X(f)

|X(f)|2

PSDn

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

Schließlich wird Ihre spektrale Entropie sein:

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

5

Ich mache es einfach hier

Mein Quellcode:

    [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

Dieser Quellcode berechnet die Spektralentropie aus jedem gerahmten Block ...

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.