0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

概要

プロデルが、CLRらしいので、調べて見た。
練習問題、やってみた。

練習問題

サンプルレート 8KHzで220Hzのsin波に、高周波のノイズを乗せよ。
LPF(ローパスフィルター)を書いて、ノイズを除去せよ。

写真

image.png

サンプルコード


窓というウィンドウを、作る
	その内容は、「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
	そして
終り



以上。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?