概要
プロデルが、CLRらしいので、調べて見た。
練習問題、やってみた。
練習問題
サンプルレート 8KHzで220Hzのsin波に、高周波のノイズを乗せよ。
LPF(ローパスフィルター)を書いて、ノイズを除去せよ。
写真
サンプルコード
窓というウィンドウを、作る
その内容は、「lpf」
その大きさは、{900, 700}
窓を、表示する
かめというカメを、作る
その位置は、{20, 60}
かめを窓に、表示する
sinは、sin波
sinを、ピンクで描画する
nwは、nw波
nwを、青で描画する
dmは、nwを8000と500でlpf
dmを、白で描画する
待機する
[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を返す
終わり
sin波を作る手順:倍浮動小数の配列
結果は、{}
角度は1
角度が360未満の間、繰り返す
【値:倍浮動小数】は、サイン(角度 / 8000 × 2 × π × 220)
結果に値を加える
角度は、角度 + 1
そして
結果を返す
終り
am波を作る手順:倍浮動小数の配列
結果は、{}
角度は1
角度が360未満の間、繰り返す
【値:倍浮動小数】は、コサイン(角度 / 8000 × 2 × π × 3000) × (0.4 × サイン(角度 / 8000 × 2 × π × 220)+ 1)
結果に値を加える
角度は、角度 + 1
そして
結果を返す
終り
nw波を作る手順:倍浮動小数の配列
結果は、{}
角度は1
角度が360未満の間、繰り返す
【値:倍浮動小数】は、サイン(角度 / 8000 × 2 × π × 220) + 0.4 × サイン(角度 / 8000 × 2 × π × 2200)
結果に値を加える
角度は、角度 + 1
そして
結果を返す
終り
[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
そして
終り
以上。