Elektroda.pl
Elektroda.pl
X

Search our partners

Find the latest content on electronic components. Datasheets.com
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

THD w matlabie - jak to zrobić?

wezyr_ 24 Feb 2008 19:55 2355 3
  • #1
    wezyr_
    Level 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
  • #2
    Caladan
    Level 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.
  • #3
    wezyr_
    Level 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