10 REM DFT DI UN SEGNALE A DUE TONI - MOTORE FULL 20 REM DATA: CAMPIONI, BIN TONO1, BIN TONO2 30 DATA 32,3,7 40 LET NSAMP=0:LET TONEA=0:LET TONEB=0 50 READ NSAMP,TONEA,TONEB 60 IF NSAMP<16 OR NSAMP>128 THEN GOTO 550 70 IF NSAMP<>INT(NSAMP) THEN GOTO 550 80 IF TONEA<>INT(TONEA) OR TONEB<>INT(TONEB) THEN GOTO 550 90 IF TONEA<1 OR TONEA>=NSAMP/2 THEN GOTO 550 100 IF TONEB<1 OR TONEB>=NSAMP/2 THEN GOTO 550 110 IF TONEA=TONEB THEN GOTO 550 120 LET PIVAL=3.141592653589793 130 LET SAMPLE=0:LET ANGLE=0:LET REPART=0:LET IMPART=0 140 LET POWER=0:LET TIMEPOW=0:LET FREQPOW=0:LET EXPECT=0 150 LET MAXERR=0:LET SCALE=0:LET COUNT=0 160 PRINT "DFT;N=",NSAMP,CRLF 170 REM ENERGIA NEL TEMPO 180 FOR J=0 TO NSAMP-1 190 GOSUB 510 200 TIMEPOW=TIMEPOW+SAMPLE*SAMPLE 210 NEXT J 220 TIMEPOW=TIMEPOW/NSAMP 230 REM DFT COMPLETA, NORMALIZZATA PER N 240 FOR I=0 TO NSAMP-1 250 REPART=0:IMPART=0 260 FOR J=0 TO NSAMP-1 270 GOSUB 510 280 ANGLE=2*PIVAL*I*J/NSAMP 290 REPART=REPART+SAMPLE*COS(ANGLE) 300 IMPART=IMPART-SAMPLE*SIN(ANGLE) 310 NEXT J 320 REPART=REPART/NSAMP:IMPART=IMPART/NSAMP 330 POWER=REPART*REPART+IMPART*IMPART 340 FREQPOW=FREQPOW+POWER 350 EXPECT=0 360 IF I=0 THEN EXPECT=0.25 370 IF I=TONEA OR I=NSAMP-TONEA THEN EXPECT=0.5 380 IF I=TONEB OR I=NSAMP-TONEB THEN EXPECT=0.25 390 IF ABS(SQR(POWER)-EXPECT)>MAXERR THEN MAXERR=ABS(SQR(POWER)-EXPECT) 400 SCALE=INT(SQR(POWER)*1000000000+0.5) 410 PRINT "BIN;",I,";",REPART,";",IMPART,";",SCALE,CRLF 420 COUNT=COUNT+1 430 NEXT I 440 PRINT "ENERGY;",TIMEPOW,";",FREQPOW,CRLF 450 PRINT "MAXERR;",MAXERR,CRLF 460 IF COUNT<>NSAMP THEN GOTO 560 470 IF MAXERR>0.00000001 THEN GOTO 560 480 IF ABS(TIMEPOW-FREQPOW)>0.00000001 THEN GOTO 560 490 PRINT "DFT TEST OK",CRLF 500 END 510 REM SEGNALE: DC + SENO + COSENO SU BIN INTERI 520 ANGLE=2*PIVAL*J/NSAMP 530 SAMPLE=0.25+SIN(TONEA*ANGLE)+0.5*COS(TONEB*ANGLE) 540 RETURN 550 PRINT "ERRORE PARAMETRI DFT",CRLF:END 560 PRINT "ERRORE AUTOVERIFICA DFT",CRLF:END