REM nm6bbc.bas - jackord@kw.igs.net - 16 Feb 08 - BBC Basic v5.50b REM FFSS coefficients for Pulse A and Pulse B REM on a n-segment string clamped at both ends *FLOAT64 INSTALL @lib$+"WINLIB5" REM Initialize Window b1% = FN_button("Pulse A", 92, 5, 60, 20, FN_setproc(PROCp1), 0) b2% = FN_button("Pulse B", 162, 5, 60, 20, FN_setproc(PROCp2), 0) c1% = FN_combobox("", 232, 5, 70, 120, 0, 3) WindowWidth=392 WindowHeight=260 VDU 23,22,WindowWidth;WindowHeight;8,15,16,128 SYS "SetWindowText", @hwnd%, "Pulse on an N-Segment String" SYS "SendMessage", c1%, &143, 0, "n=48" SYS "SendMessage", c1%, &143, 1, "n=96" SYS "SendMessage", c1%, &143, 1, "n=192" SYS "SendMessage", c1%, &143, 1, "n=384" SYS "SendMessage", c1%, &14E, 0, 0 DIM y(384): DIM v(384): DIM yy%(384) DIM b(64): DIM d(64): DIM w(64) kk=0: plt=0 OFF: VDU 5 REPEAT WAIT 1 UNTIL FALSE QUIT DEF PROCp1: kk=1 : REM Pulse A DEF PROCp2: kk=2 : REM Pulse B SYS "SendMessage", c1%, &147, 0, 0 TO ch1% n=48*2^ch1%: s=0 IF n=48 THEN nm=n ELSE nm=64 FOR i=0 TO n y(i)=0: v(i)=0 NEXT i FOR i=3*n/8 TO 5*n/8 z=(i-3*n/8)*PI/(n/8) y(i)=40*(1-COS(z)) v(i)=-40*PI/(n/8)*SIN(z) IF kk=2 THEN v(i)=v(i)*COS(4*z)+y(i)*4*PI/(n/8)*SIN(4*z) y(i)=y(i)*COS(4*z) ENDIF NEXT i FOR i=1 TO nm-1 b(i)=0: d(i)=0: w(i)=2*SIN(PI*i/2/n) FOR j=1 TO n-1 b(i)=b(i)+2*y(j)*SIN(PI*i*j/n)/n d(i)=d(i)+2*v(j)/w(i)*SIN(PI*i*j/n)/n NEXT j s=s+b(i)*b(i)+d(i)*d(i) NEXT i CLS: GCOL 0: LINE 16, 504, 16, 16: DRAW 768, 16 GCOL 9 FOR i=1 TO nm-1 yy%(i)=INT(2400*(b(i)*b(i)+d(i)*d(i))/s+1) IF yy%(i)>1 THEN RECTANGLE FILL 16+12*i-4, 16, 10, yy%(i) NEXT i k=0: z=0 WHILE z/s<.9999 k=k+1: z=z+b(k)*b(k)+d(k)*d(k) ENDWHILE GCOL 12: MOVE 16, 16 IF n=48 THEN nm=288 ELSE nm=384 FOR i=n/48 TO nm STEP nm/48 DRAW 16+2*i, 16+INT(4.8*n*SIN(i*PI/12/n)+1) NEXT i GCOL 0: MOVE 160, 430: PRINT "For Nmax = "; k MOVE 400, 430: PRINT "Percent = "; INT(100000*z/s)/1000 ENDPROC