Author: Inten

【音】うなりってナンジャラホイ?


うなりが聞こえないよぉ

おはこんばんちは(´・ω・`)

4月始め以来の投稿になります。ん~、そろそろ皆も5月病かな?

今回のテーマはズバリ【うなり】です。
うなりって言うのは

うなりとは,音の高さがわずかに異なる二つの音が鳴っているとき,各々の基音の周波数の差に相当する周期で音の強弱が聞こえる現象です. このとき二つの音は,ひとつの音の強弱が変化しているように聞こえます. 二つの音の高さがある程度まで離れると,両者は一つの音の強弱ではなく別の二音として聞こえます.
-引用”うなり [物理のかぎしっぽ]

だそうです。まぁ、知ってますよねみなさんも。

でね、なんでこんなこと今更言うのかと。

ちょっと話はずれますが

人間ってどうやって聴覚してると思いますか?

完全な私見ですが、頭のなかでフーリエ変換っぽいことがなされて周波数成分に分けられて知覚なんて感じじゃないんですかね?(フーリエ変換わかんない方はこちらがおすすめ1.フーリエ級数(やる夫で学ぶディジタル信号処理)

人間、音の高低なんかは割りと機微に反応しますから周波数らしいものを捉えてるものは確かなのですよ。

でね、人間って位相差には弱いらしいんですわ。

つまりは、聞いた音を周波数に分けてその成分の強さだけに反応してるってことですよ。

うん?

そうここでおかしなことに気づきませんか?

「あれ、これうなり知覚できなくね?」

そうですよね。例えば同じ音量の400Hzの音と440Hzの音を合わせたら、40Hzのうなりが生まれるはずですが、さっきの過程だと、400Hzと440Hzの成分が同じだけ立って終わりですよね。決して40Hzの成分なんて生まれません。

あれ、おかしいなと。そこでお互いが干渉して、成分が時間方向で変化とかしないかとか考えたんですが、当たり前ですがフーリエ変換上そういうことは起こりえません。sin波の和音はただのsin波の和音です。

そこで、ネットで軽く調べたんですが、見つからず、しょうがないので伝家の宝刀『オシエテワカルヒト』を抜いて、信号処理の教授にも聞いてみたんですがあんまり良い回答は得られませんでした。むしろ「わかったら教えて」とまで言われてしまい。もうこうなったら自力で解くぞと頑張りました・・・・・。一時間

わかりました。個人的にはこの問題は終息しました。

では、そのお話を

まずポイントは離散フーリエ変換です。そもそも人間ってそんなに周波数領域に分解能ある訳ないよな~と電車の中で閃きまして、そしたら「おっとこれは窓関数を考えなくてはならんですなぁ」と考えにいたりました。これは一悶着ありそうです。

調べました。今回は以下の様な設定で実験してみました。

$$f_s = 40kHz, f_0 = 400Hz, N=100$$

\begin{aligned}
ただし、f_{s}はサンプリング周波数。\newline f_{0}は基底となる周波数。\newline NはDFTで使うデータ数。
\end{aligned}

この設定のもとで、以下の式について考えました。

\begin{aligned}
F(k) = |\sum_{n=0}^{N-1}  (sin(2\pi f_0(t + delay)) + sin(2\pi (f_0 + beat)(t + delay))\exp( -j\frac{2\pi k}{N} n) )|
\end{aligned}

$$ ただし、t = n/f_s、 beatはうなりの周波数$$

単に、2つのsin波に対してDFTしてるだけです(ただし、今回は振幅のみに注目するので最初から絶対値をとりました)。delayは時間で人間がこの音を聞くタイミングのズレを表しています。今回はこのdelayを動かすことで、その変化を追います。

で、以下が結果です。

まず40Hzのうなりから

400Hzと440Hzの合成波の400Hz成分
400Hzと440Hzの合成波の400Hzの成分

下の時間軸はdelayを動かした様子です。図にも書いてありますが、これは400Hzの周波数の振幅成分を図示したもので、ちゃんと書けば

\begin{aligned}k=1(=\frac{f_s=40kHz}{N=100}\times \frac{1}{400Hz})\end{aligned}

なのでF(k=1)をdelayに関して[0.0s,0.05s]の範囲で動かしたものとなります。

どうでしょう、ちゃんとうごめいてますよね。しかもその周期はどうやら40Hzです。つまり、400Hzの音の成分が変化しちゃってるんですね。

一応、こっちも見ときましょう。下図は400Hzだけを鳴らしたときの400Hzの周波数成分です。

400Hz単音時の400Hzの成分
400Hz単音時の400Hzの成分

当たり前ですね。そりゃそうだという話です。こういうふうに聞こえてるおかげで、一定の音量の音を我々は知覚できます。逆に先のうなってる方は音量が400Hzのが変化してますね。これがうなりの本質です。

なんだか、ゲシュタルト崩壊気味な気分になってくる感じがします。

(僕だけ?)それは、何故か?

それは、うなりが聞こえるのはわかったけど、和音を聞いているんだからもちろん440Hzの成分も検出されないとおかしいという点だと思います。

ですが、すぐにそれが無理であると気づきます。例えば今回なら440Hzの成分はDFTではでてきません。連続周波数空間で440Hzの成分だったものはそこら中に分散しています。では、その様子も観察してみましょう。

下図は先程のうなりの図の次の周波数成分つまり、F(k=2)です。

400Hzと440Hzの合成波の800Hz成分
400Hzと440Hzの合成波の800Hz成分

なんかごちゃごちゃしてます。最初の400Hzの振幅に比べると大分小さい値なのと、なんとなく周期的なことはわかりますし、それはどうやら0.05sの間に45,6周期がありそう。つまりは約900Hzってことも読み取れます。900Hzって大体440Hzの二倍ですから関係がありそうです。

で、よく考えたらこの振幅は元々はF(k=2)の絶対値をとったもの。つまりは周波数は振幅上では2倍されたものが観測されるはず(2倍角の定理)なのでこれでOKということになりますね。ちゃんと800Hzの成分の中に残骸があったわけです。

で、残骸があったのはわかった訳ですが、「それが?」っていうね。やっぱ440Hzは聞こえてないじゃんと。「これは800Hzでしょ、その成分が440Hzで振動してるだけっしょ」、つまりは800Hzの音が440Hzでうなっていると先ほどの文脈から行くと言えるわけです。流石に440Hzがうなってるってのはおかしいし、そもそも800Hzなんて聞こえてないはず・・・。んん、くまった

消えた440HZ

ここからも持論で申し訳ないのですが、視覚で例えてみましょう。

人間は赤、緑、青の三色しか見えてないってのは割りと有名だと思うのですが、じゃぁの中間色はどう見てるかというと、赤と緑が同じくらい反応したらオレンジみたいな感じで折衷案みたいなのを頭が解釈してるようです。三原色の合成

今回の聴覚の例もその一つではないでしょうか?

つまりは「400Hzと800Hzが400Hz強めで800Hz弱めで反応してる=>おっしゃ440Hzや」みたいな論理展開がされてても不思議じゃありません。

ただ、興味深いのは視覚なら「赤色」と「オレンジ色」を混ぜると「赤が強いオレンジ色」という単色にみえるのに対して、音の場合は400Hzと440Hzをしっかりと分別してみていることです。普通、400Hzと440Hzを聞いて「あっ420Hzがなってる」みたいには感じませんよね。視覚と聴覚では混ざると言っても聴覚のほうがより分けたい気持ちが強いみたいです。

このことからわかるのは、今回の例ではN=100、fs=40kHzとテキトーに決めましたから、DFTでは400Hzと800Hzと言った周波数しか持ちえませんでしたが、人間でそうである保証はどこにもないですね。

例えば、N=2000として、DFT上で20Hzごとに成分を持てるようにしてやれば、無事440Hzの成分も持つことができます。ただし、この場合人間の耳にはうなりは聞こえないはずです。それは、先ほどの例の様に400Hzの成分に440Hzの成分が分散して来ないからです。

fs=40kHz,N=2000の時の400Hzの成分 が一定になっている様子
fs=40kHz,N=2000の時の400Hzの成分

fs=40kHz,N=2000の時の400Hzの成分 が一定になっている様子
fs=40kHz,N=2000の時の440Hzの成分

 

実際、周波数の異なる2つの正弦波の合成波を聞いてみるとわかるのですが、その周波数差を徐々に大きくしていくと、最初は確かに唸ってるのが知覚できるのですが、途中から「あれ、これ唸ってる?まぁ唸ってるっちゃ唸ってる?けど、いきなり聞いたら只の和音かなぁ?ハーモニー的な?」ってなります。これは、人間の分解できる周波数成分に相方の正弦波が入るかどうかってのがボーダーになっていること、そして、人間の分解できる周波数成分に入っている度合いが連続的に推移しそうなのは数式からもなんとなくは推測されます。

要はうなりと言っても「うなり or そうじゃない」と二値化できるものではなくて、連続的に変化しているのがわかります。

このことの応用として、例えば何百人とか何千人規模の人を集めてうなり度合い見たいなのを今回で言えば400Hzとそれ以上の周波数の波の合成波に対して答えさせることで、統計的にどこからどこまでが人間の分解できる周波数なのかがわかるんではないかと思います。例えば、430Hzあたりでたくさんの人が和音だけになったと答えれば、30Hzが400Hz付近での人間の周波数分解能といえるのではないでしょうか?

まぁ、人間はDFTほど単純な機構をしているともあんまり思えませんが、数多くある指標の一つくらいにはなるかと、つか、もうありそう。

実際に聞いてみよう

最後に、うなりがうなりでなくなる様子を確かめるために音源をおいておきます。暇だったら聞いてみてちょ

以下音源についての説明

400HZと400Hzから500Hzまでの和音 どこまでがうなって聞こえるかが、確かめられます。 和音は最初の1秒がそれぞれ独立に0.5秒ずつなって、そのあと2秒それらの和音がなります。
片方は400Hzで固定ですが、もう一方は400Hzから10Hzずつ大きくなっていきます。

音楽班紹介Ⅳ~回路と音楽「PWM」~


こんにちは(´・ω・`)

なんか久しぶりの投稿でかつ音楽班としての投稿となり、へんな気分です。

実は僕は中高の部活でずっと電子回路を相手に遊んでました。

じゃ、なんでKCSって感じですが、その流れでどうしても回路がらみな考えが好きなんですよ。

で、今回は『回路と音楽』というお題ですこし書かせていただきたいと思います。

想像なんですが、みなさんが音楽について考えるときって、きっとまず回路とかのことについては考えないですよね。でも、実際にはオーケストラとかレコードで音楽を聞くときでもない限りは回路がそこに静々とそこに存在して、もぉ必死に頑張ってくれてるんですね。(´ω`)

この音楽班紹介Ⅱでもあったアンプとかあそこら辺の話はもろに回路ですね。スピーカとかも回路っちゃ回路ですがここらへんは機会的な要素が強いかも・・・。

音楽と回路の関係を話す上で一番重要なことは何なのか。さっき風呂入って5分くらい考えて見たんですが。とりあえずこれですかね。

D/A変換(ディジタルアナログ変換)

音楽機器でアンプあたりにお金かけようとし始めた人なんかはDACという字とか見覚えないですか。コレ、Digital to Analog Converter(ディジタルアナログ変換器)の略なんですねぇ、やった。

じゃ、これなんだと。

要はですね。普通、音楽データって結局はの集まりディジタルデータなんですね。けど、実際の音楽は空気の音圧の変化の波形、アナログなんですね。

例を見てみましょう。

もしD/A変換がなかったらどうなっていたでしょうか。

パソコンのピンで出力することのできる電圧は通常そのCPUの電源電圧マイコンだと5Vとか3.3Vとか)くらいとGNDつまりは0V。その2種しかありません。この電圧だけで表せる波形は、そう矩形波しかありません。

ディジタルだけで音楽

や~、いいですよ矩形波。もう最近言われなくなったピコピコっていうのはコイツが原因の一端ですね。パソコン的に超扱いやすい。だって自前でなんの回路の力も借りずに表現できますから。僕なんかが音作るときは主に矩形波くんに大活躍して頂きます。

まぁ、それはさておき。でも、自分の聞ける音楽が矩形波だけじゃもの足りないっていうか多様性もクソもありませんよね。じゃ、何がしたいのかって言うと例えば「あ」って言ってみた

こんな波形ですかね。さっきの矩形波に比べるとだいぶ複雑。ちなみに僕が「あ」って言っただけです。

こんな波形を表現するにはもうお分かりでしょうが、パソコンのCPUちゃんのピン、通称お御足では無理な訳ですね。

じゃ、どうすんのよと。

ここでD/A変換です。

ここでは主な方法として1つ紹介しますね。

PWM(Pulse Width Modulation)

なんか難しそ~うな単語ですが、多分D/A変換って言ったらコレってレベルの代物。特徴としてCPUのピン一個でアナログを表現できます。

要はこのPWMさっき説明した矩形波の一種にあたると思います。ただ、矩形波の形を少し工夫したんですね。

PWMは日本語でパルス幅変調というもので、表したいアナログの値0.2とか0.7とか1と0ともつかないものを「幅」というもので表そうとしているということ。

パッととりあえず図を示すと以下のような感じになります。pwm

上が表したい波だとして、下のような矩形波を出力します。少し見づらいかもなので拡大したものが次。pwm2

拡大してみるとちゃんと矩形波だってわかるでしょ。ただ形がちょっと変です。どう変かというと実はこの矩形波電源電圧)とGND)の時間が等しくありません。

なんとな~くでいいので、上のグラフで値が大きいと下で1にいる割合が多くて、小さいと0にいる割合が多いのがわかります?

普通、矩形波というと例えば周期10Hzとしましょう。すると波長は100msとなっての時間が50ms、の時間が50msと同じだけの時間出力されます。しかし、PWMで使うそれは異なります。PWMでは次のように1を出力する時間T1を決めます。

\begin{aligned}
T_1 = value * T_{pwm}
\end{aligned}
\begin{aligned}
ただし、T_{pwm}はpwm波形一個分の時間、valueは0~1までの表したい値
\end{aligned}

ここで、また例を考えてみたいと思います。

電源電圧を1V、Tpwmを10msとして考えましょう。一つのピンから0.2Vの電圧を出力したいとします。このときこれをPWMで表すとどうなるか上の式を使って考えるとT1は0.2*10msで2msとわかりますね。つまり、1Vを2ms、0Vを8ms流すような波形を出力し続ければいいわけです。pwm0,2

こんな感じ。これで0.2Vを出力していることと等価になります。

これ、どゆことかと言うとPWMをコンデンサなどの素子で平滑化、有り体に言えば平均みたいなもんを取れば0.2になってますよね。そうなるように定義してるので当たり前なんですが・・・。

今回の例では0.2Vと一つのアナログの値でしたがコレを次は0.22、その次は0.25・・・みたいに次々とやって行けばpwmこれが出来上がるわけです。ただお察しの通りPWM波形一個分の時間がそのまま分解能となってしまうのが注意です。

これまた例を上げると。Tpwmを10msとしたらもちろん上のSIN波も10msごとに区切った飛び飛びの値しか表現されません。

さらに言うと、もし0~1の値を0.01単位で表したいとするとTpwmが10msなら0.1ms単位での操作が要求されます。0.1msくらいならパソコン的には超余裕ですが、これがTpwmがもっと短くなり、0.01より細かい単位で値を表したいとするとその細かさに比例して要求される操作の単位時間が短くなります。まぁ、最近のパソコンならこういう話も滅多なことがない限り気にかける必要はないですけどね。ただし、マイコンなどのより低級な処理媒体の場合ココらへんは要チェックとなります。

で、どうでしょう。みなさんのD/A変換の理解への一助になっていれば幸いです。結局、信号処理的な話で「あれ、音楽関係あんのかなぁ」なんて感じですけど、今度音楽を聞くときにこのD/A変換のことを思い出してください。興奮できます。

 

モンティ・ホール問題

読者の方は「モンティ・ホール問題」という有名な問題をご存知だろうか。

ヤギ

『プレーヤーの前に閉まった3つのドアがあって、1つのドアの後ろには景品の新車が、2つのドアの後ろには、はずれを意味するヤギがいる。プレーヤーは新車のドアを当てると新車がもらえる。プレーヤーが1つのドアを選択した後、司会者(モンティ)が残りのドアのうちヤギがいるドアを開けてヤギを見せる。
ここでプレーヤーは、最初に選んだドアを、残っている開けられていないドアに変更してもよいと言われる。プレーヤーはドアを変更すべきだろうか?』Wikipedia(モンティ・ホール問題)

という問題だ。

僕はこの前『終物語』で初めて知って、だからこんな口調で書いているのだけれど、読者の方はこの問題に正確な答えをだすことができるだろうか。

僕は回りくどいのは嫌いなので、答えから言ってしまおう。 続きを読む

【MMD】くぁいい雪ミクで『好き!雪!本気マジック』

こんちぁ~す、いつもはMMD実写合成上げてる奴です。
今日はちょうど来月がクリスマスということで、すこし道をそれて普通のMMDの動画を作ってみました。

いやー、しつこいですけどこれが無料で作れる世の中ってすごいですね。

では、また。

三田祭NOW!!

先日お伝えしたとおりKCSは三田祭に出展しております。

三田祭も残すところ今日も含めてあと2日。

まだ来られていない方はもちろん、一度来られた方も是非また一度お越しください。

場所は133教室。わかりにくいけど頑張ってDSC01295

VRのOculusのゲームを体験している様子。

MMD実写合成~その4~足元を魅せよう

全然関係ない話なんですが、「KCS」でぐぐったときのKCSのページよりも「MMD実写合成」でぐぐったこの記事の方が上位に来てて割かしビックリしてかなり責任感じています。

で、本題です。前回のを見てない方はまずそちらからの方が話の流れがわかりやすいかとこの記事のシリーズ一覧は記事の一番下にあるタグから見れば見れるはずです。

正直なところ前回までは技術的な分野の話は一切しておらず、これからもMMD技術的な話はしないつもりですが、これからは実写合成というテーマの元「どうすれば実写っぽくなるか」という点をみなさんと共有していきたいと思います。まぁ、ほとんどが僕の考えたアイデアとかでなくネットで拾ってきた情報なのですが…。

それで、今回は「足元を魅せよう」というお題で進めます。要は影をだそうってことです。 まずこちらを見比べてください。 小さくて差がわかんないのでクリックで拡大してください。

影なし MME付き影なし影あり MME付き影有り

MMDでも普通の黒い影なら出せますが、このように映ったような感じの影の出力には働く床こと「WorkingFloor」(リンク先でダウンロードできます)を使います。今回もそれを使ってます。

ちょっとあまりに細かいところなのでわかりにくいかもしれませんが、足元を見るとミクの影が写っているのがわかります。右側の方が影があってよりそこにいる感じがあります。 よく考えてみればこれは当たり前のことです。なぜなら「現実の世界になんか影響与えてる」->「現実世界にいる」という思考がめぐるのはどこも不思議でないからです。

実際には今回の写真には影以外にもいろいろ弄ってはいるんですが影以外の特性はどちらも共通です。さらに欲を言えば影をぼかすなどの処理をしたいところですが正直このくらいの濃さだとあまり効果がありません。

MMDではなくてaviutlという動画編集ソフトを使って適当にぼかしてみたのですがaviutlで合成 結果は散々でした。合成するときにいろいろ風合いを損ねてしまったようです。しかも、足元はぼけてるって言うより消えてる。 そんなこんなで自分でも言ってみたところで結局できてないというダメダメ度。

で、今更感が否めませんが、この「足元を魅せる」っていう考え方は別に僕が最初に言い始めた訳がなく、事実多くの方が実写合成をする上で重要と位置付けているようです。

1に影をつける。
2にごまかす。(゚д゚)! です。

ごまかすっていうのはもうどうにもならん時はそもそも足元が映らないように工夫するということです。

bokeboke<これでOKちゃうん?

足元がなければ人間が勝手に妄想してくれるので楽でいいですがちょい構図が制限されます。さらに言うなら、多少なりとも合成画像としての質の上限は足元を入れる場合の方に軍配が上がりそうです。

最後になりましたが、今回使ったMMEのクレジットを込めた紹介をさせていただいて終わりにします。 詳細については後日語りましょうかね?

PanelLitght(http://www.nicovideo.jp/watch/sm19123817)そぼろ様

SSAO(http://www.nicovideo.jp/watch/sm13796840)mqdl様

ExcellentShadow(http://www.nicovideo.jp/watch/sm19123817)そぼろ様

dAdultshader((´・ω・`)改造dAdultsShader 15.ぬる肌 – 新肌質201502CGⅣ) (http://www.nicovideo.jp/watch/sm25514069)ドゥドゥ様

それではまた