テナガザル
テナガザル
企業勤めの理系です。 でもあくまで趣味ですから結果オーライな考えやプラシーボも容認します。 現在の機器構成 スピーカー : 自作2way Feastrex nf-5 / RAAL 140…

マイルーム

好き勝手にやってる部屋
好き勝手にやってる部屋
最近feastrexのユニット載せたスピーカーを部屋にセットしてみました。 満足いくまで遊んでいけたらと思います。
所有製品

レビュー/コメント

カレンダー

    1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31    

お気に入り製品

日記

前回の続き4 - 単発サイン波のフーリエ級数展開

このエントリーをはてなブックマークに追加
2012年05月12日

以下は純粋に数学の話です。
この話はどちらかと言えば若い学生さん向けに書いています。
「信じる」とか「信じない」という次元の話ではありませんが
30年も昔のメーカーの発言を拡大解釈した上で神聖視されている方は、
以下は読まれない方が宜しいと思います。

※僕の計算間違いがあれば真摯に対応します。

※積分計算の部分さえ読み飛ばせば高校生でも理解可能と思われます。


フーリエ変換は理系の大学生なら必修の数学だと思いますので
大学2年生以上なら理解できるはずの内容です。
ただし学科によっては必修ではないかもしれませんし、そもそも習ったからって必ず身になっているわけでもありませんから、忘れていたとしても仕方ありません。
とはいえ折角勉強できるのに「見た事すらない」と言われる方は勿体ないです。


フーリエ変換というのは数学的には関数の「因数分解」です。
たとえば100という数は100=1*2*2*5*5
で表す事ができます。
840は840=1*2*2*2*3*5*7
と言う風に素数に分解できます。
このような作業を任意の関数f(t)に対して行い
cosとsinを用いて因数分解したものがフーリエ展開です。
そのcosとsinの係数F(ω)を求める計算がフーリエ変換になります。
840の例で言えば素数1の指数は1、素数2の指数は3、素数3の指数は1・・・
素数7の指数は1、素数11の指数は0、素数13の指数は0・・・
というような事です。
素数を順番に並べていって、その素数ごとの指数が分かれば全ての自然数を表現できます。
ではその指数が順番に幾つになるかを書けば自然数が何か逆算できますよね?
例えば1,1,0,0,0,1,0,0,0,0,0・・・という風に書いてあったら
素数は順に1,2,3,5,7,11,13,17・・・ですから
1*2*11=22の事だとわかります。
1,0,2,0,3,0,0,0,0,0,・・・と書いてあったら
1*3*3*7*7*7=3087です。

これがフーリエ変換の本質になります。
ちょっとづつ周波数の違うcosとsinの波を無限に用意して
その周波数毎の係数F(ω)さえ計算できれば
元の波形f(t)はF(ω)にcosとsinを掛け算して一意に逆算できます。

ポイントは自然数を3087と書いても1*3*3*7*7*7と書いても
結局は同じ数を書き変えただけという事です。
あくまで因数分解ですから、両者は同じものであり
表している数が変わる事はありません。


では以下で単発サイン波をフーリエ展開していきます。









これで単発サイン波f(t)を周波数成分を用いて展開できました。

式の中でA+ω=0になったりA-ω=0になる時があるんじゃないの?
と思った方の為にsin(ゼロ)÷(ゼロ)の時の計算を載せます。



さて、ここで皆様が欲しいはずの情報はF(ω)です。
今回は途中の式変形で出て来た⑧式のF'(ω)を書く事にします。

f(t) = ΣF'(ω)sin(ωt)
ですから、F'(ω)に周波数成分sin(ωt)を掛けて足していけばf(t)です。


サンプリング定理(標本化定理)をもう一度書きます。
※混乱を避ける為、変数は今回使用したものに書き直します

「ある関数f(t)をフーリエ変換した関数F(ω)の成分が、|ω|>Wの範囲で
F(ω)=0であるような関数f(t)に対して
ω=2Wに相当する周期より小さい周期を持つ標本化関数で標本化した時に得られる関数は、そのスペクトルのうち|ω|<Wが原関数のスペクトルに一致するというものである。」

「工学的には、原信号に含まれる"最大周波数成分"をfとすると、2fよりも高い周波数fsで標本化した信号は、ローパスフィルターで高域成分を除去する事によって、原信号を完全に復元する事ができると言う事を示している。」


f(t)をフーリエ変換して定数を加えたF'(ω)のグラフ(ω=2πf)をもう一度見て下さい。
どこかで収束して値がずっと0になる所があるでしょうか?

瞬間的に0になるポイントはあっても、「これ以降はずっと0」になる場所なんてありません。
f(t)の最大周波数成分fは無限大です。
つまりこの関数に対してサンプリング定理は正しく適用できません。


CDはサンプリング周波数44.1kHzですから、その半分である22.05kHzまでの「周波数成分」までは正しく記録する事ができます。
つまりグラフの赤矢印で示した所までを正しく記録し、そこから先はローパスフィルターによって(理想的には)全ての値が0になります。

もしもサンプリング周波数を176.4kHz、352.8kHzにしたらどこまで記録できるのかを緑と青の矢印で示しました。
それぞれのサンプリング周波数で記録すると
赤、緑、青矢印より右側のF'(ω)はゼロになると考えて下さい。

単発サイン波のような生成困難な波形を再現する場合でも
緑矢印や青矢印くらいまで正確に記録出来ていれば十分かなと思います。
前回自分が必要な"周波数成分"は可聴周波数の4倍くらいまで記録すれば十分で、8倍もあればそこから先はオカルトだろうと発言したのはこのグラフを見ているからです。
(まあ"理想的"にはfs=500kHzくらいまでは欲しいでしょうか(笑))

とにかく赤矢印の所、fs44.1kHzで記録した場合
つまり22.05kHzでLPF(ローパスフィルター)を掛けた時はそこから先のグラフが全てゼロになり、波形の再構成に重要なF(ω)の半分にも満たない事がわかります。
こんなんで元の波形が再現するわけがないです。
※現実の波f(t)に関してはFFTを用いてF(ω)を求める必要があります。




F'(ω)に示した"周波数成分を全て"足し合わせたグラフが左側。
(先ほどの青矢印より先の周波数成分まで足しています)
22.05kHzより高い周波数成分を全て落として、低域も4kHz以下をカットしてみたものが右側のグラフです。
※ツィーターだけで鳴らしてみた事を想定

今回行った理論計算が多分正しいだろうという事が右のグラフより分かります。
波長が22.05kHzに一致し(T=0.00004535sec)
振幅もぴったり1になっています。
(※f(t)=sin(At)としているので振幅は1)


それに対してサンプリング周波数を44.1kHzで制限したもの
(22.05kHz以降の周波数成分を全て0にしたもの)
更に低周波なんて関係ないとばかりに4kHz以下もカットしてみた物が左側です。

「理論的には」これだけ崩れます。


実際に計算したエクセルシートを公開します。
($の有無による絶対参照と相対参照さえ分かっていれば誰でも簡単に作れます)


F'(n')に今回計算した式を入れています。
右方向にF'(ω)をひたすら伸ばしていきます。
黄色で塗ったtが実際の時間軸です、下方向にひたすら伸ばします。
つまり横軸がF(ω)で、縦軸がf(t)になります。


f(t)はΣF'(ω)sin(ωt)を足し算していったものです。
ピンクはF7列からBND7列まで足しています。
青は4kHz相当から22.05kHz相当までの和です。


スクロールバーのサイズから計算量が想像できると思います。
このエクセルはファイルサイズが50MBを超えました。
(ちゃんとした計算ソフトを使用すればこんな無駄に容量は要りません)



そもそも22.05kHzの単発サイン波だからといって「高調波成分」だけがあるわけではありません。
F'(ω)のグラフから明らかなように、DCに近い低周波成分から値を持ち始めます。
つまり高域成分をカットしてはいけないのと同時に
低周波成分もカットしてはいけないんです。
低周波成分の変化によって高域の単発サイン波の波形も変わるという事です。


人間の耳は空気の疎密波に対して時間分解能0.00005[sec]程度(20kHz程度)の感度が上限であり
これよりも波長が短い波に対しては最早音として認識できないという主張は「その通りではないかな」と思います。
なのでこれより波長が短い波に関して考える必要は無いと思います。
(もし聴こえる!と言うならもっと高い周波数で計算しないといけません)

そしてその可聴範囲内の波形に対して、サイン波が無限にずっと続く場合と
単発や2発、3発など短期的に終わるサイン波に対して「同じ音に聴こえる」と言われたらそりゃあウソでしょと思います。
流石に右と左の波形は(もし聴こえるなら)異なると感じるはずです。



最初に仮定した式f(t)に関して、T→∞とした極限
つまり無限に続く単純なサイン波だった場合、
f(t) = sin(At) (-∞<t<∞)
この数式は因数分解(フーリエ展開)するまでも無く誰の目にも明らかに
f(t) = 1*sin(At)ですので
F(ω)に相当する部分はF(A)=1で、他の全てのωでは0になります
(正確には積分して1になるδ関数という超関数を使用して無理やり表記します)

これならω=A以外の全てのF(ω)でF(ω)=0が成り立ちますから
安心してサンプリング定理を適用できます。


従来メーカーさんが発表している内容はつまりこれです。
想定波形を無限に続くサイン波とすれば、
f(t)の波の周波数と、フーリエ展開後の「周波数成分」が一致します。
するとf(t)をフーリエ変換したF(ω)はf(t)と同じ周波数にしか値を持たないので
『22kHzまでの波(無限に続くサイン波)を再生するにはサンプリング周波数44kHzでいいよー』となるのです。

ここで変に「波」とか言っちゃうから多くの人が混乱して
「任意の波」、「あらゆる音」と拡大解釈してしまう結果になっています。

「波」の解釈が独り歩きしてしまい
「どんな音も理論的にサンプリング周波数44.1kHzで再現できる」という塩梅になり
44.1kHz以上のサンプリング周波数はオカルト、となってしまったのが今の状況です。
メーカーが発表している「波」は「無限に続く単調なサイン波」です。



こんな場合を考えて下さい。
30年以上前に、医療関係者から「周波数を正確にコントロールできるデジタル検聴機が欲しいんだけど、そんなの作れる?」
「人間の耳は20kHzくらいまでしか聞こえないから、22kHzくらいまでの連続サイン波が出せれば十分だよ」

この場合に技術者が提案できる"理論的に完璧な規格"こそ
「サンプリング周波数44.1kHz」です。
これ以下のサンプリング周波数では22kHzが再現できないし
これ以上の規格は必要ありません。

そうです、つまり16bit/44.1kHzというのはお医者さんが使う
連続サイン波を出力する検聴機に必要な規格です。
それをそのまま音楽用に適用してみたら案外いい音で聴こえたからこれでいいじゃん、という類のものです。

本来人間の耳に聴こえる「音楽信号」を記録するには規格が足りません。



さて、ソニーさんはこんな計算は遥か昔に知っています。
あそこの技術者の方は超がつくほど優秀ですから、CDを出す時か出した直後
遅くとも90年代には気づいていたはずです。

ではなぜこんな(簡単な?)事を発表しないのでしょうか。

簡単ですね、ソニーは内部にレーベルを抱えているからです。
まだまだCDが出て間もない90年代に、実はCDは不十分な規格だなんて発言は間違っても出来なかったはずです。

ですが技術の方はどうすれば良い音になるか知っていたはずですから
とにかく商品だけは出しました。


SACDです。


その時にSACDに関連して超高域が大切だというごくさっぱりした解説と共に
超高域にも対応したSPをリリースしています。

そもそも当時の技術大好き王国で、開発・製品化に上司の承認が下りているという時点で何をかいわんや、です。


ですが戦略的に80年代に自分達で宣伝した内容を否定できなかったため
ユーザーからは何がどう凄いのか?
単なるオカルトではないのか?とそっぽを向かれてしまいました。
更に従来のPCMを採用せずDSDという別規格で記録しています。
これも結果論としては自分の首を絞めていると思うのですが…
そこは企業戦略なので仕方ありません。
(90年代に今のPC事情を予測できた人がどれだけいるでしょう)

SACDのwikiを確認すると人間の耳に聴こえない超高域は関係ない(=オカルトだ)とまで書いてあります。
21世紀にもなってどっちがオカルトなのか、と言いたいです。



もっとはっきり言えば、たまに超高域を再生するなんてコウモリにでも聴かせるのか?
と揶揄する方がいますが、それはコウモリに失礼というものです。
所詮100kHz程度のサイン波ですから、その程度では「コウモリの声」を再現できるはずもありません。
人間にとって電話の帯域では人の声が変わって聴こえるように
コウモリにとって100kHzを超えた程度のサイン波では「何この電話クオリティ(笑)」と笑われるのがオチです。

もしコウモリの声を正確に出してコウモリさんを満足させたいのであれば
MHz帯域まで特性を伸ばす必要があるでしょう。


最後に、
これは単純な理論計算です。
実際にはこの波形すら出てきたりはしません。


理由は簡単です、理論的に完璧に音楽波形を記録して
電気信号がその9割9分を再現できたとして

その全てをスピーカーがブチ壊すからです(笑)


勿論、DACが処理する信号でデジタルフィルターやアナログフィルターが理想的ではない為に出力波形がギザギザになるだとか言う話もこれよりも後の話です。
それよりも遥か手前、サンプリング周波数を制限した段階で信号は歪んでいるという事です。


また従来、超高域の有無による音質の違いを知覚できるかどうかの論文が幾つも挙げられていますが
「従来の技術では差が出なかった」とか「理想的な信号再生は困難」である事は今回の計算結果を何ら否定するものではありません。

それは理論計算とは別の「そうなんだ、まあ仕方ないよね」
「いつの日か再生してみたいね」という、現実の側に立った場合の話だからです。

次回の日記→

←前回の日記

レス一覧

  1. ざっと読ませていただきました。私は学生でなく立派な年ですが、単発のサイン波を再現するのに非常に高いところまで必要ことはよく分かりました。

    私は高い方の音にこだわるというか、歪みのない音を好むのでSACDやDSDという技術に好意的になってしまいますが(アナログもです)、高域を重視せずに中低域の盛り上がりを中心に聴くという聴き方の人には、興味の薄い話かも知れません。

    でも、波形の忠実な再現は大事なことですし、最新のCDの(クラシック録音ですが)録音傾向、オーディオ機器の音質傾向は、歪みなく正確にということを目指しているような気がします。

    とりとめなくなりましたが、ともかく、わかりやすい解説ありがとうございました。

    by何も聞こえなくなった at2012-05-13 08:39

  2. 何も聞こえなくなったさんこんばんは。
    分かりやすいかはわかりませんが、そう言って頂けると幸いです。

    正直に言えば単発サイン波は相当厳しい波形です。
    80kHz以降にも目に見えるレベルで"周波数成分"が存在しています。
    但し従来の計算で扱っているのは無限に続くサイン波ですから、それはそれでズルいんです。
    実際にはその中間くらいが「音楽波形」に相当すると思います。

    (以前も書きましたが)これはフォーマットの話ですから、技術と容量が許すのであればより記録困難な波形までをカバーしている方がよりHi-Fiだと言えます。


    またきっと自分の計算や説明には細かい間違いがあると思います。
    何も聞こえなくなったさん以外にも、何か気になる点がありましたらご指摘頂ければと思います。
    (勿論こちらが間違っていない限りは反論させて貰います(笑))

    byテナガザル at2012-05-14 22:11