メモ

①フォーム閉じる時の保存確認を排除
②セッティング保存ボタンを設ける
③パルス特性の結果を反映させるテキストボックスを用意する
 →40dB帯域幅にも反映させる
④電力測定後、PEPに反映させる(空中線電力)
⑤規格線作成

【短パルス選択時】
●下記の定数/値を取得する(初期設定)
・中心周波数
・40dB帯域幅
・測定周波数範囲下限(開始周波数)[MHz]
・測定周波数範囲上限(終了周波数)[MHz]
・オフセット周波数[MHz]
・参照帯域幅[MHz]
・減衰曲線(30dB/decade)
・空中戦電力[W]

●結果を入れておくといい
・帯域外領域とスプリアス領域との境界 下側
・40dB帯域幅 下側
・40dB帯域幅 上側
・帯域外領域とスプリアス領域との境界 上側

●参照帯域幅(スプリアス領域で測定する周波数帯ごとに定義される)計算
 入力値:(ユーザー)[MHz]
 選択:1MHz固定、指定値、
    非符号化パルス変調(固定周波数):1/パルス幅[us]
    位相変調符号化パルスレーダー(固定周波数):1/移送変調チップ長[us]
    周波数変調及びチャープレーダ:√(周波数偏移幅[MHz]/パルス幅[us])

③規格線作成
dim LimitNo as long
dim MaskFreq() as double
dim MaskLimit() as double

LimitNo = 0
Erase MaskFreq
Erase MaskLimit

・ステップ周波数(-60dBのポイント数を減らす式)  
    TempF = Int*1
    End If
    
    '40dB帯域内の場合
    If Freq >= StartF40 And Freq <= StopF40 Then
        CalcMaskData = 0
    End If
    
    '60dB境界下限周波数~40dB境界下限周波数の場合
    If Freq > StartF60  And Freq < StartF40  Then
    '   CalcMaskData = -40 - 30 * Log(2 * (CenterF - Freq) / D40Width) / Log(10)
  'D40Width:40dB帯域幅
        CalcMaskData = -40 - 30 * (0.6931 + Log(CenterF - Freq) - lnD40Width) / 2.3026
    End If
    
    '40dB境界上限周波数~60dB境界上限周波数の場合
    If Freq < StopF60  And Freq > StopF40  Then
'        CalcMaskData = -40 - 30 * Log(2 * (Freq - CenterF - OffsetF) / D40Width) / Log(10)
        CalcMaskData = -40 - 30 * (0.6931 + Log(Freq - CenterF) - lnD40Width) / 2.3026
    End If
    
    Exit Function

End Function
'******************************************************************************************
【マスクデータの生成について】 
マスクデータを生成する際、周波数点は以下のようにしています。 
①下記の周波数点は必ず生成されるようにしています。 
 ・40dB 帯域幅の上限下限の周波数点 
   マスクデータ = 0dB 
 ・40dB 帯域幅の上限+0.001 Hz、下限-0.001 Hz の周波数点 
   マスクデータ = -40dB 
 ・帯域外領域とスプリアス領域の境界周波数 
   マスクデータ = 43+10log(PEP)か-60dBのどちらか小さい方

②帯域外領域とスプリアス領域の境界周波数内のマスクデータ計算周波数点は
 40 dB 帯域幅内を含めて、参照帯域幅の Step で生成されます。 

③測定開始周波数から帯域外領域とスプリアス領域の境界周波数の下側までの周波数点は 
 5 点程度になるように生成しています。 

④帯域外領域とスプリアス領域の境界周波数の上側から測定終了周波数までの周波数点は 
 5点程度になるように生成しています。 

'****************************************************************************************
【分かったこと】
・電力5W以下は43+10log(PEP)の方が小さい
・スプリアスのATTは入力レベルの適正、通常は内部回路の保護のため最低でも10dBは入れておく
 →尖っていない方だけ変化する。低いほど低い、大きいほど高い。

以上

*1:StartF60 - StartF) / 20)
    Select Case TempF 
        Case Is < 1:            StepNegF = 0.1
        Case Is < 10:           StepNegF = Int(TempF)
        Case Is < 100:          StepNegF = Int(TempF / 10) * 10
        Case Is < 1000:         StepNegF = Int(TempF / 100) * 100
        Case Is < 10000:        StepNegF = Int(TempF / 1000) * 1000
        Case Else:              StepNegF = 10000
    End Select
    
    TempF= Int((StopF - StopF60) / 20)
    Select Case TempF
        Case Is < 1:            StepPosF = 0.1
        Case Is < 10:           StepPosF = Int(TempF)
        Case Is < 100:          StepPosF = Int(TempF / 10) * 10
        Case Is < 1000:         StepPosF = Int(TempF / 100) * 100
        Case Is < 10000:        StepPosF = Int(TempF / 1000) * 1000
        Case Else:              StepPosF = 10000
    End Select

 '①startF~StartF60
I = 1
Do While Integer.Parse(StartF + (I - 1) * StepNegF) < StartF60
 If I = 1 Then
  Freq = StartF
 Else
  Freq = Integer.Parse(StartF + (I - 1) * StepNegF)
 End If
 MaskFreq(LimitNo)=Freq
 MaskLimit(LimitNo)=CalcMaskData(Frep)
 LimitNo = LimitNo + 1
 I = I + 1
Loop

'②StartF60~StartF40
I = 1
Do While (StartF60 + (I - 1) * BWref < StartF40
 'BWref:参照帯域幅[MHz]
    Freq = StartF60 + (I - 1) * BWref 
 MaskFreq(LimitNo)=Freq
 MaskLimit(LimitNo)=CalcMaskData(Frep)
 LimitNo = LimitNo + 1
    I = I + 1
Loop

'③StartF40
Freq = StartF40
 MaskFreq(LimitNo)=Freq
 MaskLimit(LimitNo)=CalcMaskData(Frep)
LimitNo = LimitNo + 1

'④StartF40~StopF40
I = 1
Do While (StartF40) + (I - 1) * BWref < StopF40
    Freq = (StartF40) + (I - 1) * BWref
 MaskFreq(LimitNo)=Freq
 MaskLimit(LimitNo)=CalcMaskData(Frep)
 LimitNo = LimitNo + 1
 I = I + 1
Loop

'⑤StopF40
Freq = StopF40
 MaskFreq(LimitNo)=Freq
 MaskLimit(LimitNo)=CalcMaskData(Frep)
LimitNo = LimitNo + 1


'⑥StopF40~StopF60
I = 2
Do While (StopF40) + (I - 1) * BWref < StopF60
    Freq = (StopF40) + (I - 1) * BWref
 MaskFreq(LimitNo)=Freq
 MaskLimit(LimitNo)=CalcMaskData(Frep)
    LimitNo = LimitNo + 1
    I = I + 1
Loop

'⑦StopF60 ~ F_Stop
I = 1
Freq = (StopF60) + (I - 1) * StepPosF
Ret = SetMaskData(LimitNo, Freq)
LimitNo = LimitNo + 1

I = 2
Do While (StopF60) + (I - 1) * StepPosF < StopF
    Freq = Integer.Parse(StopF60) + (I - 1) * StepPosF
 MaskFreq(LimitNo)=Freq
 MaskLimit(LimitNo)=CalcMaskData(Frep)
 LimitNo = LimitNo + 1
    I = I + 1
Loop

 MaskFreq(LimitNo)=StopF
 MaskLimit(LimitNo)=CalcMaskData(Frep)


'*******************************************************************************************************
'マスク値の計算
Function CalcMaskData(Freq As Double) As Double
    
    '60dB境界下限周波数より低い場合
    '60dB境界上限周波数より高い場合
    If Freq <= StartF60 Or Freq >= StopF60 Then
        CalcMaskData = (-60dB or 43+10log(PEP