Monthly Archives: 8月 2015

サイン波の重ね合わせ (矩形波)

今回は矩形波を作成したいと思います。
こちらでのこぎり波を作成しました。のこぎり波は基準音に倍音を重ね合わせていきましたが、矩形波は奇数倍の倍音のみを重ねていきます。

そのため、下記のような式になります。
h3が3倍音、h5が5倍音というように奇数倍の倍音を重ねます。

s(n)=sin(\frac { 2\pi { f }_{ 0 }n }{ { f }_{ s } } )+\frac { 1 }{ 3 } sin(\frac { 2\pi { h}_{ 3 }n }{ { f }_{ s } } )+\frac { 1 }{ 5 } sin(\frac { 2\pi { h}_{ 5 }n }{ { f }_{ s } } )+....

スクリプト

矩形波
このように矩形の波になります。
kukei

出力wav

周波数特性が変わることで、のこぎり波とは音色が違っています。

 


サイン波の重ね合わせ (のこぎり波)

ここでサイン波をつくりましたが、これは一つの周波数成分だけの純音と呼ばれる音です。今回は、この音に倍音を重ね合わせてノコギリ波をつくりたいと思います。倍音とは、基本音を440Hzとすると、その2倍・3倍・・・つまり、880Hz・1320Hz・・・といった周波数の音のことです。

ここで書いたサイン波の式は下記の通りです。
s(t)=A sin(2\pi { f }_{ 0 }t)

t=n/{ f }_{ s }

とすると、

s(n)=A sin(\frac { 2\pi { f }_{ 0 }n }{ { f }_{ s } })

これを基本音にして下記のように重ね合わせた音です。
h1はf0(基本周波数)の倍音、h2はf0の2倍音です。のこぎり波は基本音+倍音+2倍音+3倍音+・・・と重ね合わせていきますが、振幅は1/2,1/3・・・と小さくなっているのが特徴です・

s(n)=sin(\frac { 2\pi { f }_{ 0 }n }{ { f }_{ s } } )+\frac { 1 }{ 2 } sin(\frac { 2\pi { h}_{ 1 }n }{ { f }_{ s } } )+\frac { 1 }{ 3 } sin(\frac { 2\pi { h}_{ 2 }n }{ { f }_{ s } } )+....

 

スクリプト

のこぎり波
nokogiri
このようにのこぎりの歯のような波形なので、のこぎり波と言われています。

出力wav


基本音は440Hzですのでラの音ですが、このように倍音を重ね合わせると、サイン波のラの音とは音色が変わります。

 

 


Pythonでサイン波(正弦波)をつくる

振幅A、サンプリング周波数fs、周波数f0、時間nのサイン波(正弦波)は下記の関数として定義できます。

サイン波の式
s(t)=A sin(2\pi { f }_{ 0 }t)

t=n/{ f }_{ s }

とすると、

s(n)=A sin(\frac { 2\pi { f }_{ 0 }n }{ { f }_{ s } })

今回は、サンプリング周波数が8kHzで周波数440Hz(ラの音)のwavファイルを作成を行いました。

スクリプト

作成したサイン波
sin_wave

出力されたwavファイル

 

今回は440Hzの音(ラ・A4)で試しましたが、ド(C4)は261.63Hz、レ(D4)は293.66Hzというように音階(十二平均律音階)は周波数が決まっています。なのでスクリプトを改造して簡単な音楽のwavファイルをつくることもできます。

 

 

顔認識を利用して顔をぼかす (Web camera)

こちらで試した顔認識を利用して顔をぼかす処理をWebカメラから取り込んだ映像に対してリアルタイムで処理してみました。

 

スクリプト

 

出力
こんな感じで顔にぼかしがかかって表示されます。

videocapture_face_blur

 

顔認識を利用して顔をぼかす

こちらで試した顔認識を利用して、顔の部分だけをぼかすプログラムを書いてみました。

 

スクリプト

入力画像

lena_std

出力画像
face_blur

ここで使用している画像は、画像圧縮の評価の際によく利用される標準画像lennaを使用しています。

 

Python + OpenCVでエッジ検出 (Laplacian)

OpenCVのLaplacianフィルタでエッジ検出を試しました。

 

スクリプト

 

入力画像

kinen

 

出力画像

edge_lap

 

 

Python + OpenCVでエッジ検出 (Canny)

OpenCVでCannyアルゴリズムによるエッジ検出を試しました。

 

スクリプト

入力画像

kinen

出力画像

canny_edge

 

Python + OpenCVでエッジ検出 (Sobel)

Sobelフィルタを使用してエッジ検出処理を試しました。

 

スクリプト

入力画像
kinen

x方向(グレースケール)
gray_sobelx

y方向(グレースケール)

gray_sobely

エッジ検出結果(グレースケール)

gray_sobel_edge

 

 

Python + OpenCVで顔認識

OpenCVを利用すると簡単に顔認識が出来る。

 

スクリプト

 

入力画像(lena_std.jpg)

lena_std

 

実行結果

result

ここで使用している画像は、画像圧縮の評価の際によく利用される標準画像lennaを使用しています。