赤ちゃんがマジ泣きしたときの声が頭にキンキン響くので、
泣き声をスペクトルアナライズしてみた。

昔はMatlabでやっていましたが、
個人だとライセンスが高いのでpythonでやってみました。

取得方法

Macbook airの標準搭載のマイクを利用
python3 pyaudioモジュールでストリーミングを取得
ストリーミングのデータを高速フーリエ変換
pyqtでグラフを高速表示させることで、リアルタイムスペクトルアナライザを実現

スペクトル結果

テレビの砂嵐のとき

赤ちゃんが聞くと泣き止むというアナログテレビの砂嵐音。
この音はホワイトノイズに似ていて各周波数ある程度スペクトルが立っています。
一番高い周波数が1500Hzぐらいなので聞いていても不快感はない。

横軸:Hz、縦軸:強さ

「shi」のとき

口で「shi」の音を出した時のスペクトル。
この音もホワイトノイズに近いかなと思い測定してみました。
赤ちゃんにこの音を聞かせると落ち着いてくれるので、最近はずっと「しーっ」と言っている。
誰かが「しーっ」と言うと自然と静かになるのは、大人でも子供でも外国でも共通だと信じています。
2500Hzとその倍音の5000Hzにピークがあるようです。
日本語の中でだいぶ高い周波数。※これよりも高い五十音はあるのかな

横軸:Hz、縦軸:強さ

赤ちゃんのマジ泣きのとき

はい、スペクトルが振り切れました。
音量もすごいですが、高音帯域のスペクトルが高いので耳鳴りのように聞こえる。

横軸:Hz、縦軸:強さ

まとめ

赤ちゃんの泣き声は高周波満載。
日常会話で使う周波数は250Hz〜4000Hzなので、それと比べるととても高いのがわかる。

感想

マイクデバイスにリアルタイムで処理する方法がわかったので、いろいろ発展したものができそう。 ただグラフはpythonのpyqtを使ってみましたが、対数表示にしたかったけどスケール調整の方法がわからなかったので見づらくなってしまった。

学生時代に研究室で教授の話し声がうるさかったので、
マイクから拾った音の逆位相をイヤホンから出し、声を打ち消すノイズキャンセラを作ろうとしたことがありますが、
当時は処理速度が間に合わなくてただイヤホンからも教授の声がする声増幅器になってしまいました。 今のPCスペックならお手製のノイズキャンセラを作ることができるかもしれないですね。