概要
プロデルが、CLRらしいので、調べて見た。
練習問題、やってみた。
練習問題
SDR(Software defined Radio)をシュミレートせよ。
FM復調せよ。
写真
サンプルコード
窓というウィンドウを、作る
その内容は、「FM復調」
その大きさは、{900, 700}
窓を、表示する
かめというカメを、作る
その位置は、{20, 60}
かめを窓に、表示する
sinは、sin波
sinを、ピンクで描画する
fmは、fm波
fmを、青で描画する
dmは、fmで、demod波
dmを、白で描画する
待機する
[am]で、demod波を作る手順:倍浮動小数の配列
結果は、{}
tは、1
I1は、{}
Q1は、{}
tが361未満の間、繰り返す
【値1:倍浮動小数】は、amの(t) * サイン(t / 8000 * 2 * π * 3000)
I1に値1を加える
【値2:倍浮動小数】は、amの(t)* コサイン(t / 8000 * 2 * π * 3000)
Q1に値2を加える
tは、t + 1
そして
I2は、I1を8000と400でlpf
Q2は、Q1を8000と400でlpf
tは、1
tが361未満の間、繰り返す
【値:倍浮動小数】は、 atan(I2の(t) * Q2の(t) )
結果に値を加える
tは、t + 1
そして
結果を返す
終り
sin波を作る手順:倍浮動小数の配列
結果は、{}
角度は1
角度が360未満の間、繰り返す
【値:倍浮動小数】は、サイン(角度 / 8000 × 2 × π × 220)
結果に値を加える
角度は、角度 + 1
そして
結果を返す
終り
fm波を作る手順:倍浮動小数の配列
結果は、{}
角度は1
角度が360未満の間、繰り返す
【値:倍浮動小数】は、サイン(角度 / 8000 × 2 × π × 3000 + 6 × コサイン(角度 / 8000 × 2 × π × 22))
結果に値を加える
角度は、角度 + 1
そして
結果を返す
終り
[input]を, [samplerate]と, [freq]で、lpfする手順
outputは、 {}
q は、 1.0
omega は、 2.0 * π * freq / samplerate
alpha は、 サイン(omega) / (2.0 * q)
a0 は、 1.0 + alpha
a1 は、 -2.0 * コサイン(omega)
a2 は、 1.0 - alpha
b0 は、 (1.0 - コサイン(omega)) / 2.0
b1 は、 1.0 - コサイン(omega)
b2 は、 (1.0 - コサイン(omega)) / 2.0
size は、 360
in1 は、 0
in2 は、 0
out1 は、 0
out2 は、 0
iを0からsizeまで増やしながら繰り返す
値は、 b0 / a0 * inputの(i + 1) + b1 / a0 * in1 + b2 / a0 * in2 - a1 / a0 * out1 - a2 / a0 * out2
値をoutputへ加える
in2 は、 in1
in1 は、 inputの(i + 1)
out2 は、 out1
out1 は、 値
繰り返し終わり
outputを返す
終わり
[am:倍浮動小数の配列]を、ピンクで描画する手順
かめの太さは5
かめの色は、ピンク
かめの速さは0
初期位置は{10, 130}
かめの位置は、初期位置
角度は1
角度が360未満の間、繰り返す
横は、3 × 角度 + 初期位置(1)
縦は、amの(角度)× 100.0 + 初期位置(2)
かめを{横、 縦}へ移動する
角度は、角度 + 1
そして
終り
[am:倍浮動小数の配列]を、青で描画する手順
かめの太さは5
かめの色は、青
かめの速さは0
初期位置は{10, 380}
かめの位置は、初期位置
角度は1
角度が360未満の間、繰り返す
横は、3 × 角度 + 初期位置(1)
縦は、amの(角度)× 100.0 + 初期位置(2)
かめを{横、 縦}へ移動する
角度は、角度 + 1
そして
終り
[am:倍浮動小数の配列]を、白で描画する手順
かめの太さは5
かめの色は、白
かめの速さは0
初期位置は{10, 530}
かめの位置は、初期位置
角度は1
角度が360未満の間、繰り返す
横は、3 × 角度 + 初期位置(1)
縦は、amの(角度)× 100.0 + 初期位置(2)
かめを{横、 縦}へ移動する
角度は、角度 + 1
そして
終り
以上。