MATLABでのスペクトルエントロピー計算


9

MATLABで信号のスペクトルエントロピーを計算するにはどうすればよいですか?基本的な手順はわかっていますが、誰かが手伝ってくれるといいのですが、

  1. MATLABでFFTコマンドを使用して信号のパワースペクトルを計算します。
  2. パワースペクトルまたはその他の手法を使用して、パワースペクトル密度を計算します。
  3. 間の電力スペクトル密度を正規化する[01]が確率密度関数として扱うことができるように、p
  4. エントロピーH s = p i log 2 p i )を計算するHs=Σpログ2p

Matlabコードについては、dsprelated.com / code.php
user13107

これは、スペクトルの平坦性やウィーナーエントロピーと同じですか? dsp.stackexchange.com/q/2045/29
endolith

回答:


9

技術的にこれはMATLAB風のフォーラムではありませんが、手順を詳しく説明できます。入力信号がで、DFTがX f )であるとします。実際の信号の場合、片側DFTを使用できます。これは、パワースペクトル密度を見ると、残りの半分が冗長になるためです。(PSD)。バツ[]バツf

信号のDFTを計算すると、PSDは単純になります。つまり、DFT結果の絶対値を二乗する必要があります。|バツf|2

次に、PSDを正規化して、確率密度関数(PDF)として表示できるようにする必要があります。したがって、正規化されたPSD(これをと呼ぶことにします)は次のようになります。PSD

PSDf=PSDfΣf=fs2f=fs2PSDf

最後に、スペクトルエントロピーは次のようになります。

E=Σf=fs2f=fs2PSDflog2[PSDf]

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.