Tính toán Entropy phổ trong MATLAB


9

Làm cách nào để tính toán Entropy của tín hiệu trong MATLAB? Tôi biết các bước cơ bản nhưng sẽ rất tuyệt nếu ai đó có thể giúp đỡ,

  1. Tính toán phổ công suất của tín hiệu bằng lệnh FFT trong MATLAB.
  2. Tính toán Mật độ phổ năng lượng bằng phổ công suất hoặc sử dụng bất kỳ kỹ thuật nào khác.
  3. Bình thường hóa Mật độ phổ năng lượng giữa , để nó có thể được coi là hàm mật độ xác suất .[0,1]pi
  4. Tính toán EntropyH(s)=pilog2(pi)

Đối với mã Matlab, hãy thử hỏi tại đây dsprelated.com/code.php
user13107

Đây có phải là điều tương tự như độ phẳng phổ hoặc entropy Wiener? dsp.stackexchange.com/q/2045/29
endolith

Câu trả lời:


9

Về mặt kỹ thuật, đây không phải là một diễn đàn MATLAB-esque, nhưng tôi có thể giải thích các bước chi tiết hơn cho bạn: Giả sử tín hiệu đầu vào của bạn là và DFT của nó là . Đối với các tín hiệu thực, bạn có thể sử dụng DFT một phía, vì nửa kia sẽ là dư thừa khi bạn nhìn vào Mật độ phổ năng lượng của nó. (PSD).x[n]X(f)

Khi bạn tính toán DFT của tín hiệu của bạn, chỉ đơn giản là PSD . Đó là, bạn cần lấy độ lớn tuyệt đối của kết quả DFT của bạn, bình phương.|X(f)|2

Bây giờ bạn cần bình thường hóa PSD sao cho nó có thể được xem như là Hàm Mật độ Xác suất, (PDF). Do đó, một PSD được chuẩn hóa, (chúng ta gọi nó là ) sẽ chỉ là:PSDn

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

Cuối cùng, entropy phổ của bạn sẽ là:

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

5

Tôi chỉ làm ở đây

Mã nguồn của tôi:

    [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

Mã nguồn này thực hiện tính toán Spectrop Entropy từ mọi khối được đóng khung ...

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.