// P_RMS, CF, és THD szinuszjel túlvezérlésekor

x = sin((0:127)*2*%pi/128); //sinewave
peak = max(abs(x));// csúcs érték meghatározása 
N = size(x,2);// mintaszám

printf('\nAover(dB)\tPout(W)\tCF(dB)\tTHDF\tTHDR');
for ovrdB = [0,1,2,3,4,5,6,8,10,12,16,20,40,100,400,10000]
    ovr = 10^(ovrdB/20);// erősítés
    x1 = max(-1,min(1,x.*ovr));// vágás (klippeltetés)
    rms = sqrt(sum(x1.^2)/N);// RMS érték meghatározása
    cf = peak/rms;// crest-factor meghatározása
    cf_dB = 20*log10(cf);// crest-factor dB-ben kifejezve
    X=abs(fft(x1));// harmonikusokra bontás FFT-vel
    THDF=100*sqrt(sum(X(3:N/2)^2))/X(2);// THD_F számítása harmonikusok alapján
    THDR=100*sqrt(sum(X(3:N/2)^2))/sqrt(sum(X(1:N/2)^2));// THD_R számítása harmonikusok alapján
    printf('\n%d dB\t%3.0f W\t%3.2f dB\t%3.1f\t%3.1f',ovrdB,cf^-2*200, cf_dB, THDF, THDR);// kiiratás
end
