1000 ' save "FFT-C",A 1010 'ア」」」」」」」」」」」」」」」」」」」」」」」」」」」」」」」」」」オ 1020 '・ FFT−A.BAS MS−DOS版 FFTプログラム    ・ 1030 '・ ( FFT Ver.10.9 Programed by 所研究室 91/ 4/26-92/ 7/18) ・ 1040 '・   93/ 2/21 ・ 1050 '・ ● 伝達関数名  A:¥FFT¥*.FUN  ・ 1060 '・ データ名   A:¥FFT¥*.FFT (APC and AR1100 対応) ・ 1070 '・ FFTのデータは16ビットの整数型(%:2の補数表現)です。 ・ 1080 '・ 波形作成によるデータは、12ビットで±5Vとして作成されます。 ・ 1090 '・ -5V=&HF800 0V=&H0000 +5V=&H0800 ・ 1100 '・   ・ 1110 '・ ● 伝達関数のゲイン3〜7はそれぞれ30〜70dBのゲインに対応。 ・ 1120 '・   ただし、ゲイン3,5 は ゲイン4,6の −10dB を意味する。 ・ 1130 '・   例:ゲイン6は50Hzでの発信器の出力電圧が1Vp-pで、    ・ 1140 '・     損失電流:0.714μAp-p,検出電圧:0.714Vp-p。 ・ 1150 'ケ」」」」」」」」」」」」」」」」」」」」」」」」」」」」」」」」」」ス 1160 ' 1170 CLEAR &H600:SGMNT=&H9A00 '機械語領域 &H6000 バイト確保 1180 DEF SEG=&HAFE0:BLOAD"INST.FFT" 'FFT機械語ルーチンの読み込み 1190 DEF SEG=SGMNT :BLOAD"FFTC.MAC" 1200 L10=LOG(10):PAI=3.1415926#:CL=7:MODE=1:SCREEN 3,1,0,1:CONSOLE 0,25,0,1 1210 SCR=1:WIDTH 80,25:REPETE=1:OPTION BASE 0:RAGI=180/PAI:MACH=&H8A0 1220 CHMAX=7:KEY ON:HELP ON:ON HELP GOSUB *HHELP:ON ERROR GOTO *EERROR 1230 ON KEY GOSUB *FUME,*FI1,*FI2,*COP,*COMM,*CCL1,*CCL2,*CDIR,*SCR1,*SCR2 1240 FOR I=1 TO 10:KEY I,"KEY OFF": MC$(I-1)="7":NEXT I 1250 ' 1260 '●●● A:¥FFTにある伝達関数の読み込み 1270 FILES "A:\FFT\*.FUN":PRINT 1280 INPUT "伝達関数のファイル名は? ( Return : A:\FFT\NEWFUN.FUN )",FUN$ 1290 IF FUN$="" THEN FUN$="NEWFUN.FUN"' ← 伝達関数の名前 1300 IF INSTR(FUN$,".")=0 THEN FUN$=FUN$+".FUN" 1310 DIM FUN(39,1,4) '●●● 伝達関数は Log(10)[VO/Iin]で記述 1320 DIM DT%(1024,7),DR%(1024,7),DI%(1024,7),YAJ%(300),FCH(7),COMM$(7),IT(7) 1330 DIM FIL$(7),FFT$(7),DATI$(7),D(512),S(512),TANI(7),D$(20,1),TFREQ(40) 1340 DIM L$(20) '●●● 以上データはすべて配列化 1350 DEF SEG=VARPTR(FUN(0,0,0),1): BLOAD FUN$,VARPTR(FUN(0,0,0),0) 1360 TANI=5*2^(-11) '●●● 12 Bit A/D Converter の最小量子化電圧 1370 CLR(0)=2:CLR(1)=4:CLR(2)=6:CLR(3)=7: RESTORE *FREQS 1380 *FREQS '   伝達関数を評価する周波数は次の40点 1390 DATA 25,30,50,60,75,90,100,110,120,130,140,150,160,170,180,190,200 1400 DATA 240,250,300,350,360,400,410,420,430,440,450,480,500,540,600,700 1410 DATA 850,1000,1500,2000,2500,3000,4000,10000 '最後の10000はダミー 1420 FOR DAF=0 TO 40: READ TFREQ(DAF): NEXT DAF 1430 GOSUB *COMMENT : GOSUB *YAJI 1440 ' 1450 *MENU '●●● メインメニュ− ●●● 1460 SCREEN 3,1,1,17:SCR=2:CONSOLE 0,25,0,1:CLS 3:GOSUB *BEPE 1470 L$="02005DATE "+DATE$+SPACE$(47)+"TIME":GOSUB *L 1480 LOCATE 24,0: COLOR 7: PRINT FFTVA$: FDADS=0 1490 CONSOLE 2,23 :IN$="" 1500 LINE(165,65)-(480,291),1,BF 1510 LINE(160,60)-(475,286),6,B 1520 LINE(165,65)-(470,281),6,BF,CHR$(&H0)+CHR$(&H0)+CHR$(&H0) 1530 PAINT (163,63),5,6 1540 LINE(442,16)-(482, 32),4,BF,CHR$(&HFF)+CHR$(&HFF)+CHR$(&HFF) 1550 PRINT STRING$(80,"-") 1560 L$="55012 HELP :主メニュー, 画面=":GOSUB *L 1570 L$="27056<FFTメニュ−選択画面>":GOSUB *L 1580 L$="2507"+MC$(1)+"1.":GOSUB *L:COLOR 4:PRINT"FFT" 1590 L$="2509"+MC$(2)+"2.":GOSUB *L:COLOR 4:PRINT"逆FFT" 1600 L$="2511"+MC$(3)+"3.":GOSUB *L:COLOR 4:PRINT"データ保存" 1610 L$="2513"+MC$(4)+"4.":GOSUB *L:COLOR 4:PRINT"データ読込" 1620 L$="2515"+MC$(5)+"5.":GOSUB *L:COLOR 5:PRINT"可変長読込" 1630 L$="4007"+MC$(6)+"6.":GOSUB *L:COLOR 3:PRINT"デ−タ編集" 1640 L$="4009"+MC$(7)+"7.":GOSUB *L:COLOR 4:PRINT"グラフ作成" 1650 L$="4011"+MC$(8)+"8.":GOSUB *L:COLOR 4:PRINT"データ複写" 1660 L$="4013"+MC$(9)+"9.":GOSUB *L:COLOR 4:PRINT"データ拡大" 1670 L$="4015"+MC$(0)+"0.":GOSUB *L:COLOR 4:PRINT"終了" 1680 L$="20242f・1 ":GOSUB *L:COLOR 4:PRINT": ファンクションキ−メニュ−表示"; 1690 LOCATE 10,19:COLOR 6:PRINT "処理選択(";:COLOR 7 1700 PRINT "0-9,Z";:COLOR 6:PRINT ":波形修正&窓関数,";:COLOR 7 1710 PRINT "A&X";:COLOR 6:PRINT ":伝達関数表示&計算)" 1720 IF IN$=CHR$(13) THEN 1840 1730 ARU$="AaチZzツXxサ0123456789"+CHR$(30)+CHR$(31)+CHR$(13):GOSUB *IK 1740 IF INSTR("1234567890",IN$)<>0 THEN COMM=VAL(IN$): GOTO 1820 1750 IF INSTR("ZzツAaチXxサ",IN$)<>0 THEN 1860 1760 IF IN$=CHR$(13) THEN 1820 1770 IF IN$=CHR$(31) THEN MC$(COMM)="7": COMM=COMM+1 ELSE 1790 1780 IF COMM=10 THEN COMM=0 : GOTO 1810 ELSE 1810 1790 IF IN$=CHR$(30) THEN MC$(COMM)="7": COMM=COMM-1 ELSE 1820 1800 IF COMM=-1 THEN COMM=9 1810 MC$(COMM)="2":GOTO 1580 1820 FOR I=1 TO 10: MC$(I-1)="7":NEXT I 1830 MC$(COMM)="2": IN$=CHR$(13): GOTO 1580 1840 MENU=0:L$="43055"+AKCNV$(RIGHT$(STR$(COMM),1))+"実行中":GOSUB *L 1850 IF COMM=9 THEN GOSUB *KAKUDAI 1860 IF INSTR("Xxサ",IN$)<>0 THEN GOSUB *XFUN '伝達関数計算 1870 IF INSTR("Zzッ",IN$)<>0 THEN GOSUB *ZFUN '波形データ修正 1880 IF INSTR("Aaチ",IN$)<>0 THEN CLS 3:FDADS=1:GOSUB *XF1 :GOTO *MENU'伝関表示 1890 IF COMM=5 THEN FDADS=1 ELSE FDADS=0 1900 ON COMM+1 GOSUB *EEND,*FFT,*FFT,*SSAVE,*LLOAD,*DADS,*EEDIT,*GRAPH,*EXCH 1910 GOTO *MENU:' 終了 FFT 逆FFT 保存 読込 AD-3C 編集 表示 交換 1920 ' 1930 *EEND '●●● 終了 ●●● 1940 CONSOLE 20,5:CLS 1950 L$="20212終了して"+YES$:GOSUB *L: ARU$="YyンNnミ"+CHR$(13):GOSUB *IK 1960 IF INSTR("Yyン"+CHR$(13),IN$)=0 THEN RETURN *MENU 1970 KEY 1,"auto " 1980 KEY 2,"list " 1990 KEY 3,"run"+CHR$(13) 2000 KEY 4,"chdir "+CHR$(&H22) 2010 KEY 5,"llist " 2020 KEY 6,"load "+CHR$(&H22) 2030 KEY 7,"save "+CHR$(&H22) 2040 KEY 8,"files " 2050 KEY 9,"edit ." 2060 KEY 10,"chdir "+CHR$(&H22)+"a:\fft" 2070 ON ERROR GOTO 0:COLOR 7:CONSOLE 0,25,1:KEY OFF:HELP OFF 2080 SCREEN ,,1,17:CLS 3 2090 SCREEN ,,0,1:CLS 3:END 2100 ' 2110 *FFT '●●● FFT & 逆FFT ●●● 2120 P=0: 2130 GOSUB *CN 2140 IF IN$=CHR$(13) THEN IF P=1 THEN GOTO 2180 ELSE GOTO 2130 2150 LOCATE 30,22+P:COLOR 7:PRINT CNL$;"番号 = ";:COLOR 4:PRINT IN$ 2160 IF P=0 THEN FFT1=VAL(IN$)-1 2170 P=P+1:IF P=1 THEN GOTO 2130 ELSE FFT2=VAL(IN$)-1 2180 SCREEN ,3: GOSUB *SCR1 2190 DEF SEG=SGMNT 2200 IF COMM=1 THEN POKE &H810,0 ELSE POKE &H810,&HDD 2210 FCH(0)=FFT1:FCH(1)=FFT1 :GOSUB *FC 2220 FI%(0,F1)=0 2230 DEF SEG=SGMNT:CALL MACH 2240 FI%(0,F1)=0 2250 IF COMM=1 THEN FR%(0,F1)=FR%(0,F1)*2 2260 IF COMM=1 THEN FFT$(F1)="(f) " ELSE FFT$(F1)="(i) " 2270 IF P=1 THEN GOTO 2290 2280 IF P=2 THEN P=3: FFT1=FFT2 : GOTO 2210 2290 RETURN 2300 ' 2310 *LLOAD '●●● ロ−ド ●●● 2320 LLSS$="*** 波形データ読込 ***" 2330 L$="10195 2入力:電源波形→検出波形連続自動読み込み"+SPACE$(10) 2340 GOSUB *L: GOSUB *DF 2350 P=0 2360 IF CHAN2=2 THEN L$="20192電源の"+CNL$+"→検出の"+CNL$:GOSUB *L:LOCATE ,17 2370 PRINT: NL=1:GOSUB *CN:NL=0 2380 IF IN$=CHR$(13) THEN GOTO 2370 2390 PRINT 2400 C=VAL(IN$)-1:IF CHAN2=2 THEN FIL$(C)=FI$+"G" ELSE FIL$(C)=FI$ 2410 SHO=1 2420 DEF SEG=VARPTR(DT%(0,C),1) 2430 IF CHAN2=0 THEN BLOAD DR$+FI$,VARPTR(DT%(0,C),0):GOTO 2450 2440 BLOAD DR$+FI$+"G",VARPTR(DT%(0,C),0) 2450 DEF SEG=&H9FE0 2460 IF CHAN2=0 THEN BLOAD DR$+FI$+".#" ELSE BLOAD DR$+FI$+"G.#" 2470 COMM$(C)="" 2480 FOR I=3 TO PEEK(1)+2:COMM$(C)=COMM$(C)+CHR$(PEEK(I)):NEXT I 2490 IT(C)=VAL(RIGHT$(COMM$(C),PEEK(2))) 2500 GOSUB *I12 2510 COMM$(C)=LEFT$(COMM$(C),I1-2) 2520 FFT$(C)="" 2530 IF I0>0 THEN COMM$(C)=MID$(COMM$(C),I0+9) 2540 COMM$(C)=STR$(TANI(C))+" V/Digit "+COMM$(C) 2550 GOSUB *HYOJI 2560 IF CHAN2=2 THEN CHAN2=0: GOTO 2370 2570 GOSUB *HAK: RETURN *MENU 2580 ' 2590 *SSAVE '●●● セ−ブ ●●● 2600 GOSUB *CNDIS 2610 LLSS$="*** 波形データ保存 ***":C=VAL(IN$)-1 2620 GOSUB *DF:FIL$(C)=FI$ 2630 LOCATE 20:COLOR 6:PRINT"コメント";BAN2$;"(Return:自動)="; 2640 COLOR 7:INPUT CO$ 2650 IF CO$>"" THEN COMM$(C)=CO$ 2660 I0=INSTR(COMM$(C),"V/Digit") 2670 IF I0>0 THEN COMM$(C)=MID$(COMM$(C),I0+8) 2680 IF TANI(C)=0 THEN TANI(C)=TANI 2690 COMM$(C)=STR$(TANI(C))+" V/Digit "+COMM$(C) 2700 COMM$(C)=COMM$(C)+" DATE "+DATE$+" TIME "+TIME$ 2710 COMM$(C)=COMM$(C)+" INTERVAL = "+STR$(IT(C)) 2720 DEF SEG=VARPTR(DT%(0,C),1):BSAVE DR$+FI$,VARPTR(DT%(0,C),0),2048 2730 DEF SEG=&H9FE0 2740 FOR I=3 TO LEN(COMM$(C))+2:POKE I,ASC(MID$(COMM$(C),I-2,1)):NEXT I 2750 POKE 1,LEN(COMM$(C)):POKE 2,LEN(STR$(IT(C))) 2760 BSAVE DR$+FI$+".#",0,250 2770 GOSUB *I12 2780 COMM$(C)=LEFT$(COMM$(C),I1-2) 2790 GOSUB *HYOJI: GOSUB *HAK:RETURN *MENU 2800 ' 2810 *EXCH '●●● デ−タ交換&複写 ●●● 2820 L$="10196チャンネル間の[1:データ交換,2:データ複写],1or2を入力 " 2830 P=0 :GOSUB *L 2840 ARU$="12":GOSUB *IK:ANS=VAL(IN$) 2850 IF ANS=1 THEN COMM=5 ELSE IF ANS=2 THEN COMM=8 ELSE 2820 2860 GOSUB *CN:IF IN$=CHR$(13) THEN GOTO 2860 2870 LOCATE 25+P*17,22:COLOR 7:PRINT"Channel( ";IN$;" )"; 2880 COLOR 4:IF P=0 THEN IF COMM=5 THEN PRINT" <=> " ELSE PRINT" =>> " 2890 FCH(P)=VAL(IN$)-1:P=P+1:IF P=1 THEN GOTO 2860 2900 L$="00246"+SPACE$(30)+YES$:GOSUB *L 2910 ARU$="YyンNnミ"+CHR$(13):GOSUB *IK 2920 IF INSTR("Yyン"+CHR$(13),IN$)=0 THEN RETURN *MENU 2930 LOCATE 30,24:PRINT SPACE$(49);:F0=FCH(0):F1=FCH(1) 2940 IF COMM=8 THEN GOTO 3060 2950 FOR I=0 TO 1024 2960 SWAP DT%(I,F0),DT%(I,F1) 2970 SWAP DR%(I,F0),DR%(I,F1) 2980 SWAP DI%(I,F0),DI%(I,F1) 2990 NEXT I 3000 SWAP IT(F0),IT(F1) 3010 SWAP COMM$(F0),COMM$(F1) 3020 SWAP DATI$(F0),DATI$(F1) 3030 SWAP FIL$(F0),FIL$(F1) 3040 SWAP FFT$(F0),FFT$(F1) 3050 SWAP TANI(F0),TANI(F1):RETURN *MENU 3060 FOR I=0 TO 1024 3070 DT%(I,F1)=DT%(I,F0) 3080 DR%(I,F1)=DR%(I,F0) 3090 DI%(I,F1)=DI%(I,F0) 3100 NEXT I 3110 IT(F1)=IT(F0) 3120 COMM$(F1)=COMM$(F0) 3130 DATI$(F1)=DATI$(F0) 3140 FIL$(F1)=FIL$(F0) 3150 FFT$(F1)=FFT$(F0) 3160 TANI(F1)=TANI(F0):RETURN *MENU 3170 ' 3180 *EEDIT '●●● デ−タ編集 ●●● 3190 CLS:MENU=2 3200 L$(1)="28056<デ−タ編集メニュ−>" 3210 L$(2)="240771."+TD$+"の作成" 3220 L$(3)="26085[正弦波,方形波,他]" 3230 L$(4)="240972."+TD$+"の規格化" 3240 L$(5)="26105[時間窓の位相合わせ]" 3250 L$(6)="241173.周波数軸デ−タの変更" 3260 L$(7)="26125[FFTスペクトル編修]" 3270 L$(8)="241374.デジタルフィルタリング" 3280 L$(10)="241575.デ−タの伝達関数による処理" 3290 L$(11)="20206コマンド"+BAN$+"(1〜5)" 3300 FOR I=1 TO 11: L$=L$(I):GOSUB *L:NEXT I 3310 ARU$="12345":GOSUB *IK 3320 COM2=VAL(IN$):MENU=0 3330 ON COM2 GOTO *TIME1,*TIME2,*FREQ,*FREQ,*GIJI 3340 *TIME1 '●●● 時間軸デ−タ作成 3350 CLS:MENU=3 3360 L$(1)="24056<"+TD$+"作成メニュ−>" 3370 L$(2)="30066(5V=12bit)" 3380 L$(3)="240871.正弦波の合成" 3390 L$(4)="241072.方形波、三角波、のこぎり波" 3400 L$(5)="20206コマンド"+BAN$+"(1,2)" 3410 FOR I=1 TO 5: L$=L$(I):GOSUB *L:NEXT I 3420 ARU$="12":GOSUB *IK 3430 COM4=VAL(IN$) :LOCATE 24,10-(COM4-1)*2: PRINT SPC(30) 3440 GOSUB *CNDIS 3450 F0=VAL(IN$)-1:P=1:FCH(C)=F0 3460 GOSUB *YES1 3470 IF ANS1=0 THEN GOTO *TIME1 3480 MENU=0:ON COM4 GOTO *SSIN,*HSN 3490 *SSIN '●●● 正弦波の合成 3500 KIHON=1:MENU=4 3510 CLS 3520 L$="24056<正弦波デ−タの作成と合成>":GOSUB *L 3530 L$="30074周波数[Hz] = ":GOSUB *L 3540 IF KIHON=0 THEN GOTO 3570 3550 L$="24075基本波":GOSUB *L 3560 L$="30134波数 [回] = ":GOSUB *L 3570 L$="30094位相差[ ゚] = ":GOSUB *L 3580 L$="30114振幅 [V] = ":GOSUB *L 3590 LOCATE 43,7:COLOR 7:INPUT FREQ 3600 LOCATE 43,9:INPUT ISOUSA 3610 LOCATE 43,11:INPUT VMAX 3620 IF KIHON=1 THEN LOCATE 43,13:COLOR 7:INPUT HASU 3630 GOSUB *YES1 3640 MENU=0 3650 IF ANS1=0 THEN GOTO 3510 3660 IF KIHON=1 THEN IT(F0)=HASU/FREQ/1024 3670 SINP=VMAX/TANI 3680 WM=2*PAI*FREQ*IT(F0) 3690 FI=ISOUSA/180*PAI 3700 MAX=0:MIN=-0 3710 FOR I=0 TO 1024 3720 IF KIHON=1 THEN DT%(I,F0)=0 3730 DT%(I,F0)=DT%(I,F0)+SINP*SIN(WM*I+FI) 3740 NEXT I 3750 TANI(F0)=TANI 3760 C=0:GOSUB *FMAX 3770 DIV=(MAX-MIN):OFST=MAX:BAI=168/DIV 3780 X1=64:X2=576:Y1=210:Y2=380:A=2 3790 CLR=2 3800 C=0:P=1:SCREEN ,,SCR-1,1+(SCR-1)*16:CLS 3:GOSUB *DROWT 3810 IF KIHON<>1 THEN GOTO 3860 3820 COMM$(F0)="正弦波の合成 基本波="+STR$(FREQ)+"[Hz]" 3830 FIL$(F0)="SIN" 3840 FFT$(F0)="" 3850 KIHON=0 3860 GOTO 3520 3870 *HSN '●●● 任意波形の作成 3880 CLS 3890 L$(1)="28056<任意波形デ−タ作成>" 3900 L$(2)="250741.方形波" 3910 L$(3)="250942.三角波" 3920 L$(4)="251143.のこぎり波" 3930 L$(5)="20206コマンド"+BAN$+"(1〜3)" 3940 FOR I=1 TO 5: L$=L$(I):GOSUB *L:NEXT I 3950 ARU$="123":GOSUB *IK:HAKEI=VAL(IN$) 3960 L$="20207"+SPACE$(40):GOSUB *L 3970 IF HAKEI<>1 THEN LOCATE 25,7:PRINT" " 3980 IF HAKEI<>2 THEN LOCATE 25,9:PRINT" " 3990 IF HAKEI<>3 THEN LOCATE 25,11:PRINT" " 4000 L$(1)="20194周波数[Hz] = " 4010 L$(2)="20204波数 [回] チ= " 4020 L$(3)="20214位相差[゚ ] = " 4030 L$(4)="20224振幅 [V] = " 4040 FOR I=1 TO 4: L$=L$(I):GOSUB *L:NEXT I 4050 LOCATE 35,19:COLOR 7:INPUT FREQ 4060 LOCATE 35,20:INPUT HASU 4070 LOCATE 35,21:INPUT ISOUSA 4080 LOCATE 35,22:INPUT VMAX 4090 GOSUB *YES1 4100 IF ANS1=0 THEN GOTO 3880 4110 IT(F0)=HASU/FREQ/1024 4120 SINP=VMAX/TANI 4130 PERI=512/HASU 4140 FI=ISOUSA*1024/360/HASU 4150 MAX=0:MIN=-0 4160 FOR I=0 TO 1024 4170 ON HAKEI GOSUB 4180,4190,4210:GOTO 4230 4180 ATAI=SINP:RETURN 4190 ATAI=SINP/PERI*2*FI:IF FI*2>PERI THEN ATAI=2*SINP-ATAI 4200 RETURN 4210 ATAI=SINP/PERI*FI:IF SINP<0 THEN ATAI=SINP-ATAI 4220 RETURN 4230 DT%(I,F0)=ATAI:FI=FI+1:IF FI>PERI THEN FI=FI-PERI:SINP=-SINP 4240 IF MAXDT%(I,F0) THEN MIN=DT%(I,F0) 4260 NEXT I 4270 IF HAKEI=1 AND ISOUSA=0 THEN DT%(0,F0)=-DT%(0,F0) 4280 COMM$(F0)="任意波形作成="+STR$(FREQ)+"[Hz]" 4290 FIL$(F0)="Nini" 4300 TANI(F0)=TANI 4310 FFT$(F0)="" 4320 DIV=(MAX-MIN):OFST=MAX:BAI=296/DIV 4330 X1=64:X2=576:Y1=52:Y2=348:A=2 4340 CLR=2 4350 SCREEN ,,SCR-1,1+(SCR-1)*16:CLS 3:GOSUB *DROWT 4360 LOCATE ,23:GOSUB *HAK 4370 RETURN *MENU 4380 *TIME2 '●●● 時間軸デ−タの規格化 4390 CLS 4400 L$(1)="240662."+TD$+"の規格化" 4410 L$(2)="26075[時間窓の位相合わせ]" 4420 L$(3)="260941チャンネルのみ ・・・ 1" 4430 L$(4)="261142チャンネル連続 ・・・ 2" 4440 L$(5)="24137例:CH1:電源,CH2:検出を規格化後" 4450 L$(6)="24147 CH3とCH4へ格納する場合には" 4460 L$(7)="241552:同時を入力後,1=>3 と入力" 4470 FOR I=1 TO 7: L$=L$(I):GOSUB *L:NEXT I 4480 ARU$="12":GOSUB *IK:ANS=VAL(IN$):IF ANS=2 THEN GOSUB *RENZOKU 4490 GOSUB *CNDIS1 4500 IF ANS1=0 THEN GOTO *EEDIT 4510 CLS 3:P=1:C=0 4520 MAX=+0:MIN=-0 4530 GOSUB *FMAX 4540 DIV=(MAX-MIN):OFST=MAX:BAI=168/DIV 4550 X1=64:X2=576:Y1=52:Y2=220:A=2 4560 CLR=2 4570 C=0 4580 GOSUB *DROWT 4590 P0=0:P1=1023:CC=0 4600 CONSOLE 20,5 4610 WHILE DT%(P0,F0)>0 4620 P0=P0+1 4630 WEND 4640 WHILE DT%(P0,F0)<=0 4650 P0=P0+1 4660 IF P0>512 THEN 4670 4670 WEND 4680 P0=P0-1: IF P0<0 THEN P0=0 ELSE IF P0>510 THEN 4590 4690 WHILE DT%(P1,F0)<0 4700 P1=P1-1 4710 WEND 4720 WHILE DT%(P1,F0)>0 4730 P1=P1-1 4740 IF P1<0 THEN 4750 4750 WEND 4760 IF P1<0 THEN 4590 ELSE IF P1>1023 THEN 4590 4770 LINE(0,250)-(639,270),0,BF 4780 PUT (P0/2+34,250),YAJ%,PSET 4790 LINE(0,280)-(639,300),0,BF 4800 PUT (P1/2+34,280),YAJ%,PSET 4810 LOCATE 30,20:COLOR 7 4820 PRINT USING "開始点(####)の値は(###### )";P0;DT%(P0,F0) 4830 LOCATE 30,21 4840 PRINT USING "終端点(####)の値は(###### )";P1;DT%(P1,F0) 4850 IF P1=1024 THEN L$="302221024番目の点では規格化できません !":GOSUB *L 4860 IF P1=1024 THEN GOSUB *BEPE :P1=1023:GOTO 4830 4870 IF P1<1024 THEN L$="30227"+SPACE$(40) :GOSUB *L 4880 LOCATE 25,20+CC*1:COLOR 2:PRINT"●" 4890 LOCATE 25,21-CC*1:PRINT" ":COLOR 7 4900 LOCATE 2,23:PRINT SAYU$ 4910 PSMAX=1024:GOSUB *YAJI1 4920 IF IN$=CHR$(13) THEN GOTO 4950 4930 IF IN$=" " THEN CC=1-CC 4940 GOTO 4770 4950 LOCATE 25,24:COLOR 6 4960 PRINT"デ−タ範囲は";YES$; 4970 ARU$="YyンNnミ"+CHR$(13):GOSUB *IK 4980 CLS:IF INSTR("Nnミ",IN$)<>0 THEN GOTO 4610 4990 IF P0>P1 THEN SWAP P0,P1 5000 SHOKI=P0: IF SGN(DT%(P0,F0))=SGN(DT%(P0+1,F0)) THEN DELTA=0:GOTO 5020 5010 DELTA=DT%(P0,F0)/(DT%(P0,F0)-DT%(P0+1,F0)) 5020 P0=P0+DELTA 5030 IF SGN(DT%(P1,F0))=SGN(DT%(P1+1,F0)) THEN DELTA2=0:GOTO 5050 5040 DELTA2=DT%(P1,F0)/(DT%(P1,F0)-DT%(P1+1,F0)) 5050 P1=P1+DELTA2 5060 PERIOD=P1-P0 5070 LOCATE 18,22:COLOR 7 5080 INPUT "繰り返し回数(自然数)を入力してください。(1:RETURN) ",N 5090 N=INT(N):IF N=0 THEN N=1 5100 CLS 5110 ANS=ANS+1 5120 FOR I=0 TO 1024/N 5130 AA=PERIOD/1024*I*N 5140 BB=INT(AA+DELTA) 5150 A1=DT%(SHOKI+BB,F0):OWARI=SHOKI+BB+1: IF OWARI>1024 THEN OWARI=1024 5160 A2=DT%(OWARI,F0) 5170 DT%(I,F1)=A1+(A2-A1)*(AA+DELTA-BB) 5180 IF N=1 THEN GOTO 5220 5190 FOR P=1 TO N-1 5200 DT%(INT(I+P*1024/N),F1)=DT%(I,F1) 5210 NEXT P 5220 NEXT I 5230 FIL$(F1)=FIL$(F0)+"K" 5240 FFT$(F1)="" 5250 TANI(F1)=TANI(F0) 5260 COMM$(F1)=FIL$(F0)+" 規格化" 5270 IT(F1)=IT(F0)*N*PERIOD/1024 5280 IF ANS=4 THEN 5300 5290 IF ANS=3 THEN F0=F0+1:F1=F1+1:GOTO 5110 5300 CLS 3 5310 RETURN *MENU 5320 *FREQ '●●● 周波数軸デ−タの変更 5330 P=0: CLS :IF COM2=3 THEN L$="240863.周波数軸デ−タの変更":GOSUB *L 5340 IF COM2=4 THEN L$="240864.デジタルフィルタリング":GOSUB *L 5350 L$="26105[FFTスペクトル編修]":GOSUB *L 5360 GOSUB *CN 5370 IF IN$=CHR$(13) AND P=0 THEN GOTO 5360 5380 IF IN$=CHR$(13) THEN GOTO 5420 5390 LOCATE 25+13*P,22:IF P=1 THEN PRINT"=> "; 5400 COLOR 7:PRINT"Channel( ";:COLOR 4:PRINT IN$;:COLOR 7:PRINT" )"; 5410 FCH(P)=VAL(IN$)-1:P=P+1:IF P=1 THEN GOTO 5360 5420 GOSUB *YES1:GOSUB *SCR1 5430 IF ANS1=0 THEN GOTO *EEDIT 5440 F0=FCH(0):F1=FCH(1) 5450 CLS 3:IF P=1 THEN F1=F0:GOTO 5530 5460 FOR I=0 TO 1024 5470 DT%(I,F1)=DT%(I,F0) 5480 DR%(I,F1)=DR%(I,F0) 5490 DI%(I,F1)=DI%(I,F0) 5500 NEXT I 5510 IT(F1)=IT(F0):TANI(F1)=TANI(F0) 5520 P=1 5530 MAX=0 5540 FOR I=0 TO 50 5550 IF ABS(DR%(I,F1))>MAX THEN MAX=ABS(DR%(I,F1)):MI=I 5560 IF ABS(DI%(I,F1))>MAX THEN MAX=ABS(DI%(I,F1)):MI=I 5570 NEXT I 5580 XA=64:XB=576:YA=52:YB=132:BAI=80/LOG(MAX*2) 5590 XC=64:XD=576:YC=140:YD=220 5600 C=1:CLS 3: GOSUB *DROWF 5610 IF COM2=4 THEN GOTO *FREQ2 5620 PT=0 5630 COMM$(F1)=FIL$(F0)+" "+COMM$(F0)+" 周波数データ変更" 5640 FIL$(F1)=FIL$(F0)+"H" 5650 FFT$(F1)="" 5660 PUT (PT+34,250),YAJ%,PSET 5670 LOCATE 20,20 5680 PRINT USING"DATA(###)=[#.##^^^^Hz] ( ######";PT;PT/IT(F1)/1024;DR%(PT,F1); 5690 PRINT USING",###### ) ";DI%(PT,F1) 5700 LOCATE 16,18:PRINT UD$ 5710 CC=0:PSMAX=512:P0=PT:GOSUB *YAJI1:PT=P0 5720 IF IN$=CHR$(13) THEN GOTO 5740 5730 GOTO 5660 5740 LOCATE 22,22 5750 LINE INPUT "Input New data (Real,Imag) = ",DRI$ 5760 IF DRI$="" THEN DR$="" :DI$="" : GOTO 5800 5770 IF INSTR(DRI$,",")=0 THEN 5740 5780 DR$=LEFT$(DRI$,INSTR(DRI$,",")-1) 5790 DI$=MID$(DRI$,INSTR(DRI$,",")+1) 5800 IF DR$="" THEN DR$=STR$(DR%(PT,F1)) 5810 IF DI$="" THEN DI$=STR$(DI%(PT,F1)) 5820 IF DR%(PT,F1)=0 THEN DAT=0 ELSE DAT=LOG(2*ABS(DR%(PT,F1))) 5830 LINE(XA+PT,YB)-(XA+PT,YB-DAT*BAI),0 5840 IF DI%(PT,F1)=0 THEN DAT=0 ELSE DAT=LOG(2*ABS(DI%(PT,F1))) 5850 LINE(XC+PT,YD)-(XC+PT,YD-DAT*BAI),0 5860 LINE(XA,YA)-(XB,YB),6,B 5870 LINE(XC,YC)-(XD,YD),6,B 5880 DR%(PT,F1)=VAL(DR$):DI%(PT,F1)=VAL(DI$) 5890 DR%(1024-PT,F1)=VAL(DR$):DI%(1024-PT,F1)=-VAL(DI$) 5900 IF DR%(PT,F1)<0 THEN CLO=5 ELSE CLO=2 5910 IF DR%(PT,F1)=0 THEN DAT=0 ELSE DAT=LOG(2*ABS(DR%(PT,F1))) 5920 LINE(XA+PT,YB)-(XA+PT,YB-DAT*BAI),CLO 5930 IF DI%(PT,F1)<0 THEN CLO=5 ELSE CLO=2 5940 IF DI%(PT,F1)=0 THEN DAT=0 ELSE DAT=LOG(2*ABS(DI%(PT,F1))) 5950 LINE(XC+PT,YD)-(XC+PT,YD-DAT*BAI),CLO 5960 LOCATE 0,22:PRINT SPACE$(80) 5970 GOTO 5660 5980 *FREQ2 '●●● ディジタルフィルタ− 5990 NOI=0 6000 COMM$(F1)=COMM$(F0)+" "+FIL$(F0)+" filtering" 6010 FIL$(F1)=FIL$(F0)+"F" 6020 FFT$(F1)="":TANI(F1)=TANI(F0) 6030 P0=256:P1=256:CC=0 6040 CONSOLE 20,5 6050 PUT (P0+34,250),YAJ%,PSET: PUT (P1+34,280),YAJ%,PSET 6060 LOCATE 20,20:COLOR 7 6070 PRINT USING"DATA1(###)=[#.##^^^^Hz] (#####・##### )";P0;P0/IT(F1)/1024;DR%(P0,F1);DI%(P0,F1) 6080 LOCATE 20,21 6090 PRINT USING"DATA2(###)=[#.##^^^^Hz] (#####・##### )";P1;P1/IT(F1)/1024;DR%(P1,F1);DI%(P1,F1) 6100 LOCATE 15,20+CC:COLOR 2:PRINT"●" 6110 LOCATE 15,21-CC:PRINT" ":COLOR 7 6120 LOCATE 10,22:PRINT SAYU$ 6130 L$="08236[N:整数倍,K:奇数倍,G:偶数倍]高調波以外を全て除去, HELP:終了" 6140 GOSUB *L: PSMAX=512:GOSUB *YAJI1 6150 IF IN$=CHR$(13) THEN GOTO 6210 6160 IF INSTR("Nnミ",IN$)<>0 THEN NOI=1:GOTO 6390 6170 IF INSTR("Kkノ",IN$)<>0 THEN NOI=2:GOTO 6390 6180 IF INSTR("Ggキ",IN$)<>0 THEN NOI=3:GOTO 6390 6190 IF IN$=" " THEN CC=1-CC 6200 GOTO 6050 6210 L$="08236[Y:実部と虚部,R:実部のみ,I:虚部のみ]除去 ":GOSUB *L 6220 L$="22247デ−タ範囲はよろしいですか(Y,R,I,N:設定変更)":GOSUB *L 6230 ARU$="YyンNnミRrスIiニ":GOSUB *IK 6240 CLS:IF INSTR("Nnミ",IN$)<>0 THEN GOTO 6050 6250 IF NOI<>0 THEN P0=0:P1=512: LINE (0,250)-(639,310),0,BF 6260 IF P0>P1 THEN SWAP P0,P1 6270 FOR I=P0 TO P1 6280 IF I<>0 AND NOI=1 THEN IF I/KI=INT(I/KI) THEN GOTO 6350 6290 IF I<>0 AND NOI=2 THEN IF (I/KI-1)/2=INT((I/KI-1)/2) THEN GOTO 6350 6300 IF I<>0 AND NOI=3 THEN IF I/2/KI=INT(I/2/KI) THEN GOTO 6350 6310 IF INSTR("Iiニ",IN$)=0 THEN DR%(I,F1)=0:DR%(1024-I,F1)=0 6320 IF INSTR("Rrス",IN$)=0 THEN DI%(I,F1)=0:DI%(1024-I,F1)=0 6330 IF INSTR("Iiニ",IN$)=0 THEN LINE(XA+I,YB-1)-(XA+I,YA+1),0 6340 IF INSTR("Rrス",IN$)=0 THEN LINE(XC+I,YD-1)-(XC+I,YC+1),0 6350 NEXT I 6360 LINE(XA,YA)-(XA,YB),6: LINE(XB,YA)-(XB,YB),6 6370 LINE(XC,YC)-(XC,YD),6: LINE(XD,YC)-(XD,YD),6 6380 NOI=0:GOTO 6050 6390 LOCATE 0,22:PRINT SPACE$(79):COLOR 6: LOCATE 20,22 6400 INPUT "基本波周波数を入力してください (Return:Max.freq.)";KIHON 6410 LOCATE 0,22:PRINT SPACE$(70) 6420 IF KIHON=0 THEN KI=MI ELSE KI=INT(KIHON*1024*IT(F0)+.5) 6430 GOTO 6210 6440 *GIJI '●●● 伝達関数によるデ−タ処理 6450 CLS:MENU=6 6460 L$="23056損失電流波形の作成 ( "+FUN$+" )" : GOSUB *L 6470 L$="23085ゲイン6が60dB (1μA→1V)" : GOSUB *L 6480 LOCATE 23,7:INPUT "検出器のゲインレベル(3-7)は";IN$ 6490 IF VAL(IN$)>7 OR VAL(IN$)<3 THEN GOTO 6480 6500 G=VAL(IN$)-3 :XGAIN=10^VAL(IN$) 6510 LOCATE 30,9:PRINT"ゲインレベル = ";AKCNV$(IN$) 6520 LOCATE 23,11:PRINT"1.入力電流波形 => 出力検出波形" 6530 LOCATE 23,13:PRINT"2.出力検出波形 => 入力電流波形" 6540 LOCATE 20,20:COLOR 6:PRINT"コマンド";BAN$;"(1,2)" 6550 ARU$="12":GOSUB *IK 6560 IF IN$="2" THEN LOCATE 23,11:PRINT SPACE$(40) 6570 IF IN$="1" THEN LOCATE 23,13:PRINT SPACE$(40) 6580 CHANGE=VAL(IN$) 6590 GOSUB *CNDIS1 6600 IF ANS1=0 THEN GOTO *GIJI 6610 WW=0 6620 FOR I=1 TO 512 6630 IF WW>39 THEN 6690 6640 DR=DR%(I,F0):DI=DI%(I,F0) 6650 OKISA1=SQR(DR^2+DI^2) 6660 IF OKISA1=0 THEN DR%(I,F1)=0:DI%(I,F1)=0:GOTO 6950 6670 FF=I/1024/IT(F0) 6680 IF FF<25 THEN DR%(I,F1)=0:DI%(I,F1)=0:GOTO 6950 '25Hz以下は評価せず 6690 IF FF>4000 THEN DR%(I,F1)=0:DI%(I,F1)=0:GOTO 6950 '4kHz以上も評価せず 6700 WW=0 6710 IF TFREQ(WW)=0 THEN ISOU1=PAI/2 6810 IF DR=0 AND DI<0 THEN ISOU1=-PAI/2 6820 IF DR<>0 THEN ISOU1=ATN(DI/DR) 6830 IF DI=0 AND DR>=0 THEN ISOU1=0 6840 IF DI=0 AND DR<0 THEN ISOU1=PAI 6850 IF DR<0 AND DI<>0 THEN ISOU1=ISOU1+PAI 6860 IF CHANGE=1 THEN GOTO 6910 6870 OKISA2=OKISA1/AMP 6880 ISOU2=ISOU1+ARG '位相の関係は+が正しい。 6890 TANI(F1)=TANI(F0)/XGAIN 6900 GOTO 6940 6910 OKISA2=OKISA1*AMP 6920 ISOU2=ISOU1-ARG 'ここは−が正しい。 6930 TANI(F1)=TANI(F0)*XGAIN 6940 DR%(I,F1)=OKISA2*COS(ISOU2): DI%(I,F1)=OKISA2*SIN(ISOU2) 6950 DR%(1024-I,F1)=DR%(I,F1): DI%(1024-I,F1)=-DI%(I,F1) 6960 NEXT I 6970 IT(F1)=IT(F0) 6980 IF CHANGE=1 THEN GOTO 7010 6990 COMM$(F1)=FIL$(F0)+" 損失電流波形 / Level="+STR$(G+3) 7000 FIL$(F1)=FIL$(F0)+"C":GOTO 7030 7010 COMM$(F1)=FIL$(F0)+" 検出電圧波形 / Level="+STR$(G+3) 7020 FIL$(F1)=FIL$(F0)+"D" 7030 FFT$(F1)="":RETURN *MENU 7040 ' 7050 *GRAPH '●●● グラフの作成 7060 SCREEN ,,SCR-1,1+(SCR-1)*16 7070 P=0:MUL=0 7080 LOCATE 0,19:PRINT SPACE$(79);:LOCATE 20,19:PRINT"1-8 or Return:All"; 7090 GOSUB *CN 7100 IF IN$=CHR$(13) AND P=0 THEN GOTO *MLTISU 7110 IF IN$=CHR$(13) THEN GOTO 7160 7120 LOCATE 20+20*(P-2*INT(P/2)),22+INT(P/2) 7130 COLOR 7:PRINT"Channel number = ";:COLOR 4:PRINT IN$ 7140 FCH(P)=VAL(IN$)-1:IF TANI(FCH(P))=0 THEN TANI(FCH(P))=TANI 7150 P=P+1:IF P<>4 THEN GOTO 7090 7160 LOCATE 0,20:PRINT SPACE$(80) 7170 L$="20206スペクトル観測ですか?( Yes :Return, No :N )":GOSUB *L 7180 ARU$="YyンNnミ"+CHR$(13):GOSUB *IK 7190 IF INSTR("Nnミ",IN$)>0 THEN GOTO *ISOUKAN 7200 CH2=0:IF P>2 THEN GOSUB *MULTI:IF MUL=1 THEN GOTO 7350 7210 CLS 7220 L$(1)="28056周波数軸デ−タの表示形式" 7230 L$(2)="250741.電力のみ (Return)"+SPACE$(30) 7240 L$(3)="250942.実部と虚部 "+SPACE$(30) 7250 L$(4)="20206コマンド"+BAN$+"(1 , 2 or N)" 7260 FOR I=1 TO 4: L$=L$(I):GOSUB *L:NEXT I 7270 ARU$="12Nnミ"+CHR$(13):GOSUB *IK:IF IN$=CHR$(13) THEN IN$="1" 7280 IF INSTR("Nnミ",IN$)>0 AND P=2 THEN CH2=1:GOTO 7350 7290 IF INSTR("Nnミ",IN$)>0 THEN GOTO 7270 7300 KEI=VAL(IN$) 7310 L$="250751.Logスケ−ル (Return)"+SPACE$(30):GOSUB *L 7320 L$="250952.リニアスケ−ル"+SPACE$(40):GOSUB *L 7330 ARU$="12"+CHR$(13):GOSUB *IK:IF IN$=CHR$(13) THEN IN$="1" 7340 SCL=VAL(IN$) 7350 CLS 3 7360 FOR C=0 TO P-1 7370 IF CH2=1 THEN LOCATE 2,2+11*C:GOTO 7400 7380 IF P<3 THEN LOCATE C*40+8/P-2,2:GOTO 7400 7390 LOCATE 2+40*(C-2*INT(C/2)),2+11*INT(C/2) 7400 COLOR 7:PRINT"Ch";FCH(C)+1; 7410 IF MUL=2 THEN GOTO 7580 7420 MAX=+0:MIN=-0 7430 GOSUB *FMAX :IF MAX=0 THEN PRINT "データが有りません!!":GOTO 7570 7440 LINE INPUT "MAX & MIN ",MXMN$:CONMA=INSTR(MXMN$,",") 7450 IF MXMN$="" THEN MX=MAX*TANI(FCH(C)):MN=MIN*TANI(FCH(C)):GOTO 7490 7460 IF CONMA=0 THEN MX=ABS(VAL(MXMN$)):MN=-MX:GOTO 7490 7470 IF CONMA>0 THEN MX=VAL(LEFT$(MXMN$,CONMA-1)) 7480 IF CONMA>0 THEN MN=VAL(RIGHT$(MXMN$,LEN(MXMN$)-CONMA)) 7490 DIV=(MX-MN)/TANI(FCH(C)):OFST=MX/TANI(FCH(C)):BAI=120/DIV 7500 IF CH2<>1 THEN GOTO 7520 7510 X1=64:X2=576:Y1=68+176*C:Y2=188+176*C:A=2:GOTO 7560 7520 IF P>2 THEN GOTO 7540 7530 X1=64/P+C*320:X2=576/P+C*320:Y1=244:Y2=364:A=2*P:GOTO 7560 7540 X1=32+(C-2*INT(C/2))*320:X2=288+(C-2*INT(C/2))*320 7550 Y1=68+INT(C/2)*176:Y2=188+INT(C/2)*176:A=4 7560 CLR=2:GOSUB *DROWT 7570 IF CH2=1 OR MUL=1 THEN GOTO 7740 7580 MAX=+0:IF KEI=1 THEN GOTO *POWER 7590 FOR I=1 TO 50 7600 IF ABS(DR%(I,FCH(C)))>MAX THEN MAX=ABS(DR%(I,FCH(C))):MI=I 7610 IF ABS(DI%(I,FCH(C)))>MAX THEN MAX=ABS(DI%(I,FCH(C))):MI=I 7620 NEXT I 7630 IF MAX=0 THEN 7820 7640 IF P>2 THEN GOTO 7680 7650 BAI=72/LOG(2*MAX):IF SCL=2 THEN BAI=72/MAX 7660 XA=64/P+C*320:XB=576/P+C*320: YA=52:YB=124 7670 XC=64/P+C*320:XD=576/P+C*320: YC=132:YD=204:GOTO 7730 7680 XA=32+(C-2*INT(C/2))*320:XB=288+(C-2*INT(C/2))*320 7690 YA=52+176*INT(C/2):YB=116+176*INT(C/2) 7700 XC=32+(C-2*INT(C/2))*320:XD=288+(C-2*INT(C/2))*320 7710 YC=124+176*INT(C/2):YD=188+176*INT(C/2) 7720 BAI=56/LOG(2*MAX):IF SCL=2 THEN BAI=56/MAX 7730 GOSUB *DROWF 7740 NEXT C:SCL=1 7750 LOCATE ,23:GOSUB *HAK 7760 RETURN *MENU 7770 *POWER '●●● 電力 7780 FOR I=1 TO 50 7790 PWR=DR%(I,FCH(C))*DR%(I,FCH(C))+DI%(I,FCH(C))*DI%(I,FCH(C)) 7800 IF PWR>MAX THEN MAX=PWR:MI=I 7810 NEXT I 7820 IF MAX=0 THEN PRINT ELSE GOTO 7840 7830 L$="10012基本波周波数が見あたりません。FFTして下さい。":GOSUB *L:GOTO 7740 7840 IF P>2 THEN GOTO 7870 7850 BAI=152/LOG(2*MAX):IF SCL=2 THEN BAI=152/MAX 7860 X1=64/P+C*320:X2=576/P+C*320: Y1=52:Y2=204:GOTO 7900 7870 X1=32+(C-2*INT(C/2))*320:X2=288+(C-2*INT(C/2))*320 7880 Y1=52+176*INT(C/2):Y2=188+176*INT(C/2) 7890 BAI=136/LOG(2*MAX):IF SCL=2 THEN BAI=136/MAX 7900 GOSUB *DROWF2 7910 GOTO 7740 7920 ' 7930 *DROWT '●●● 時間軸データの表示 7940 IF OFST<0 OR OFST-DIV>0 THEN GOTO 7970 7950 LOCATE INT(X1/8)-2,INT((Y1+OFST*BAI)/16):COLOR 7:PRINT"0" 7960 LINE(X1-3,Y1+OFST*BAI)-(X2,Y1+OFST*BAI),6 7970 LINE(X1,Y1)-(X2,Y2),6,B 7980 FOR II=0 TO 10 7990 IF CH2=1 THEN LINE(X1+50*II,Y2)-(X1+50*II,Y2+2),6:GOTO 8020 8000 IF P<3 THEN LINE(X1+50/P*II,Y2)-(X1+50/P*II,Y2+2),6:GOTO 8020 8010 LINE(X1+25*II,Y2)-(X1+25*II,Y2+2),6 8020 NEXT II 8030 PSET(X1,Y1+(OFST-DT%(0,FCH(C)))*BAI),CLR 8040 IF P>1 AND CH2<>1 THEN BBAI=2 ELSE BBAI=1 8050 FOR I=1 TO 1024/BBAI-1 8060 LINE -(X1+BBAI*I/A,Y1+(OFST-DT%(I,FCH(C)))*BAI),CLR 8070 NEXT I 8080 DEV=DIV/10 8090 II=0 8100 IF OFST4 THEN Y2=YY22 8410 COLOR 7: RETURN 8420 *DROWF '---- 周波数軸の規格化 8430 LOCATE INT(XA/8)-3,INT(YA/16)+1:PRINT"Re" 8440 LOCATE INT(XC/8)-3,INT(YC/16)+1:PRINT"Im" 8450 LINE(XA,YB)-(XA,YA),6 8460 LINE -(XB,YA),6: LINE -(XB,YB),6 8470 LINE(XC,YD)-(XC,YC),6 8480 LINE -(XD,YC),6: LINE -(XD,YD),6 8490 FOR II=0 TO 9 8500 LINE(XA-2,YA+(YB-YA)/10*II)-(XA,YA+(YB-YA)/10*II),6 8510 LINE(XB+2,YA+(YB-YA)/10*II)-(XB,YA+(YB-YA)/10*II),6 8520 LINE(XC-2,YC+(YD-YC)/10*II)-(XC,YC+(YD-YC)/10*II),6 8530 LINE(XD+2,YC+(YD-YC)/10*II)-(XD,YC+(YD-YC)/10*II),6 8540 NEXT II 8550 IF P>1 THEN BBAI=2 ELSE BBAI=1 8560 FOR I=0 TO 512/BBAI 8570 IF DR%(I,FCH(C))<0 THEN CLO=5 ELSE CLO=2 8580 IF SCL=2 THEN 8610 8590 IF DR%(I,FCH(C))=0 THEN DAT=0 ELSE DAT=LOG(2*ABS(DR%(I,FCH(C)))) 8600 GOTO 8620 8610 DAT=ABS(DR%(I,FCH(C))) 8620 IF P>2 THEN LINE(XA+I,YB)-(XA+I,YB-DAT*BAI),CLO:GOTO 8640 8630 LINE(XA+I/P*BBAI,YB)-(XA+I/P*BBAI,YB-DAT*BAI),CLO 8640 IF DI%(I,FCH(C))<0 THEN CLO=5 ELSE CLO=2 8650 IF SCL=2 THEN 8680 8660 IF DI%(I,FCH(C))=0 THEN DAT=0 ELSE DAT=LOG(2*ABS(DI%(I,FCH(C)))) 8670 GOTO 8690 8680 DAT=ABS(DI%(I,FCH(C))) 8690 IF P>2 THEN LINE(XC+I,YD)-(XC+I,YD-DAT*BAI),CLO:GOTO 8710 8700 LINE(XC+I/P*BBAI,YD)-(XC+I/P*BBAI,YD-DAT*BAI),CLO 8710 NEXT I 8720 LINE(XA-2,YB)-(XB+2,YB),6: LINE(XC-2,YD)-(XD+2,YD),6 8730 FOR II=0 TO 25 8740 LINE(XA+(XB-XA)/25.6*II,YB)-(XA+(XB-XA)/25.6*II,YB+2),6 8750 LINE(XC+(XD-XC)/25.6*II,YD)-(XC+(XD-XC)/25.6*II,YD+2),6 8760 NEXT II 8770 IF SCL=2 THEN 8800 8780 DEV=20*LOG(MAX*2)/10/L10 8790 GOTO 8810 8800 DEV=MAX/10*TANI(FCH(C)) 8810 LOCATE INT(XA/8)+3,INT(YA/16)-1:GOSUB *VI 8820 IF P=1 THEN 8830 ELSE 8840 8830 PRINT USING "Max ##.##^^^^ ["+VI$+"] ";MAX*TANI(FCH(C));:GOTO 8850 8840 PRINT USING "Max ##.#^^^^ ["+VI$+"] ";MAX*TANI(FCH(C)); 8850 LOCATE INT(XD/8)-12 8860 IF P=1 THEN GOTO 8880 8870 PRINT USING "##.#^^^^ [Hz]";MI/IT(FCH(C))/1024;:GOTO 8890 8880 PRINT USING "##.##^^^^ [Hz]";MI/IT(FCH(C))/1024; 8890 LOCATE INT(XC/8)-1,INT(YD/16)+1:GOSUB *VI 8900 IF SCL=2 THEN VDB$=VI$ ELSE VDB$="dB" 8910 IF P=1 THEN PRINT USING"##.##^^^^ [";DEV;:PRINT VDB$;"/div]";:GOTO 8930 8920 PRINT USING"##.#^^^^ [";DEV;:PRINT VDB$;"/div]"; 8930 LOCATE INT(XD/8)-15 8940 IF P=1 THEN GOTO 8960 8950 PRINT USING"##.#^^^^ [Hz/div]";1/51.2/IT(FCH(C))/BBAI:GOTO 8970 8960 PRINT USING"##.##^^^^ [Hz/div]";1/51.2/IT(FCH(C))/BBAI 8970 RETURN 8980 *DROWF2 '●●● 周波数軸の規格化 2 8990 LINE(X1,Y2)-(X1,Y1),6 9000 LINE -(X2,Y1),6: LINE -(X2,Y2),6 9010 FOR II=0 TO 9 9020 LINE(X1-2,Y1+(Y2-Y1)/10*II)-(X1,Y1+(Y2-Y1)/10*II),6 9030 LINE(X2+2,Y1+(Y2-Y1)/10*II)-(X2,Y1+(Y2-Y1)/10*II),6 9040 NEXT II 9050 IF P>1 THEN BBAI=2 ELSE BBAI=1 9060 FOR I=0 TO 512/BBAI 9070 ATAI=DR%(I,FCH(C))*DR%(I,FCH(C))+DI%(I,FCH(C))*DI%(I,FCH(C)) 9080 IF SCL=2 THEN GOTO 9110 9090 IF ATAI=0 THEN DAT=0 ELSE DAT=LOG(2*ABS(ATAI)) 9100 GOTO 9120 9110 DAT=ATAI 9120 IF P>2 THEN LINE(X1+I,Y2)-(X1+I,Y2-DAT*BAI),2:GOTO 9140 9130 LINE(X1+I/P*BBAI,Y2)-(X1+I/P*BBAI,Y2-DAT*BAI),2 9140 NEXT I 9150 LINE(X1-2,Y2)-(X2+2,Y2),6 9160 FOR II=0 TO 25 9170 LINE(X1+(X2-X1)/25.6*II,Y2)-(X1+(X2-X1)/25.6*II,Y2+2),6 9180 NEXT II 9190 IF SCL=2 THEN 9220 9200 DEV=10*LOG(MAX*2)/10/L10 9210 GOTO 9230 9220 DEV=MAX/10 9230 LOCATE INT(X1/8)+3,INT(Y1/16)-1:GOSUB *VI 9240 IF P=1 THEN 9250 ELSE 9260 9250 PRINT USING "Max ##.##^^^^ ["+VI$+"2] ";MAX*TANI(FCH(C))^2;:GOTO 9270 9260 PRINT USING "Max ##.#^^^^["+VI$+"2] ";MAX*TANI(FCH(C))^2; 9270 LOCATE INT(X2/8)-12 9280 IF IT(FCH(C))=0 THEN MHZ=0 ELSE MHZ=MI/IT(FCH(C))/1024 9290 IF P=1 THEN GOTO 9310 9300 PRINT USING "##.#^^^^ [Hz]";MHZ;:GOTO 9320 9310 PRINT USING "##.##^^^^ [Hz]";MHZ; 9320 LOCATE INT(X1/8)-1,INT(Y2/16)+1:GOSUB *VI 9330 IF SCL=2 THEN VDB$=VI$ ELSE VDB$="dB" 9340 IF P=1 THEN PRINT USING"#.###^^^^ [";DEV;:PRINT VDB$;"/div]";:GOTO 9360 9350 PRINT USING"##.#^^^^ [";DEV;:PRINT VDB$;"/div]"; 9360 LOCATE INT(X2/8)-15 9370 IF MHZ<>0 THEN MHZ=1/51.2/IT(FCH(C))/BBAI 9380 IF P=1 THEN GOTO 9400 9390 PRINT USING"##.#^^^^ [Hz/div] ";MHZ:GOTO 9410 9400 PRINT USING"##.##^^^^ [Hz/div]";MHZ 9410 RETURN 9420 *MULTI '●●● 複数チャンネル表示 9430 LOCATE 0,20:PRINT SPACE$(80) 9440 LOCATE 20,20:COLOR 6:PRINT"T:時間デ−タ F:周波数デ−タ" 9450 ARU$="TtカFfハ":GOSUB *IK 9460 IF INSTR("Ffハ",IN$)=0 THEN MUL=1 ELSE MUL=2 9470 RETURN 9480 *ISOUKAN '●●● 位相観測 9490 CLS 3 9500 MAX=+1:MIN=-1 9510 FOR C=0 TO P-1 9520 GOSUB *FMAX 9530 NEXT C 9540 DIV=(MAX-MIN):OFST=MAX:BAI=296/DIV 9550 X1=64:X2=576:Y1=68:Y2=364:A=2:PP=P:P=1 9560 FOR C=0 TO PP-1 9570 LOCATE C*10+8,2 9580 COLOR CLR(C):PRINT"Ch";FCH(C)+1; 9590 CLR=CLR(C):GOSUB *DROWT 9600 NEXT C 9610 LOCATE ,23:GOSUB *HAK 9620 RETURN *MENU 9630 *MLTISU '●●● 全チャンネル位相観測 9640 CLS 3:P=2 9650 FOR C1=0 TO 3 9660 MAX=+1:MIN=-1 9670 FOR C2=0 TO 1 9680 C=C1*2+C2 9690 FOR I=0 TO 1023 STEP 2 9700 IF DT%(I,C)>MAX THEN MAX=DT%(I,C) 9710 IF DT%(I,C)4 THEN LOCATE 20,20 10340 COLOR 7:PRINT CNL$;BAN$;"(1〜8)":PP1=CSRLIN 10350 IN$=INKEY$:COLOR 5:LOCATE 69,0:PRINT TIME$ 10360 LOCATE 77,1:COLOR 5:PRINT AKCNV$(RIGHT$(STR$(SCR),1)) 10370 IF OLD$=IN$ THEN GOTO 10350 10380 OLD$=IN$:IF IN$="" THEN GOTO 10350 10390 LOCATE ,PP1 10400 IF IN$=CHR$(13) THEN RETURN 10410 IF VAL(IN$)<1 OR VAL(IN$)>8 THEN GOTO 10350 10420 RETURN 10430 *DF '●●● ドライブ&ファイルネ−ム 10440 CHAN2=0 10450 LOCATE 0,20:PRINT SPACE$(80) 10460 L$="20206ドライブ"+BAN$+"(A〜F)":GOSUB *L 10470 ARU$="ABCDE2abcdeチコソシイFfハ":PP1=CSRLIN:PP2=POS(1) 10480 GOSUB *IK 10490 IF INSTR("2",IN$)>0 AND COMM=3 THEN GOTO 10460 10500 IF INSTR("2",IN$)=0 THEN GOTO 10520 10510 GOSUB *RENZOKU :GOTO 10480 10520 DR$=IN$+":" 10530 CLS 3:LOCATE 25:COLOR 6:PRINT LLSS$:PRINT 10540 LOCATE 30,4:COLOR 4:PRINT"***** FILES ";IN$;" *****":PRINT 10550 COLOR 7:FILES DR$+"*.#": PRINT 10560 LOCATE 20:COLOR 6:PRINT"ファイルネ−ム";BAN2$;"="; 10570 COLOR 7:PRINT DR$;:INPUT FI$: PRINT 10580 RETURN 10590 *RENZOKU 10600 CHAN2=2:GOSUB *BEPE 10610 L$="15192 ☆☆☆☆ 2チャンネル連続 ☆☆☆☆"+SPACE$(20) 10620 GOSUB *L: RETURN 10630 ' 10640 '●●● ファンクションキ− ●●● 10650 *FI1:PP$="A":GOTO *FFIL 10660 *FI2:LOCATE 16,2 10670 INPUT "ファイル名表示するドライブ番号(A〜F)は?",PP$ 10680 IF PP$="" THEN PP$="B" 10690 PP$=PP$+":" 10700 *FFIL 10710 ON ERROR GOTO *EE2 10720 SCREEN ,,,0:CLS:KEY OFF:HELP OFF:LOCATE 34 10730 COLOR 4:PRINT"FILES ";PP$:PRINT 10740 COLOR 7:IF PP$="A" THEN FILES"A:" ELSE FILES PP$ 10750 GOSUB *HAK 10760 OLD$=IN$ 10770 GOTO *KIKAN 10780 *EE2:LOCATE 34:COLOR 2:PRINT"エラ−発生!!" 10790 ON ERROR GOTO *EERROR:RESUME NEXT 10800 *COP:LOCATE 0,24:PRINT SPACE$(79); 10810 LOCATE 0,0:PRINT SPACE$(80); 10820 LOCATE 0,1:PRINT SPACE$(80);:COPY 10830 LOCATE 2,0:COLOR 5 10840 PRINT"DATE ";DATE$;SPACE$(47); "TIME ";TIME$ 10850 LOCATE 24,0:COLOR 7 10860 PRINT FFTVA$ 10870 COLOR 7:PRINT STRING$(80,"-"):RETURN 10880 *SCR1:SCR=1:SCREEN ,,0,1 10890 LOCATE 77,1:COLOR 5:PRINT AKCNV$(RIGHT$(STR$(SCR),1)):RETURN 10900 *SCR2:SCR=2:SCREEN ,,1,17 10910 LOCATE 77,1:COLOR 5:PRINT AKCNV$(RIGHT$(STR$(SCR),1)):RETURN 10920 *CDIR 10930 KEY OFF:HELP OFF:SCREEN ,,,0:CLS:LOCATE 10,5 10940 INPUT"ディレクトリ変更 CHDIR= (例 *:\**)";ANS$ 10950 CHDIR ANS$ 10960 FILES LEFT$(ANS$,2)+"*.*" 10970 GOSUB *HAK 10980 GOTO *KIKAN 10990 *CCL1:CLS 1:RETURN 11000 *CCL2:CLS 2:RETURN 11010 *FUME:'●●● ファンクションキ−のメニュ− 11020 CLS:KEY OFF:HELP OFF 11030 L$(1)="056 ☆☆ ファンクションキーメニュ− ☆☆" 11040 L$(2)="075F・1.ファンクションキーメニュ−表示" 11050 L$(3)="085F・2.ファイル名表示 ドライブA" 11060 L$(4)="095F・3.ファイル名表示 任意ドライブ" 11070 L$(5)="105F・4.画面ハ−ドコピ−" 11080 L$(6)="115F・5.各"+CNL$+"のコメント表示" 11090 L$(7)="125F・6.テキスト画面クリア−" 11100 L$(8)="135F・7.グラフィック画面クリア−" 11110 L$(9)="145F・8.ディレクトリ変更" 11120 L$(10)="155F・9.グラフィック画面 1" 11130 L$(11)="165F・10.グラフィック画面 2" 11140 FOR I=1 TO 11: L$="24"+L$(I):GOSUB *L:NEXT I 11150 LOCATE ,23:GOSUB *HAK 11160 OLD$=IN$ 11170 GOTO *KIKAN 11180 ' 11190 *COMM '●●● 各チャンネルのコメント 11200 SCREEN ,,,0: CLS:KEY OFF:HELP OFF 11210 L$="07036各"+CNL$+"のコメント(C:コメント,D:日付,P or 1-8 :Printer出力 )" 11220 GOSUB *L 11230 FOR CH=0 TO 7:LOCATE 3,5+CH*2 11240 COLOR 7:PRINT"CHANNEL(";:COLOR 6:PRINT CH+1;:COLOR 7:PRINT") 「"; 11250 COLOR 4:PRINT FIL$(CH);:COLOR 7:PRINT"」"; 11260 LOCATE 50:COLOR 4:PRINT USING "Interval = ##.##^^^^";IT(CH)*1000; 11270 COLOR 7:PRINT"[mSec]" 11280 LOCATE 0,CH*2+6:PRINT SPACE$(80); 11290 LOCATE 5,CH*2+6:COLOR 5:PRINT FFT$(CH);COMM$(CH); 11300 NEXT CH 11310 LOCATE ,23:GOSUB *HAK 11320 IF IN$="P" OR IN$="p" THEN DAI=7:SHO=0:GOTO 11370 11330 IF IN$="D" OR IN$="d" THEN GOTO 11480 11340 IF IN$="C" OR IN$="c" THEN GOTO 11230 11350 IF VAL(IN$)<>0 THEN DAI=VAL(IN$)-1:SHO=VAL(IN$)-1:GOTO 11370 11360 OLD$=IN$:GOTO *KIKAN 11370 IF SHO<>DAI THEN LPRINT" 各";CNL$;"のコメント" 11380 FOR CH=SHO TO DAI 11390 LPRINT"CHANNEL(";CH+1;") 「"; 11400 LPRINT FIL$(CH);"」";SPACE$(30);"Interval = "; 11410 LPRINT IT(CH)*1000! ;"[mSec]" 11420 LPRINT" ";FFT$(CH);COMM$(CH);DATI$(CH),TANI(CH); 11430 IF INSTR(COMM$(CH),"電流")>0 THEN 11440 ELSE 11450 11440 LPRINT" A/Digit": GOTO 11460 11450 LPRINT" V/Digit" 11460 NEXT CH 11470 GOTO 11310 11480 FOR CH=0 TO 7:LOCATE 0,6+CH*2:PRINT SPACE$(80); 11490 LOCATE 5,CH*2+6:COLOR 5:PRINT DATI$(CH); 11500 LOCATE 61,CH*2+6:COLOR 6:IF TANI(CH)=0 THEN 11540 11510 IF INSTR(COMM$(CH),"電流")>0 THEN 11520 ELSE 11530 11520 PRINT USING "##.##^^^^ A/2^11Bit";TANI(CH)*2^11;: GOTO 11540 11530 PRINT USING "##.##^^^^ V/2^11Bit";TANI(CH)*2^11;: GOTO 11540 11540 NEXT CH:GOTO 11310 11550 ' 11560 *KIKAN '●●● 割り込みからの帰還 11570 KEY ON:HELP ON:CONSOLE 2,23:CLS 11580 ON MENU+1 GOTO 11590,11600,11610,11620,11630,11640,11650 11590 RETURN 11600 RETURN *MENU 11610 RETURN *EEDIT 11620 RETURN *TIME1 11630 RETURN *SSIN 11640 RETURN *MENU 11650 RETURN *GIJI 11660 ' 11670 *KAKUDAI '●●● 波形の拡大 ●●● 11680 GOSUB *CNDIS0 11690 C=VAL(IN$)-1:MAX=0 11700 FOR I=0 TO 1024/2 STEP 2 11710 IF MAX0 THEN SIT(C)=PAI/2 12080 IF DR(C)=0 AND DI(C)<0 THEN SIT(C)=-PAI/2 12090 IF DR(C)>0 AND DI(C)=0 THEN SIT(C)=0 12100 IF DR(C)<0 AND DI(C)=0 THEN SIT(C)=PAI 12110 IF DR(C)>0 THEN SIT(C)=ATN(DI(C)/DR(C)) 12120 IF DR(C)<0 AND DI(C)>0 THEN SIT(C)=PAI+ATN(DI(C)/DR(C)) 12130 IF DR(C)<0 AND DI(C)<0 THEN SIT(C)=-PAI+ATN(DI(C)/DR(C)) 12140 NEXT C 12150 '***** この下の2が デジタルノイズフィルタ のレベル 12160 '***** C=0を基準としてC=1の振幅と位相を計算 12170 IF DAT(0)<=2 OR DAT(1)<=2 THEN D(I)=0 ELSE D(I)=DAT(1)/DAT(0) 12180 S(I)=SIT(0)-SIT(1) '********ここも入力−出力が正しい。 12190 IF S(I)>PAI THEN S(I)=S(I)-2*PAI:GOTO 12190 12200 IF S(I)<-PAI THEN S(I)=S(I)+2*PAI:GOTO 12200 12210 NEXT I 12220 TBEL=LOG(TANI(1)/TANI(0))/L10 12230 GOSUB *XF1 12240 MAX=+0:MIN=100 12250 FOR I=1 TO 500 12260 IF D(I)>MAX THEN MAX=D(I):MXI=I 12270 IF D(I)>0 AND D(I)0 THEN YY=200-80*(LOG(D(I))/L10+TBEL) ELSE 12350 12320 XX=LOG(I/IT(F0)/1024)/L10*160-80 12330 CIRCLE(XX,YY),2,4 12340 PSMAX=I 12350 NEXT I 12360 IF MAX=0 OR MIN=0 THEN 12410 12370 LOCATE 50,3:COLOR 4 12380 PRINT USING "MAX ####.#dB ####Hz";(LOG(MAX)/L10+TBEL)*10,MXI/IT(F0)/1024; 12390 LOCATE 50,4 12400 PRINT USING "MIN ####.#dB ####Hz";(LOG(MIN)/L10+TBEL)*10,MNI/IT(F0)/1024; 12410 MAX=-1 :MIN=3.14 12420 FOR I=1 TO PSMAX 12430 IF D(I)>0 THEN YY=200-160/PAI*S(I) ELSE 12480 12440 XX=LOG(I/IT(F0)/1024)/L10*160-80 12450 CIRCLE(XX,YY),2,2 12460 IF S(I)>MAX THEN MAX=S(I):MXI=I 12470 IF S(I)0 THEN 12540 12680 IF PS<0 THEN 12690 ELSE 12670 12690 PS=PS+1:IF D(PS)>0 THEN 12540 12700 IF PS<512 THEN 12690 ELSE 12670 12710 LOCATE ,19:GOSUB *HAK 12720 IF FDADS=1 THEN RETURN ELSE RETURN *MENU 12730 *ZFUN '●●● データの修正 ●●● 12740 L$="29055Z:波形データ修正実行中":GOSUB *L 12750 GOSUB *CNDIS:CLS:C=VAL(IN$)-1 12760 L$="260761:時間領域データの修正": GOSUB *L 12770 L$="260962:窓関数による波形処理": GOSUB *L 12780 L$="32136Return : 1": GOSUB *L 12790 ARU$="12"+CHR$(13): GOSUB *IK : COM2=VAL(IN$)+1 12800 ON COM2 GOSUB 12820,12820,*WIN 12810 RETURN *MENU 12820 CLS 3:LINE(64,80)-(576,280),6,B 12830 MAX=+1:MIN=-1 12840 FOR I=0 TO 1024/2 STEP 2 12850 IF DT%(I,C)>MAX THEN MAX=DT%(I,C) 12860 IF DT%(I,C)CHR$(31) THEN GOTO 12980 12960 I2=I:I1=I-10:IF I1<0 THEN I1=0 12970 COL=6:GOSUB 13080:I=I1 12980 IF IN$=CHR$(28) THEN I=I+1:COL=4:IF I>1024 THEN I=1024 12990 IF IN$<>CHR$(30) THEN GOTO 13020 13000 I1=I:I2=I+10:IF I2>1024 THEN I2=1024 13010 COL=4:GOSUB 13080:I=I2 13020 IF IN$<>CHR$(13) THEN GOTO 12900 13030 LINE(63+I/2,79+(MAX-DT%(I,C))*BAI)-(65+I/2,81+(MAX-DT%(I,C))*BAI),2,B 13040 OOLD=DT%(I,C) 13050 LOCATE 34,3:INPUT "=> ",DT%(I,C) 13060 LINE(63+I/2,79+(MAX-OOLD)*BAI)-(65+I/2,81+(MAX-OOLD)*BAI),0,B 13070 GOTO 12900 13080 FOR II=I1 TO I2 13090 PSET(64+II/2,80+(MAX-DT%(II,C))*BAI),COL:NEXT II 13100 RETURN 13110 *COMMENT 13120 FFTVA$="< FFT analyzer Ver.A9 >" 13130 UD$="変更データ番号 Down:↓,← Up:↑,→  変更:Return" 13140 SAYU$="範囲調整 左:←,↓ 右:→,↑ 上下切替:スペースバー, 決定:Return" 13150 YES$="よろしいですか(Yes: Return / No)" 13160 CNL$="チャンネル" 13170 BAN$="番号を入力して下さい" 13180 BAN2$="を入力して下さい" 13190 TD$="時間軸データ" 13200 RETURN 13210 *FMAX '最大値の検出 13220 FOR I=0 TO 1020 STEP 4 13230 IF DT%(I,FCH(C))>MAX THEN MAX=DT%(I,FCH(C)) 13240 IF DT%(I,FCH(C))0 THEN TANI(C)=VAL(LEFT$(COMM$(C),I0)):GOTO 13510 ELSE 13490 13490 I0=INSTR(COMM$(C)," V/Div") 13500 IF I0>0 THEN TANI(C)=VAL(LEFT$(COMM$(C),I0))/25:I0=I0-2 ELSE TANI(C)=TANI 13510 DATI$(C)=MID$(COMM$(C),I1-1,14)+MID$(COMM$(C),I2-1,14) 13520 RETURN 13530 *HYOJI 'コメントの表示 13540 LOCATE 23:COLOR 7:PRINT CNL$;"(";C+1;")= 『"; 13550 COLOR 4:PRINT FIL$(C);:COLOR 7:PRINT"』 ";SPACE$(15) 13560 LOCATE 38-LEN(COMM$(C))/2 13570 COLOR 7:PRINT"【 ";COMM$(C);" 】" 13580 LOCATE 38-LEN(DATI$(C))/2 13590 COLOR 7:PRINT"[ ";DATI$(C);" ]" 13600 RETURN 13610 *CNDIS 'チャンネル番号の入力 13620 GOSUB *CNDIS0 13630 LOCATE 30,22:COLOR 7:PRINT"Channel number = ";:COLOR 4:PRINT IN$ 13640 RETURN 13650 *CNDIS0 13660 P=0 13670 GOSUB *CN 13680 IF IN$=CHR$(13) THEN GOTO 13670 13690 RETURN 13700 *CNDIS1 13710 P=0 13720 GOSUB *CN 13730 IF IN$=CHR$(13) THEN GOTO 13720 13740 LOCATE 25+16*P,22 13750 COLOR 7:PRINT"Channel( ";:COLOR 4:PRINT IN$;:COLOR 7:PRINT" )"; 13760 IF P=0 THEN COLOR 6:PRINT" =>"; 13770 FCH(P)=VAL(IN$)-1:P=P+1:IF P=1 THEN GOTO 13720 13780 GOSUB *YES1 13790 F0=FCH(0):F1=FCH(1) 13800 RETURN 13810 *YAJI '範囲選択カーソル 13820 CLS 3 13830 LINE(320,251)-(338,269),4: LINE(320,251)-(302,269),4 13840 LINE(302,269)-(338,269),4: PAINT (320,260),6,4 13850 GET (290,250)-(350,270),YAJ% 13860 RETURN 13870 *YAJI1 'カーソル入力 13880 IF CC=0 THEN PS=P0 ELSE PS=P1 13890 IN$=INKEY$:IF IN$="" THEN GOTO 13890 13900 IF IN$=CHR$(29) THEN PS=PS-1:IF PS<0 THEN PS=0 13910 IF IN$=CHR$(28) THEN PS=PS+1:IF PS>PSMAX THEN PS=PSMAX 13920 IF IN$=CHR$(31) THEN PS=PS-10:IF PS<0 THEN PS=0 13930 IF IN$=CHR$(30) THEN PS=PS+10:IF PS>PSMAX THEN PS=PSMAX 13940 IF CC=0 THEN P0=PS ELSE P1=PS 13950 RETURN 13960 *XG '●●● 伝達関数のグラフ表示 13970 CONSOLE ,,0:TENSEN%=&H8080 13980 LINE(80,40)-(560,360),7,B 13990 LINE(79,39)-(561,361),7,B 14000 FOR I=0 TO 2.9 STEP .1:FFF=10^INT(I)+(10^INT(I+1))*(I-INT(I)) 14010 FF3=LOG(FFF)/L10*160 14020 LINE(80+FF3,40)-(80+FF3,360),,,TENSEN% 14030 LINE(80+FF3,44)-(80+FF3,40),6 14040 LINE(80+FF3,360)-(80+FF3,356),6 14050 NEXT I 14060 FOR I=1 TO 36 14070 LINE(557,I*80/9+40)-(560,I*80/9+40),2 14080 NEXT I 14090 FOR I=1 TO 39 14100 LINE(80,I*8+40)-(83,I*8+40),4 14110 NEXT I 14120 FOR I=1 TO 3 14130 LINE(80,I*80+40)-(86,I*80+40),4 14140 LINE(80,I*80+40)-(560,I*80+40),7,,&H8080 14150 LINE(80+I*160,40)-(80+I*160,360),6,,&H8888 14160 LINE(560,I*80+40)-(554,I*80+40),2 14170 NEXT I 14180 COLOR 4 14190 LOCATE 6, 2:PRINT XGAIN*10+20; 14200 LOCATE 6, 7:PRINT XGAIN*10+10; 14210 LOCATE 6,12:PRINT XGAIN*10; 14220 LOCATE 6,17:PRINT XGAIN*10-10; 14230 LOCATE 6,22:PRINT XGAIN*10-20; 14240 L$(1)="71022+180゚" 14250 L$(2)="71072+ 90゚" 14260 L$(3)="71122 0゚" 14270 L$(4)="71172- 90゚" 14280 L$(5)="71222-180゚" 14290 L$(6)="0923610" 14300 L$(7)="2323650" 14310 L$(8)="29236100" 14320 L$(9)="482361000" 14330 L$(10)="6823610000" 14340 L$(11)="35246Freq. [Hz]" 14350 L$(12)="04094Gain" 14360 L$(13)="04104[dB]" 14370 L$(14)="72092Phase" 14380 L$(15)="72102[deg]" 14390 FOR I=1 TO 15: L$=L$(I):GOSUB *L:NEXT I 14400 RETURN 14410 *XF1 14420 GOSUB *SCR1:LOCATE 0,0:PRINT SPACE$(62) 14430 LOCATE 0,0:INPUT"ゲインレベル(3〜7)を入力してください";IN$ 14440 IF IN$="" THEN RETURN 14450 IF VAL(IN$)>7 OR VAL(IN$)<3 THEN GOTO 14430 14460 G=VAL(IN$)-3 14470 LOCATE 44,0:PRINT"ゲインレベル = ";AKCNV$(IN$); 14480 XGAIN=INT(FUN(2,0,G)):LEVEL=FUN(2,0,G)-XGAIN 14490 GOSUB *XG 14500 FOR F=0 TO 39 14510 FLOG=LOG(TFREQ(F))/L10 14520 IF F<>0 THEN GOTO 14540 14530 PSET(FLOG*160-80,200-80*(FUN(F,0,G)-XGAIN)),4 14540 LINE-(FLOG*160-80,200-80*(FUN(F,0,G)-XGAIN)),4 14550 NEXT F 14560 FOR F=0 TO 39 14570 FLOG=LOG(TFREQ(F))/L10 14580 IF F<>0 THEN GOTO 14600 14590 PSET(FLOG*160-80,200-160/PAI*FUN(F,1,G)),2 14600 LINE-(FLOG*160-80,200-160/PAI*FUN(F,1,G)),2 14610 NEXT F 14620 GOTO 14430 14630 *L 'カラープリント文 14640 LOCATE VAL(LEFT$(L$,2)),VAL(MID$(L$,3,2)):COLOR VAL(MID$(L$,5,1)) 14650 PRINT MID$(L$,6);:COLOR 7 14660 RETURN 14670 *VI '単位決定 14680 IF INSTR(COMM$(FCH(C)),"損失電流波形")=0 THEN VI$="V" ELSE VI$="A" 14690 RETURN 14700 *BEPE: BEEP 1:FOR I=1 TO 100:NEXT I:BEEP 0:MENU=1:RETURN 14710 *DADS '●●● 可変長デ−タ読み込み( from AD-3C and AR1100 ) ●●● 14720 CLS:MENU=5 14730 L$(1)="28056<データ長可変読込>" 14740 L$(2)="25067 from 「AD-3C」 and 「AR-1」" 14750 L$(3)="24087●コメントファイル名 '??????.FFT'" 14760 L$(4)="24107●Dataファイル名" 14770 L$(5)="26117 '??????.CH0', '??????.CH1'" 14780 L$(6)="24137 (AD-3C,8K以上)" 14790 L$(7)="26147 '??????.C0L', '??????.C0H'" 14800 L$(8)="26157 '??????.C1L', '??????.C1H'" 14810 L$(9)="20206ドライブ"+BAN$+"(A〜F)" 14820 FOR I=1 TO 9: L$=L$(I):GOSUB *L:NEXT I 14830 ARU$="ABCDEabcdeチコソシイFfハ"+CHR$(13):PP1=CSRLIN:PP2=POS(1) 14840 GOSUB *RENZOKU 14850 GOSUB *IK : IF IN$=CHR$(13) THEN 14870 14860 DR$=IN$+":" 14870 CLS 3 14880 LOCATE 30,4:COLOR 4:PRINT"***** FILES ";IN$;" *****":PRINT 14890 COLOR 7:FILES DR$+"*.FFT": PRINT 14900 LOCATE 10:COLOR 6:PRINT"ファイルネ−ム";BAN2$;"(.FFTは不要)="; 14910 COLOR 7:PRINT DR$+FI$;:INPUT "",FI$: PRINT 14920 IF FIOLD$="" AND FI$="" THEN 14870 14930 IF FIOLD$="" AND FI$<>"" THEN 14950 14940 IF FIOLD$<>"" AND FI$="" THEN FI$=FIOLD$ 14950 PRINT: NL=1:GOSUB *CN:NL=0 14960 IF IN$=CHR$(13) THEN GOTO 14950 14970 C=VAL(IN$)-1:FIL$(C)=FI$:FIL$(C+1)=FI$ 14980 PRINT:PRINT : COLOR 7 14990 PRINT "チャンネル番号 ";:COLOR 2: PRINT C+1 ;:PRINT " と";:PRINT C+2; 15000 COLOR 7 :PRINT "に、連続読み込みします。" 15010 ' 15020 DEF SEG=&H9FE0 15030 BLOAD DR$+FI$+".FFT" 15040 FFTCOMM$="" 15050 FOR I=3 TO PEEK(1)+2:FFTCOMM$=FFTCOMM$+CHR$(PEEK(I)):NEXT I 15060 I1=INSTR(FFTCOMM$,"CH0:") 15070 I2=INSTR(FFTCOMM$,"CH1:") 15080 COMM$(C)=MID$(FFTCOMM$,I1+8,I2-I1-8) 15090 COMM$(C+1)=MID$(FFTCOMM$,I2+8) 15100 COLOR 7: PRINT: PRINT "データファイル 「"; 15110 COLOR 6: PRINT DR$+FI$+".FFT";:COLOR 7: PRINT"」 の内容は次の通りです。" 15120 IF INSTR(FFTCOMM$,"AR1100")=0 THEN KISYU$="APC" ELSE KISYU$="AR" 15130 PRINT: PRINT FFTCOMM$ :PRINT 15140 FFTCOMM$=LEFT$(FFTCOMM$,I1-1) 15150 FOR C=C TO C+1 15160 IT(C)=VAL(MID$(COMM$(C),INSTR(COMM$(C),"INTERVAL =")+10)) 15170 GOSUB *I12 15180 COMM$(C)=LEFT$(COMM$(C),I1-2) 15190 FFT$(C)="" 15200 IF I0>0 THEN COMM$(C)=MID$(COMM$(C),I0+9) 15210 COMM$(C)=STR$(TANI(C))+" V/Digit "+COMM$(C) 15220 NEXT C 15230 C=C-2 15240 I1=INSTR(FFTCOMM$,"Words") 15250 WORD$=MID$(FFTCOMM$,I1-4,3):WORD=VAL(WORD$)*1024 'H5.2.21 100Kwords OK 15260 PRINT 15270 IF FIOLD$=FI$ THEN 15320 15280 L$="20236ファイルを分割しますか ( y:Return / n )":GOSUB *L 15290 LOCATE 61,23: INPUT "",ANS$ 15300 IF ANS$="" OR INSTR("Yyン",ANS$)>0 THEN 15310 ELSE 15320 15310 GOSUB *FILEDEV :FIOLD$=FI$ 15320 COLOR 7: FILES DR$+FI$+".0*":PRINT:PRINT 15330 L$="20236何KByte 目のデータを読み込みますか?(1〜"+AKCNV$(WORD$)+")" 15340 GOSUB *L :FIOLD$=FI$ 15350 COLOR 7: LOCATE 71,23: INPUT ANS$ 15360 DEF SEG=VARPTR(DT%(0,C),1) 15370 BLOAD DR$+FI$+".0"+RIGHT$("00"+ANS$,2),VARPTR(DT%(0,C),0) 15380 FIL$(C)=FI$+".0"+RIGHT$("00"+ANS$,2) 15390 DEF SEG=VARPTR(DT%(0,C+1),1) 15400 BLOAD DR$+FI$+".1"+RIGHT$("00"+ANS$,2),VARPTR(DT%(0,C+1),0) 15410 FIL$(C+1)=FI$+".1"+RIGHT$("00"+ANS$,2) 15420 GOSUB *HAK: RETURN *MENU 15430 ' 15440 *FILEDEV 15450 IF KISYU$="AR" THEN GOTO *AR 15460 WORD$=RIGHT$("000"+WORD$,2) 15470 IF WORD>8*1024 THEN 15510 15480 OPEN DR$+FI$+".CH0" FOR INPUT AS #1 15490 OPEN DR$+FI$+".CH1" FOR INPUT AS #2 15500 GOTO 15550 15510 OPEN DR$+FI$+".C0L" FOR INPUT AS #1 15520 OPEN DR$+FI$+".C1L" FOR INPUT AS #2 15530 OPEN DR$+FI$+".C0H" FOR INPUT AS #3 15540 OPEN DR$+FI$+".C1H" FOR INPUT AS #4 15550 ' 15560 FOR I=101 TO 100+WORD/1024 15570 OPEN DR$+FI$+".0"+RIGHT$(STR$(I),2) FOR OUTPUT AS #5 15580 OPEN DR$+FI$+".1"+RIGHT$(STR$(I),2) FOR OUTPUT AS #6 15590 FOR J=1 TO 2048 STEP 128 15600 IF WORD>8*1024 AND I>=(WORD/2048+101) THEN 15640 15610 DAMMY$=INPUT$(128,#1):PRINT #5,DAMMY$; 15620 DAMMY$=INPUT$(128,#2):PRINT #6,DAMMY$; 15630 GOTO 15660 15640 DAMMY$=INPUT$(128,#3):PRINT #5,DAMMY$; 15650 DAMMY$=INPUT$(128,#4):PRINT #6,DAMMY$; 15660 NEXT J 15670 CLOSE #5: CLOSE #6 15680 NEXT I 15690 CLOSE 15700 RETURN 15710 *AR 15720 PRINT "50KByte分のDATAを分離します。" 15730 PRINT "何KBeteめから分離しますか (0:Return 〜 "; 15740 PRINT AKCNV$(STR$(VAL(WORD$)-50));" )"; 15750 INPUT ANS : IF ANS<=0 THEN ANS=0 15760 OPEN DR$+FI$+".CH0" FOR INPUT AS #1 15770 OPEN DR$+FI$+".CH1" FOR INPUT AS #2 15780 IF ANS=0 THEN 15830 15790 FOR I=1 TO ANS*8 15800 D$=INPUT$(125,#1) 15810 D$=INPUT$(125,#2) 15820 NEXT I 15830 OWARI=VAL(WORD$)-ANS 15840 IF OWARI>50 THEN OWARI=50 15850 OWARI=INT(OWARI/1.024) 15860 FOR I=101 TO 100+OWARI 15870 OPEN DR$+FI$+".0"+RIGHT$(STR$(I),2) FOR OUTPUT AS #3 15880 OPEN DR$+FI$+".1"+RIGHT$(STR$(I),2) FOR OUTPUT AS #4 15890 FOR J=1 TO 2048 STEP 128 15900 D$=INPUT$(128,#1):PRINT #3,D$; 15910 D$=INPUT$(128,#2):PRINT #4,D$; 15920 NEXT J 15930 CLOSE #3,#4 15940 NEXT I 15950 CLOSE 15960 RETURN 15970 *WIN 15980 CLS 15990 L$(1)="28056<窓関数による処理>" 16000 L$(2)="250771.RECTANG窓" 16010 L$(3)="250972.HANING窓" 16020 L$(4)="251173.PARZEN窓" 16030 L$(5)="251374.HAMING窓" 16040 L$(6)="251575.EXPONENT窓" 16050 L$(7)="21225窓関数の形は?(1〜5,Return : RECTANG)" 16060 FOR I=1 TO 7: L$=L$(I):GOSUB *L:NEXT I 16070 ARU$="12345"+CHR$(13): GOSUB *IK 16080 COM2=VAL(IN$):IF COM2=0 THEN COM2=1 16090 LOCATE 23,COM2*2+5:COLOR 2:PRINT AKCNV$(STR$(COM2)) 16100 ON COM2 GOSUB 16290,16120,16160,16210,16250 16110 RETURN *MENU 16120 FOR I=0 TO 1023 16130 DT%(I,C)=.5*(1-COS(I*2*PAI/1024))*DT%(I,C) 16140 NEXT I 16150 RETURN 16160 FOR I=0 TO 511 16170 DT%(I,C)=(1-6*I*I/1024/1024+6*I*I*I/1024/1024/1024)*DT%(I,C) 16180 DT%(I+512,C)=((1-(I+512)/1024)^3)*2*DT%(I+512,C) 16190 NEXT I 16200 RETURN 16210 FOR I=0 TO 1023 16220 DT%(I,C)=(.54-.46*COS(I*2*PAI/1024))*DT%(I,C) 16230 NEXT I 16240 RETURN 16250 FOR I=0 TO 1023 16260 DT%(I,C)=(2.71828^(-I/1024))*DT%(I,C) 16270 NEXT I 16280 RETURN 16290 RETURN