前回 各種波形をsin関数の足し合わせで作るフーリエ級数を使った方法で御紹介致しました。ただ、フーリエ級数は難解で(私にとって)、波形を新たに作るには時間も掛るし、矩形波(くけいは)についてはデューディー比を変えることはつまり、フーリエ級数展開をもう一度やり直さなければならないのでなかなか融通が利きません。
1.使用方法
1.2 プログラムを貼り付ける
この状態で図1上段中央の再生ボタンを押して、プログラムを実行します。
図1:VBAのModuleにコードを張り付ける
1.3 InputBox
矩形波のプログラムを実行すると図2~5の入力画面が開きます。
1.3.1 デューティー比
最初に図2のメッセージBOXが開き「出力波形のデューティー比(%)を0~100迄の整数で入力して下さい」と表示されます。
図2:デューティー比入力画面
1.3.2 何波長分
2つ目に図3のメッセージBOXが開き「出力する波形の数を1~255の整数で入力して下さい」と表示されます。3波長分もあれば波形が見易いのでとりあえず「3」と入力します。
図3:波長数入力画面
1.3.3 周波数
3つ目に図4のメッセージBOXが開き「出力する波形の周波数を正の数で入力して下さい」と表示されるので分かりやすい周波数1Hz(1秒間に1回振幅する)を見たいので「1」と入力します。
図4:周波数入力画面
1.3.4 電圧
図5:電圧入力画面
1.4 計算結果の出力
図6:矩形波の計算結果が出力された状態
1.5 散布図の作成
出力された計算結果を散布図にします。やり方は図7の様にAB列を選択し図8の様に散布図を作るだけです。
図7:グラフ化する列の選択と散布図の選択
図8:散布図作成後画面
1.6 補足
2.正弦波
2.1 下記プログラムを貼り付ける
Sub SineWave()
'正弦波生成(2016.3.14 NOB)
'変数宣言
Dim i As Single
Dim j As Byte
Dim A As Long
Dim Time As Single
Dim Wave As Byte
Dim Hz As Single
Dim Voltage As Single
Dim Pi As Single
Pi = Atn(1) * 4 ' 円周率(π)の値。
'変数入力
Wave = InputBox("出力する波形の数を1~255の整数で入力して下さい")
Hz = InputBox("出力する波形の周波数を正の数で入力して下さい")
Voltage = InputBox("出力する波形の電圧を正の数で入力して下さい")
'信号生成
For j = 0 To Wave - 1
For i = 0 To 359
A = A + 1
If i = 0 Then
Cells(A + 1, 2) = 0
Else
Cells(A + 1, 2) = Sin((Pi / 180) * i) * Voltage
End If
Cells(A + 1, 1) = Time
Time = Time + (1 / Hz) / 360
Next i
Next j
'表題追加
Range("A1") = "時間(sec)"
Range("B1") = "電圧(V)"
End Sub
2.2 プログラムを実行する
再生ボタンを押すだけです。
2.3 InputBoxに出力したい条件を入力する
何波長「1~255の整数、例えば3」、周波数「小数点以下も可、正の数」Hz、電圧「小数点以下も可、正の数」Vを入力。
2.4 出力結果を散布図にする
散布図を作成した結果が図9です。
2.3で設定した通りの正弦波が出力されました。
図9:正弦波
3.のこぎり波
3.1 下記プログラムを貼り付ける
Sub SawtoothWave()
'のこぎり波生成(2016.3.14 NOB)
'変数宣言
Dim i As Byte
Dim j As Byte
Dim A As Long
Dim Time As Single
Dim Wave As Byte
Dim Hz As Single
Dim Voltage As Single
'変数入力
Wave = InputBox("出力する波形の数を1~255の整数で入力して下さい")
Hz = InputBox("出力する波形の周波数を正の数で入力して下さい")
Voltage = InputBox("出力する波形の電圧を正の数で入力して下さい")
'信号生成
For j = 0 To Wave - 1
For i = 0 To 254
A = A + 1
If i <= 254 * (255 / 100) Then
Cells(A + 1, 2) = i * (1 / 255) * Voltage
End If
Cells(A + 1, 1) = Time
Time = Time + (1 / Hz) / 255
Next i
Next j
'表題追加
Range("A1") = "時間(sec)"
Range("B1") = "電圧(V)"
End Sub
3.2 プログラムを実行する
再生ボタンを押すだけです。
3.3 InputBoxに出力したい条件を入力する
何波長「1~255の整数、例えば3」、周波数「小数点以下も可、正の数」Hz、電圧「小数点以下も可、正の数」Vを入力。
3.4 出力結果を散布図にする
散布図を作成した結果が図10です。
3.3で設定した通りの正弦波が出力されました。
図10:のこぎり波
4.矩形波
4.1 下記プログラムを貼り付ける
'矩形波生成(2016.3.14 NOB)
'変数宣言
Dim i As Byte
Dim j As Byte
Dim A As Long
Dim Time As Single
Dim Wave As Byte
Dim Duty As Byte
Dim Hz As Single
Dim Voltage As Single
'変数入力
Duty = InputBox("出力波形のデューティー比(%)を0~100迄の整数で入力して下さい")
Wave = InputBox("出力する波形の数を1~255の整数で入力して下さい")
Hz = InputBox("出力する波形の周波数を正の数で入力して下さい")
Voltage = InputBox("出力する波形の電圧を正の数で入力して下さい")
'信号生成
For j = 0 To Wave - 1
For i = 0 To 254
A = A + 1
If i <= 254 * (Duty / 100) Then
If Duty = 0 Then
Cells(A + 1, 2) = 0
Else
Cells(A + 1, 2) = Voltage
End If
End If
If i > 254 * (Duty / 100) Then
If Duty = 100 Then
Cells(A + 1, 2) = Voltage
Else
Cells(A + 1, 2) = 0
End If
End If
Cells(A + 1, 1) = Time
Time = Time + (1 / Hz) / 255
Next i
Next j
'表題追加
Range("A1") = "時間(sec)"
Range("B1") = "電圧(V)"
End Sub
4.2 プログラムを実行する
再生ボタンを押すだけです。
4.3 InputBoxに出力したい条件を入力する
4.4 出力結果を散布図にする
散布図を作成した結果が図11です。
4.3で設定した通りの正弦波が出力されました。
図11:矩形波
5.三角波
5.1 下記プログラムを貼り付ける
Sub TriangleWave()
'三角波生成(2016.3.14 NOB)
'変数宣言
Dim i As Byte
Dim j As Byte
Dim A As Long
Dim Time As Single
Dim Wave As Byte
Dim Hz As Single
Dim Voltage As Single
'変数入力
Wave = InputBox("出力する波形の数を1~255の整数で入力して下さい")
Hz = InputBox("出力する波形の周波数を正の数で入力して下さい")
Voltage = InputBox("出力する波形の電圧を正の数で入力して下さい")
'信号生成
For j = 0 To Wave - 1
For i = 0 To 254
A = A + 1
If i <= 127 Then
Cells(A + 1, 2) = i * (1 / 255) * Voltage * 2
Else
Cells(A + 1, 2) = (255 - i) * (1 / 255) * Voltage * 2
End If
Cells(A + 1, 1) = Time
Time = Time + (1 / Hz) / 255
Next i
Next j
'表題追加
Range("A1") = "時間(sec)"
Range("B1") = "電圧(V)"
End Sub
5.2 プログラムを実行する
再生ボタンを押すだけです。
5.3 InputBoxに出力したい条件を入力する
何波長「1~255の整数、例えば3」、周波数「小数点以下も可、正の数」Hz、電圧「小数点以下も可、正の数」Vを入力。
5.4 出力結果を散布図にする
散布図を作成した結果が図12です。
5.3で設定した通りの正弦波が出力されました。
図12:三角波
6.まとめ
ブログに載せる各種波形のグラフを作るだけでかなり遠回りしてしまいました・・・。
しかしさすがVBA!速くて簡単そして正確!何の苦労もトラブルもなくあっけなく各種波形を作成出来ました。
励みになりますのでよければクリック下さい(^o^)/