diff --git a/examples/various/FFT_Leakage.cir b/examples/various/FFT_Leakage.cir new file mode 100644 index 000000000..b2bcfb7dc --- /dev/null +++ b/examples/various/FFT_Leakage.cir @@ -0,0 +1,53 @@ +FFT_Leakage_tests http://www.idea2ic.com/ +*=========Create_Signal================== +VTime VTime 0 DC 0 PWL( 0 0 1 1) +Vfreq Vfreq 0 DC 5.5k +BVAC IN 0 V = sin( 6.283185307179586*V(VFreq)*V(VTime)) +.control +*TRAN TSTEP TSTOP TSTART TMAX ?UIC? +tran 1u .999m 0 1u +set pensize = 2 +linearize +let numb2 = length(in) +print numb2 + +*=========Do_FFT_and_Plot_As_dB_Freq================== +let ac = in +j(0) +let ac_fft=fft(ac) +let numb_f2 = (numb2)/2 -1 +compose freq start = 1 stop = $&numb_f2 step =1 +compose vreal start = 1 stop = $&numb_f2 step =1 +compose vimag start = 1 stop = $&numb_f2 step =1 +let j = 0 +repeat $&numb_f2 +let freq[j] = freq[j] +let vreal[j] = 2*real(ac_fft[j+1]) +let vimag[j] = 2*imag(ac_fft[j+1]) +let j = j +1 +end +plot dB(abs(vreal+1f)) dB(abs(vimag+1f)) vs freq xlog + +*=========Extract_Error_Signal========================= +let funBin = 5k/1000 +let unvect = unitvec(numb2) +let fundspec = unvect*0 +j(0) +let fundspec[funBin] = real(ac_fft[funBin]) +j(imag(ac_fft[funBin] )) +let fundspec[numb2-funBin] = real(ac_fft[numb2-funBin]) +j(imag(ac_fft[numb2-funBin] )) +let fund = ifft(fundspec) +let dc_ofset = real(ac_fft[0]) +let thdspec = ac_fft +let thdspec[0] = 0 +j(0) +let thdspec[funBin] = 0 +j(0) +let thdspec[numb2-funBin] = 0 +j(0) +let thd = ifft(thdspec) +plot norm(in) norm(fund) norm(thd)/2 + +*=========Calc_Values========================= +let rms_Fund = sqrt(mean(fund*fund)) +let rms_THD = sqrt(mean(thd*thd)) +let THD_percent = 100*rms_THD/rms_Fund +let FREQ_Hz = VFreq[0] +echo "Freq_Hz=$&FREQ_Hz THD_percent=$&THD_percent Fund_rms=$&rms_Fund THD_rms=$&rms_THD " + +.endc +.end diff --git a/examples/various/FFT_tests.cir b/examples/various/FFT_tests.cir new file mode 100644 index 000000000..e7ede5ec4 --- /dev/null +++ b/examples/various/FFT_tests.cir @@ -0,0 +1,123 @@ +FFT_tests http://www.idea2ic.com/ +.control +set units=degrees +let a = vector(16) +*plot a vs a +set pensize = 2 +*=========Need_a_complex_input==================== +let ac = a+j(0) +print a ac +*plot fft(a) vs a +*plot real(fft(ac)) imag(fft(ac)) vs a +* fft(a) fft(ac) + +*=========DC_Works==================== +let b = unitvec(16) +let bc = b+j(0) +*plot fft(b) vs a title DC_WORKS +*print fft(b) fft(bc) + +*=========DC_Plus_cos_Remove_AC==================== +let numb = length(b) +print numb + +let indx = 0 +repeat $&numb +let ac[indx]= cos(indx*360/8)+1 +j(0) +let indx = indx +1 +end + +let fftac=fft(ac) +plot real(fftac) imag(fftac) vs a title DC_Plus_COS + +let fftac[2]=(0,0) +let fftac[14]=(0,0) +let ifftac = ifft(fftac) +plot ifftac ac vs a title COS_REMOVED + +*=========DC_Plus_cos_Remove_DC==================== +let indx = 0 +repeat $&numb +let ac[indx]= cos(indx*360/8)+1 +j(0) +let indx = indx +1 +end + +let fftac=fft(ac) +let fftac[0]=(0,0) +let ifftac = ifft(fftac) +plot ifftac ac vs a title COS_With_DC_REMOVED + +*=========DC_Plus_sin_Remove_AC==================== +let indx = 0 +repeat $&numb +let ac[indx]= sin(indx*360/8)+1 +j(0) +let indx = indx +1 +end + +let fftac=fft(ac) +plot real(fftac) imag(fftac) vs a title DC_Plus_SIN + +let fftac[2]=(0,0) +let fftac[14]=(0,0) +let ifftac = ifft(fftac) +plot ifft(fftac) ac vs a title SIN_REMOVED + +*=========DC_Plus_sin_Remove_DC==================== +let indx = 0 +repeat $&numb +let ac[indx]= sin(indx*360/8)+1 +j(0) +let indx = indx +1 +end + +let fftac=fft(ac) +let fftac[0]=(0,0) +let ifftac = ifft(fftac) +plot ifft(fftac) ac vs a title SIN_With_DC_REMOVED + +*=========DC_Plus_cos_Nyqusit_Remove_DC==================== +let indx = 0 +repeat $&numb +let ac[indx]= cos(indx*360/2)+1 +j(0) +let indx = indx +1 +end + +plot ac vs a title Nyq_COS + +let fftac=fft(ac) +plot real(fftac) imag(fftac) vs a title Nyq_FREQ_COS +let fftac[0]=(0,0) +let ifftac = ifft(fftac) +plot ifft(fftac) ac vs a title COS_With_DC_REMOVED +*=========DC_Plus_sin_Nyqusit_Remove_DC==================== +let indx = 0 +repeat $&numb +let ac[indx]= sin(indx*360/2)+1 +j(0) +let indx = indx +1 +end + +plot ac vs a title Nyq_SIN + +let fftac=fft(ac) +plot real(fftac) imag(fftac) vs a title Nyq_FREQ_SIN +let fftac[0]=(0,0) +let ifftac = ifft(fftac) +plot ifft(fftac) ac vs a title COS_With_DC_REMOVED + +*=========DC_Plus_COS_Remove_One_BIN==================== +let indx = 0 +repeat $&numb +let ac[indx]= cos(indx*360/8)+1 +j(0) +let indx = indx +1 +end + +let fftac=fft(ac) +let fftac[2]=(0,0) +plot real(fftac) imag(fftac) vs a title DC_Plus_Cos + +let ifftac = ifft(fftac) +plot ifft(fftac) ac vs a title ONE_BIN_REMOVED + +plot real(ifft(fftac)) imag(ifft(fftac)) vs a title ONE_BIN_REMOVED + +.endc +.end