Розрахунок спектральної ентропії в MATLAB


9

Як обчислити спектральну ентропію сигналу в MATLAB? Я знаю основні кроки, але було б добре, якщо хтось може допомогти,

  1. Обчисліть спектр потужності сигналу, використовуючи команду FFT в MATLAB.
  2. Обчисліть спектральну щільність потужності, використовуючи спектр потужності або використовуючи будь-яку іншу техніку.
  3. Нормалізуйте спектральну щільність потужності між , щоб вона могла трактуватися як функція щільності ймовірності .[0,1]pi
  4. Обчисліть ентропіюH(s)=pilog2(pi)

Щодо коду Matlab, спробуйте запитати тут dsprelated.com/code.php
user13107

Це те саме, що спектральна площинність або ентропія Вінера? dsp.stackexchange.com/q/2045/29
ендоліти

Відповіді:


9

Технічно це не форум, що відповідає MATLAB, але я можу пояснити кроки більш детально для вас: Припустимо, ваш вхідний сигнал , а його DFT - . Для реальних сигналів ви можете використовувати односторонній DFT, оскільки друга половина буде надлишковою, коли ви дивитесь на її спектральну щільність потужності. (PSD).х[н]Х(f)

Після того, як ви обчислите DFT сигналу, PSD просто . Тобто вам потрібно взяти абсолютну величину результату DFT у квадраті.|Х(f)|2

Тепер вам потрібно нормалізувати PSD таким чином, щоб він міг розглядатись як функція ймовірності щільності, (PDF). Таким чином, нормалізований PSD (назвемо це ) буде просто:ПSDн

ПSDн(f)=ПSD(f)f=-fс2f=fс2ПSD(f)

Нарешті, ваша спектральна ентропія буде:

Е=-f=-fс2f=fс2ПSDн(f)лог2[ПSDн(f)]

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

Цей вихідний код робить обчислення спектральної ентропії з кожного оформленого блоку ...

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.