■
Public b8_flag As Integer = 0
Dim startTime As DateTime
Dim ts As TimeSpan
Private Sub Button8_Click(sender As Object, e As EventArgs) Handles Button8.Click
Dim startDt As DateTime = DateTime.Now
If b8_flag = 0 Then
Button8.Text = "測定停止"
With ToolStripStatusLabel1
.Text = "測定中"
.BackColor = Color.Yellow
End With
ToolStripStatusLabel2.Text = "測定時間:00:00:00"
startTime = DateTime.Now
Threading.Thread.Sleep(100)
Timer2.Start()
b8_flag = 1
Else
With ToolStripStatusLabel1
.Text = "測定停止"
.BackColor = SystemColors.Control
End With
sw.Stop()
Timer2.Enabled = False
'ToolStripStatusLabel2.Text = "測定時間:00:00:00"
b8_flag = 0
End If
End Sub
Private Sub Timer2_Tick(sender As Object, e As EventArgs) Handles Timer2.Tick
ToolStripStatusLabel2.Text = "測定時間:" & sw.Elapsed.Hours.ToString("00") & ":" & sw.Elapsed.Minutes.ToString("00") & ":" & sw.Elapsed.Seconds.ToString("00")
ts = Now.Subtract(startTime) ' 経過時間算出
ToolStripStatusLabel4.Text = "経過時間:" & ts.TotalMinutes.ToString
ts = DateTime.Now - startTime
ToolStripStatusLabel4.Text = String.Format("{0:00}:{1:00}:{2:00}", ts.Hours, ts.Minutes, ts.Seconds)
End Sub
■
Private Sub Button7_Click(sender As Object, e As EventArgs) Handles Button7.Click
Dim fc As Double = 9700
Dim startF60, startF40, stopF40, stopF60 As Double
Dim startF60dB, startF40dB, stopF40dB, stopF60dB As Double
Dim t As Double = 22.994
Dim tr As Double = 0.024
'tr = Int(t / 10) * 10
Dim db40width As Double = 7.6 / Math.Sqrt(t * 10 ^ -6 * tr * 10 ^ -6)
Dim db60 As Double = -60
Dim db60witdh As Double = db40width * 10 ^ (-(db60 + 40) / 10 / 3)
startF60 = fc - (db60witdh*10 ^ -6) / 2
stopF60 = fc + (db60witdh*10 ^ -6) / 2
startF40 = fc - (db40width*10 ^ -6) / 2
stopF40 = fc + (db40width*10 ^ -6) / 2
startF60dB = -40 + -30*Math.Log10((fc - 9677) / (db40width*10 ^ -6 / 2))
startF40dB = -40
stopF40dB = -40
stopF60dB = -40 + -30*Math.Log10((9723 - fc) / (db40width*10 ^ -6 / 2))
MessageBox.Show("40dB帯域幅:" & db40width & vbCrLf &
"60dB帯域幅:" & db60witdh & vbCrLf &
"startF60:" & startF60 & vbCrLf &
"startF40:" & startF40 & vbCrLf &
"stopF40:" & stopF40 & vbCrLf &
"stopF60:" & stopF60 & vbCrLf &
"startF60の振幅:" & startF60dB & vbCrLf &
"startF60の振幅:" & startF40dB & vbCrLf &
"startF60の振幅:" & stopF40dB & vbCrLf &
"startF60の振幅:" & stopF60dB & vbCrLf)
End Sub
メモ2
'*******************************************************************************************************
'マスク値の計算
Function CalcMaskData(Freq As Double) As Double
'60dB境界下限周波数より低い場合
'60dB境界上限周波数より高い場合
If Freq <= StartF60 Or Freq >= StopF60 Then
CalcMaskData = (-60dB or 43+10log(PEP))
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は入れておく
→尖っていない方だけ変化する。低いほど低い、大きいほど高い。
メモ
①フォーム閉じる時の保存確認を排除
②セッティング保存ボタンを設ける
③パルス特性の結果を反映させるテキストボックスを用意する
→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
VBA ExcelでWordのテキストボックス内の文字列に取り消し線を表示させる
Sub EXCEL_WORD02() 'EXCEL VBAから既存のWORDファイルを起動する。
Dim WordApp As Object
Dim WordDoc As Word.Document
'
Set WordApp = CreateObject("Word.Application") ' CreateObject関数でWordをセット
WordApp.Visible = True 'Wordを起動する
Set WordDoc = WordApp.Documents.Open("C:\Users\sannp\OneDrive\デスクトップ\test01.docx") ' 指定したWordファイルを起動します。
Dim srcText As String
srcText = "なおき"
Dim shp As Object ' Word.Shape
For Each shp In WordApp.ActiveDocument.Shapes
If shp.Type = msoTextBox Then
Call DoubleStrikeText(shp, srcText)
End If
Next
End Sub
Public Sub DoubleStrikeText(shp As Variant, srcText As String)
If shp.TextFrame.HasText Then
Dim objFind As Find
Set objFind = shp.TextFrame.TextRange.Find
objFind.ClearFormatting
objFind.Forward = True
objFind.Text = srcText
objFind.Replacement.Font.DoubleStrikeThrough = True
Call objFind.Execute(Replace:=wdReplaceAll)
End If
End Sub
VBA ExcelでWordのテキストボックス内の文字列を置換
Sub EXCEL_WORD01() 'EXCEL VBAから既存のWORDファイルを起動する。
Dim WordApp As Object
Dim WordDoc As Word.Document
'
Set WordApp = CreateObject("Word.Application") ' CreateObject関数でWordをセット
WordApp.Visible = True 'Wordを起動する
Set WordDoc = WordApp.Documents.Open("C:\Users\sannp\OneDrive\デスクトップ\test01.docx") ' 指定したWordファイルを起動します。
'--- 置換前の文字列 ---'
Dim srcText As String
srcText = "置換前"
'--- 置換後の文字列 ---'
Dim replaceText As String
replaceText = "置換後"
Dim shp As Object ' Word.Shape
For Each shp In WordApp.ActiveDocument.Shapes
If shp.Type = msoTextBox Then
'MsgBox shp.TextFrame.TextRange.Text
Call ReplaceShapeText(shp, srcText, replaceText)
End If
Next
End Sub
Public Sub ReplaceShapeText(shp As Variant, srcText As String, replaceText As String)
If shp.TextFrame.HasText Then
Dim objFind As Find
Set objFind = shp.TextFrame.TextRange.Find
objFind.ClearFormatting
objFind.Forward = True
objFind.Text = srcText
objFind.Replacement.Text = replaceText
Call objFind.Execute(Replace:=wdReplaceAll)
End If
End Sub