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 MAX
DT%(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