MATLAB'da Spektral Entropi Hesaplaması


9

MATLAB'da bir sinyalin Spektral Entropisini nasıl hesaplayabilirim? Temel adımları biliyorum ama birisi yardım edebilirse iyi olur,

  1. MATLAB'da FFT komutunu kullanarak sinyalin güç spektrumunu hesaplayın.
  2. Güç spektrumunu kullanarak veya başka bir teknik kullanarak Güç Spektral Yoğunluğunu hesaplayın.
  3. Güç Spektral Yoğunluğunu arasında normalleştirin , böylece olasılık yoğunluk fonksiyonu .[0,1]pben
  4. Entropi'H(s)=-Σpbengünlük2(pben)

Matlab koduna gelince, burada sormayı
user13107

Bu spektral düzlük veya Wiener entropisi ile aynı şey midir? dsp.stackexchange.com/q/2045/29
Endolit

Yanıtlar:


9

Teknik olarak bu bir MATLAB-esque forumu değildir, ancak adımları sizin için daha ayrıntılı olarak açıklayabilirim: Giriş sinyalinizin x[n]ve DFT'si X(f). Gerçek sinyaller için, tek taraflı DFT'yi kullanabilirsiniz, çünkü Güç Spektral Yoğunluğuna baktığınızda diğer yarısı gereksiz olacaktır. (PSD).

Sinyalin DFT'sini hesapladıktan sonra, PSD basitçe |X(f)|2. Yani, kare şeklinde DFT sonucunuzun mutlak büyüklüğünü almanız gerekir.

Şimdi PSD'yi bir Olasılık Yoğunluk Fonksiyonu (PDF) olarak görüntülenebilecek şekilde normalleştirmeniz gerekiyor. Böylece, normalleştirilmiş bir PSD, (diyelim kiPSDn) basitçe:

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

Son olarak, spektral entropiniz:

E=-Σf=-fs2f=fs2PSDn(f)lÖg2[PSDn(f)]

5

Ben sadece burada yapıyorum

Kaynak kodum:

    [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

Bu kaynak kodu, her çerçeveli bloktan Spektral Entropi hesaplaması yapar ...

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.