位相補正

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