1 周波数毎にデータ取得する
For freq_num = Freq_start to Freq_start + Freq_count
2 NAのセグメント設定を行う
周波数:NA_FREQ(Freq_num) POINT:(SOSI_COUNT+1) * (AVE+1)*(BEAM_COUNT+1) IFBW:ifbw
3 NA出力ON
4 試験制御ユニット 取得周波数を設定
5 試験制御ユニット 試験開始
6 取得処理待ち
7 NA出力OFF
8 試験制御ユニット 試験停止
9 NA_file_copy_sel(freq_num)
コピー実行
10 ptn_file_read(freq_num)
平均処理&配列格納
FOR sosi_num=SOSI_START to SOSI_START + SOSI_COUNT
FOR pulse_num = PULSE_START to PULSE_START + PULSE_COUNT
FOR ave_num = 0 to AVEAGE
amp[sosi][freq][code][ave]
phs[sosi][freq][code][ave]
平均処理後
phs_amp[sosi][freq][code]
phs_phs[sosi][freq][code]
+-180範囲チェック
もしphs_phs[sosi][freq][code]が-180より低い場合
phs_phs[sosi][freq][code] + 360
もしphs_phs[sosi][freq][code]が+180より高い場合
phs_phs[sosi][freq][code] - 360
11 file_save()
振幅: phs_amp[sosi][freq][code]
位相: phs_phs[sosi][freq][code]
12 calc_phase()
波面補正コード算出
理想位相=360°÷位相数
・補正データ保存先フォルダ生成
・if phs_phs[sosi][freq][code] < 0 then
phs_phs[sosi][freq][code] + 360
・リニアリティー計算
各素子の各周波数ごとに位相と振幅の合計と平均を算出
結果から各素子の各周波数ごとの位相バイアス値を算出
★ 位相補正コード算出
修正→ "HOSEI_DAT(freq_num, sosi_num, pulse_num) → LINEARITY(freq_num, sosi_num, pulse_num)
Linearity"
追加→ phs_bias(freq_num, sosi_num, pulse_sel) = の次のステップに
追加→ hosei_deg(freq_num, sosi_num, pulse_sel) = (360.0-phs_bias(freq_num, sosi_num, pulse_sel)) Mod 360.0
追加→ For freq_num = Freq_START to FREQ_START + FREQ_COUNT + 1 step 1
追加→ For sosi_num = SOSI_START to SOSI_START + SOSI_COUNT + 1 step 1
追加→ deg = hosei_deg(freq_num, sosi_num, pulse_sel)
追加→ For bit = 0 to 7 step 1
追加→ if deg >= (180/Math.Pow(2,bit)) then
追加→ pulse_code_bit(bit) = 1
追加→ deg = deg - (180/Math.Pow(2,bit))
追加→ else
追加→ pulse_code_bit(bit) = 0
追加→ end if
追加→ Next
追加→ h_code(freq_num, sosi_num, pulse_sel) = (Math.Pow(2,7) * pulse_code_bit(0)) + (Math.Pow(2,6) * pulse_code_bit(1)) + (Math.Pow(2,5) * pulse_code_bit(2)) + (Math.Pow(2,4) * pulse_code_bit(3)) + (Math.Pow(2,3) * pulse_code_bit(4)) + (Math.Pow(2,2) * pulse_code_bit(5)) + (Math.Pow(2,1) * pulse_code_bit(6)) + (Math.Pow(2,0) * pulse_code_bit(7))
追加→ Next
追加→ Next
calc_send_code()
ファイル関連
<参考>
amp0,phs0:B/R1 S21
amp1,phs1:R2/R1 S21
amp2,phs2:A/R1 S11
①NAコピー移動(NA_file_copy_sel(i))
・波面/受信
amp0,phs0 → PHS_RX_F*_AMP.csv PHS.csv
・波面/送信
amp2,phs2 → PHS_TX_F*_AMP.csv PHS.csv
・パターン/受信/AZ
amp0,phs0 → PTN_ACT_RX_AZ_AMP_Sig.csv,Az.csv
amp1,phs1 → PTN_ACT_RX_AZ_PHS_Sig.csv,Az.csv
・パターン/受信/EL
amp0,phs0 → PTN_ACT_RX_EL_AMP_Sig.csv,El.csv
amp2,phs2 → PTN_ACT_RX_EL_PHS_Sig.csv,El.csv
・パターン/送信/AZ
amp2,phs2 → PTN_ACT_TX_AZ_PHS_Sig.csv,Az.csv
・パターン/送信/EL
amp2,phs2 → PTN_ACT_TX_EL_PHS_Sig.csv,El.csv
②平均処理&配列格納(phs_file_read(i))
③取得データ→結果ファイル出力(file_save())
・結果保存先指定(HAMEN\,PATTAN\)+ SMin, Bypass
・★Combo13.ItemIndex = 0 →"補正前_", 1→"補正後_" ⇐他にないか調べる
・point +1, beam, PHS_AMP(point,0,beam), PHS_PHS(point,0,beam)
~PHS_AMP(point,10,beam), PHS_PHS(point,10,beam)
波面測定のファイル関係の流れ
パターン
・コピー実行
ネットワークアナライザ知識
ポート1から信号を発生する場合
R1レシーバー:ポートから出力している信号をモニター
Aレシーバー:ポート1に反射され戻ってきた信号を測定
Bレシーバー:被測定物を通ってポート2に到達した信号を測定
B/R1:S21
R2/R1:
A/R1:S11
(参考)
A/R2:S12
B/R2:S22
IFBW:レシーバの測定バンド(帯域)幅に相当。バンド幅が狭くすればノイズが下がるが、測定に時間がかかる。必要な測定精度を考えて最適なIFBWを決める必要がある。
広いIFBWでCALをとり、測定時にIFBWを狭くしても意味がない。CALデータに既に広いIFBWに相当するノイズが含まれてしまう。
流れ
1.開始
2.ポジショナーのポイント数算出((開始ー終了)÷間隔)+1
3.パターン測定開始
4.NA接続状態確認
5.「試験開始移動」表示
6.ポジショナー初期設定(間隔、SPEED、開始、終了)
7.開始位置移動(開始位置ー1)
8.NA試験開始(start)
9.ポジショナー移動待ち(開始位置になるまで)
10.「試験開始位置に移動完了」
11.NA(OUTP ON)コマンド送信
12.NA(start ポイント数)ソケット送信
13.NA状態確認ループ(NA_BUSY=1で脱出)
14.FTEに試験開始コマンド送信
15.電源入力
16.ポジショナ速度設定(測定時)
17.ポジショナ移動開始(終了位置+1)
18.試験状態監視タイマー
19.NA状態確認
20.NA_BUSY=0になるまでループ
21.「データ転送中」表示
22.コピー実行
22.平均処理&配列格納
23.ファイル保存
24.「パターン測定終了」表示
25.FTEに試験終了コマンド送信
26.NA(stop)ソケット送信
27.「試験結果を表示します」表示
以上
file_save_all_act
Private Sub file_seve_all_act()
Dim point, freq_num, beam_num, ave_num As Integer
Dim deg As Double
Dim pc_path As String
Dim amp_all_path As String
If RadioButton5.checked = True Then
pc_path = PATTAN_path & "SMin"
Else
pc_path = PATTAN_path & "Bypass"
End If
Select Case TEST_MODE
Case 2
amp_all_path = pc_path & "_ACT_RX_AZ_F" & freq_num + 1 & "_ALL.csv"
Case 3
amp_all_path = pc_path & "_ACT_RX_EL_F" & freq_num + 1 & "_ALL.csv"
Case 4
amp_all_path = pc_path & "_ACT_TX_AZ_F" & freq_num + 1 & "_ALL.csv"
Case 5
amp_all_path = pc_path & "_ACT_TX_EL_F" & freq_num + 1 & "_ALL.csv"
End Select
For freq_num = FREQ_START To FREQ_START + FREQ_COUNT Step 1
Using csv_f As New StreamWriter(amp_all_path, False, System.Text.Encoding.GetEncoding("Shift_JIS"))
csv_f.WriteLine("JOB," & TextBox1.Text & ",SN," & TextBox2.Text & ",作業者," & Textbox3.text & ",試験日," & meas_time)
csv_f.WriteLine("周波数,F" & freq_num + 1 & ",BEAM,ALL")
csv_f.WriteLine(",BEAM1,BEAM1,BEAM2,BEAM2,BEAM3,BEAM3,BEAM4,BEAM4,BEAM5,BEAM5,BEAM6,BEAM6,BEAM7,BEAM7,BEAM8,BEAM8,BEAM9,BEAM9,BEAM10,BEAM10,BEAM11,BEAM11,BEAM12,BEAM12,BEAM13,BEAM13,BEAM14,BEAM14,BEAM15,BEAM15,BEAM16,BEAM16,BEAM17,BEAM17,BEAM18,BEAM18,BEAM19,BEAM19,BEAM20,BEAM20,BEAM21,BEAM21,BEAM22,BEAM22,BEAM23,BEAM23,BEAM24,BEAM24,BEAM25,BEAM25,BEAM26,BEAM26,BEAM27,BEAM27,BEAM28,BEAM28,BEAM29,BEAM29,BEAM30,BEAM30,BEAM31,BEAM31,BEAM32,BEAM32")
csv_f.WriteLine("角度,Σ,Δ,Σ,Δ,Σ,Δ,Σ,Δ,Σ,Δ,Σ,Δ,Σ,Δ,Σ,Δ,Σ,Δ,Σ,Δ,Σ,Δ,Σ,Δ,Σ,Δ,Σ,Δ,Σ,Δ,Σ,Δ,Σ,Δ,Σ,Δ,Σ,Δ,Σ,Δ,Σ,Δ,Σ,Δ,Σ,Δ,Σ,Δ,Σ,Δ,Σ,Δ,Σ,Δ,Σ,Δ,Σ,Δ,Σ,Δ,Σ,Δ,Σ,Δ")
For point = 0 To POINT_NUM - 1 Step 1
deg = NumericUpDown67.Value + (point * NumericUpDown69.Value)
csv_f.WriteLine(deg & "," &
PTN_AMP_SIG(point, freq_num, 0) & "," & PTN_AMP_DLT(point, freq_num, 0) & "," &
PTN_AMP_SIG(point, freq_num, 1) & "," & PTN_AMP_DLT(point, freq_num, 1) & "," &
PTN_AMP_SIG(point, freq_num, 2) & "," & PTN_AMP_DLT(point, freq_num, 2) & "," &
PTN_AMP_SIG(point, freq_num, 3) & "," & PTN_AMP_DLT(point, freq_num, 3) & "," &
PTN_AMP_SIG(point, freq_num, 4) & "," & PTN_AMP_DLT(point, freq_num, 4) & "," &
PTN_AMP_SIG(point, freq_num, 5) & "," & PTN_AMP_DLT(point, freq_num, 5) & "," &
PTN_AMP_SIG(point, freq_num, 6) & "," & PTN_AMP_DLT(point, freq_num, 6) & "," &
PTN_AMP_SIG(point, freq_num, 7) & "," & PTN_AMP_DLT(point, freq_num, 7) & "," &
PTN_AMP_SIG(point, freq_num, 8) & "," & PTN_AMP_DLT(point, freq_num, 8) & "," &
PTN_AMP_SIG(point, freq_num, 9) & "," & PTN_AMP_DLT(point, freq_num, 9) & "," &
PTN_AMP_SIG(point, freq_num, 10) & "," & PTN_AMP_DLT(point, freq_num, 10) & "," &
PTN_AMP_SIG(point, freq_num, 11) & "," & PTN_AMP_DLT(point, freq_num, 11) & "," &
PTN_AMP_SIG(point, freq_num, 12) & "," & PTN_AMP_DLT(point, freq_num, 12) & "," &
PTN_AMP_SIG(point, freq_num, 13) & "," & PTN_AMP_DLT(point, freq_num, 13) & "," &
PTN_AMP_SIG(point, freq_num, 14) & "," & PTN_AMP_DLT(point, freq_num, 14) & "," &
PTN_AMP_SIG(point, freq_num, 15) & "," & PTN_AMP_DLT(point, freq_num, 15) & "," &
PTN_AMP_SIG(point, freq_num, 16) & "," & PTN_AMP_DLT(point, freq_num, 16) & "," &
PTN_AMP_SIG(point, freq_num, 17) & "," & PTN_AMP_DLT(point, freq_num, 17) & "," &
PTN_AMP_SIG(point, freq_num, 18) & "," & PTN_AMP_DLT(point, freq_num, 18) & "," &
PTN_AMP_SIG(point, freq_num, 19) & "," & PTN_AMP_DLT(point, freq_num, 19) & "," &
PTN_AMP_SIG(point, freq_num, 20) & "," & PTN_AMP_DLT(point, freq_num, 20) & "," &
PTN_AMP_SIG(point, freq_num, 21) & "," & PTN_AMP_DLT(point, freq_num, 21) & "," &
PTN_AMP_SIG(point, freq_num, 22) & "," & PTN_AMP_DLT(point, freq_num, 22) & "," &
PTN_AMP_SIG(point, freq_num, 23) & "," & PTN_AMP_DLT(point, freq_num, 23) & "," &
PTN_AMP_SIG(point, freq_num, 24) & "," & PTN_AMP_DLT(point, freq_num, 24) & "," &
PTN_AMP_SIG(point, freq_num, 25) & "," & PTN_AMP_DLT(point, freq_num, 25) & "," &
PTN_AMP_SIG(point, freq_num, 26) & "," & PTN_AMP_DLT(point, freq_num, 26) & "," &
PTN_AMP_SIG(point, freq_num, 27) & "," & PTN_AMP_DLT(point, freq_num, 27) & "," &
PTN_AMP_SIG(point, freq_num, 28) & "," & PTN_AMP_DLT(point, freq_num, 28) & "," &
PTN_AMP_SIG(point, freq_num, 29) & "," & PTN_AMP_DLT(point, freq_num, 29) & "," &
PTN_AMP_SIG(point, freq_num, 30) & "," & PTN_AMP_DLT(point, freq_num, 30) & "," &
PTN_AMP_SIG(point, freq_num, 31) & "," & PTN_AMP_DLT(point, freq_num, 31) & "," &
PTN_AMP_SIG(point, freq_num, 32) & "," & PTN_AMP_DLT(point, freq_num, 32))
Next
End Using
Next
End Sub