準備はまだまだ続きます
実験の前にパラメータなどの細部の調整をします。
もっと粗くしてもよかったり、逆にもっと細かくするべきパラーメタを確認します。
おおまかな内容
今日はフーリエ変換の窓のサイズと波形の端っこのフーリエ変換をどうやるか考察します。
なぜやるのか
フーリエ変換は計算する範囲で解像度がかなりかわります。
窓を広くとるにこしたことはないのですが、広いとその範囲での周波数特性のピーク値の解像度があがる反面、「瞬間」の周波数特性ではなくなっていきます。
なので、実際に波形をみながら窓サイズを決めます。
準備のやり方
昨年勉強して作成した(あるいはどこかのパクリだったかな?)フーリエ変換のプログラムをそのまま使用します。
入力をピアノC1 (MidiNote:24)にしてやってみます。準備:その1でも使用したSteinwayのピアノの音です。
波形を指定するとFFT計算してグラフを出すプログラムでした。
Fig.1が入力した波形、Fig.2がハン窓を通した波形、Fig.3が周波数検出量、Fig.4が位相情報、Fig.5がフーリエ逆変換した波形(ハン窓を通した波形に復元できる)
窓サイズをかえて計算した結果を比較すると以下の感じです。
倍音構成がきれに検出できています。これを時系列にならべてSin波を合成できれば元の音を再現(近似)できるはずです。
結果
できれば8192にしたいところですが、実サンプリングの半分の幅となり、おきすぎます。4096サンプルではピークがはっきりわかりません。
よって6144を採用します。
立ち上がり部や末尾部の周波数特性の計算について
立ち上がり部や末尾部はそのまま窓をあてはめると端っこになり、中心にこないためちゃんと計算できません(窓枠の端はほぼゼロになります)。ところが窓の中心にむりやりもってくると、開始部や終了部が切れているので正しい特性を導出できません。
そこで、一般的な手法かどうか知らないのですが、波形を折り返して合成し、計算させたい部分の中心にもってきて計算してみます。
音の始まり部
1.位相を反転させます
2.時間軸を反転させます。
3.音の起点をやや重ねてミキシングします。(音の立ち上がり部の連結なので、クロスフェードは不要だと思います。)
4.音の起点を中心に窓を設定してフーリエ変換計算します。
これは「音のなり始めをうまく点対称にすると、歪の少ないほぼ連続音にできる。」ものです。倍音の位相が打ち消しあわないように目立った倍音の位相をあわせてミックスします。
この場合基音はわずかにずれる(歪む)ことになりますが、大局には影響ないとおもわれます。音の起点を中心とした波形になるので、ここを中心にして窓設定し、フーリエ変換を行えば立ち上がりの周波数特性が拾えます。文字がみにくくてすみません。
音の終わり部
1.音の終わり部付近で基音のゼロクロスポイントを探します。(基音の周波数は推定できている。または予め分かっている前提です)
2.基音のゼロクロスポイントで、位相反転、時間軸反転します。
3.倍音の波形部が打ち消しあわないようにミキシングポイントを調整します。(音量に変化がないようクロスフェードさせます)
4.末尾部分を中心に音が疑似的に折り返すので、ここを窓の中心としてフーリエ変換計算します。
加工した音はこんな感じです。
途中と最後の「シュッ」という音がハンマーノイズです。これがとても重要でこの周波数特性を正確に知りたくてこんなことをしています。
音の始まり部、終わり部を疑似的に連続音に加工しましたので、窓枠を動かしながらフーリエ変換を行い、計算します。
今回は手動で行いますが、これを自動的に行えるようにしたいと考えています。
さぁて。来週の計算機音楽は?
クーです。次回はこれらのサンプリングからピアノの音がどれくらい復元できるかやってみましょう。(フーリエ逆変換ではなく、時系列の周波数特性からの波形合成)乞うご期待。
じゃんけんぽん。
今日のKoo'sキッチン おいしい!ただし、高い!
今日のKoo'sキッチンは「味の素 豚のあふれる肉汁にXO醤と葱油が香る ザ★シュウマイ 」です。スーパで冷凍食品一律XX%引きの日に値段を見ず、間違って買ってしまいました。XX%引きになっていない!と勘違いするほどのお値段でした。でも、本当においしいです。タケノコの食感といい、粗びき肉の粒度といい、肉汁感といい絶品でした。ただ、値段が高いので殿堂入りにはできません。あしからず。
今度も間違って買ってしまう気がします。