การคำนวณเอนโทรปีทางสเปกตรัมใน MATLAB


9

ฉันจะคำนวณ Spectral Entropy ของสัญญาณใน MATLAB ได้อย่างไร ฉันรู้ขั้นตอนพื้นฐาน แต่จะดีถ้ามีคนช่วย

  1. คำนวณสเปกตรัมพลังงานของสัญญาณโดยใช้คำสั่ง FFT ใน MATLAB
  2. คำนวณความหนาแน่นพลังงานสเปกตรัมโดยใช้สเปกตรัมพลังงานหรือใช้เทคนิคอื่น ๆ
  3. ทำให้ค่าความหนาแน่นสเปกตรัมทางพลังงานเป็นปกติระหว่างเพื่อให้สามารถใช้เป็นฟังก์ชันความหนาแน่นของความน่าจะเป็นได้[0,1]pi
  4. คำนวณเอนโทรปีH(s)=pilog2(pi)

สำหรับรหัส Matlab ลองถามที่นี่dsprelated.com/code.php
user13107

นี่เป็นสิ่งเดียวกันกับความเรียบของสเปกตรัมหรือเอนโทรปีของ Wiener หรือไม่? dsp.stackexchange.com/q/2045/29
endolith

คำตอบ:


9

เทคนิคนี้ไม่ได้เป็นฟอรั่ม MATLAB ฟีเจอร์ แต่ฉันสามารถอธิบายขั้นตอนในรายละเอียดมากขึ้นสำหรับคุณ: สมมติว่าสัญญาณอินพุตของคุณและผิวเผินมันคือ(ฉ) สำหรับสัญญาณจริงคุณสามารถใช้ DFT ด้านเดียวเนื่องจากอีกครึ่งหนึ่งจะซ้ำซ้อนเมื่อคุณดูที่ Power Spectral Density (PSD)x[n]X(f)

เมื่อคุณคำนวณ DFT ของสัญญาณของคุณ, PSD เป็นเพียง 2 นั่นคือคุณต้องใช้ขนาดที่แน่นอนของผลลัพธ์ DFT ของคุณยกกำลังสอง|X(f)|2

ตอนนี้คุณจำเป็นต้องปรับค่ามาตรฐานของ PSD เพื่อให้สามารถดูได้ในฟังก์ชั่นความน่าจะเป็น (PDF) ดังนั้น PSD ธรรมดา (ให้เราเรียกว่า ) ก็จะเป็น:PSDn

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

ในที่สุดเอนโทรปีทางสเปกตรัมของคุณจะเป็น:

E=f=fs2f=fs2PSDn(f)log2[PSDn(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

รหัสแหล่งที่มานี้จะคำนวณ Spectral Entropy จากบล็อกทุกกรอบ ...

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.