logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

THD w matlabie - jak to zrobić?

wezyr_ 24 Lut 2008 19:55 2496 3
REKLAMA
  • #1 4841973
    wezyr_
    Poziom 10  
    Panowie mam problem jak sie zabrać za wyznaczenie thd w matlabie, wczytuje dane z pliku wav

    [y,fs,n]=wavread(plik.wav);

    i co dalej ? :D
  • REKLAMA
  • #2 4843546
    Caladan
    Poziom 19  
    A co zawiera ten plik? Musi to być pojedynczy sinus, bo w innym przypadku trochę głupio liczyć THD :D

    Możesz policzyć THD z definicji, czyli moc wszystkich harmonicznych wyższych jak 1 przez moc podstawowej.
    Na wikipedii jest to opisane wzorkami.
    Rozłożenie na składowe możesz zrobić używając funkcji fft.
  • REKLAMA
  • #3 4843666
    wezyr_
    Poziom 10  
    tak, jest to pojedyńczy sinus, harmoniczną podstawową wiem jak znaleźć ale mam problem ze znalezieniem właśnie tych kolejnych :D nie jestem dobry w matlabie ;)


    mój program wygląda w ten sposób:


    plik='c:\wave\4.wav';

    [x1,fp1] = wavread(plik);
    N1=length(x1);
    NFFT1 = 2^nextpow2(N1);
    f1 = fp1/2*linspace(0,1,NFFT1/2);

    X1=fft(x1,NFFT1);
    plot(f1,abs(X1(1:NFFT1/2))); grid; xlabel('f[Hz]'); ylabel('|X(f)|');

    xrms=0;
    xrmsn=0;
    xrms=max(X1);

    for i=1:N1/2;
    if(X1(i)<xrms);
    xrmsn=xrmsn+(X1(i)^2)/2;
    end
    end

    xrmsn=sqrt(xrmsn);
    xrms=(xrms^2)/2;
    xrms=sqrt(xrms);

    [v i]=max(X1); % wyznaczam wartość i nr próbki pierwszej harmonicznej

    i teraz jak wyznaczyć kolejne harmoniczne ? :D
REKLAMA