- 締切済み
高速フーリエ変換の標本点数について教えてください
最近フーリエ変換を勉強し始めた者です。 自分の理解が合っているのかとても不安なので、ぜひともお知恵を頂戴したくお願いいたします。 CDのようにサンプリング周波数が44100Hzの場合、フーリエ変換の際の標本点数(データ数)が4096だと、4096 / 44100 = 0.1秒弱分しかそのCDの曲をフーリエ変換できないという理解で合っているのでしょうか。 合っている場合、たとえば5分程度の曲をフーリエ変換するためには、 5min * 60s * 44100Hz = 13,230,000点の標本点数についてフーリエ変換しなければならないという理解で合っているでしょうか。 恐れ入りますが、よろしくお願いいたします。
- みんなの回答 (4)
- 専門家の回答
みんなの回答
>0.1秒弱分しかそのCDの曲をフーリエ変換できないという理解で合っているのでしょうか。 >たとえば5分程度の曲をフーリエ変換するためには、 5min * 60s * 44100Hz = 13,230,000点の標本点数についてフーリエ変換しなければならないという理解で合っているでしょうか。 そうですね。 でもフーリエ変換は周波数領域の大きさを求める物ですから、1曲全部フーリエ変換することにどんな意味があるのでしょうか? 他の曲との比較ですか? >窓関数の物理的意味と フーリエ変換の前提に切り取ったデータが繰り返し行われるという物があります。 いわば、1曲終わったらまた同じ曲が続けられるという状況が前提にあるのです。 自然現象ではノイズも含めると、全く同じ音が繰り返し起こるとはまずないです。そのためサンプリングしたデータは前提条件を満たしません。 前提条件にある、同じことが繰り返し行われるということは一番最後のデータの後に一番最初のデータが続くということです。 しかし一般に完全に同じ状態が続くことはないので、サンプリングしたデータは不連続になり、それが解析結果に影響を及ぼします(リンク効果)。 それを防ぐための工夫として窓関数を用います。 質問者が補足を要求している、#2さんの書かれていることは、1曲全部をフーリエ変換するのではなく、曲を分割して何回もフーリエ変換をするということを意味しています。 1曲全部をフーリエ変換することによりその曲の周波数特性が出ますが、曲を分割していくということは、1つの曲の分割したパートごとの周波数特性を求めることになります。
- SortaNerd
- ベストアンサー率43% (1185/2748)
全体をフーリエ変換できれば一番いいのですが、量的に大変な場合、小区画に区切ってフーリエ変換します。 そうすると区画の継ぎ目でノイズが発生するので、それを防ぐために継ぎ目を滑らかにする必要があります。 そのために、各区画ごとに窓関数と呼ばれる関数を掛けます。 窓関数は多種ありますが、基本的には中央で1、両端で0に近い値を持ったなだらかな関数です。
補足
SortaNerdさん、はじめまして。 お教え下さり、ありがとうございます。 例えば曲を一曲フーリエ変換する場合に、一曲をいくつかの小区画に区切ってフーリエ変換することを繰り返していけば良いが、その場合に各区画のつなぎ目でノイズが発生するのでそれを防ぐために窓関数を使うということですね。 すごくよく理解できました。 きっとこれぐらいのことはわかっていなければならないことなのだと思うのですが、私にとってはとても本を読んだだけでは理解できないことでした。 毎度、曲の例で恐縮なのですが、小区画でFFTを行ってそれに窓関数をかける、ということを繰り返せばよいということでしょうか。 とんちんかんなことを言っていたら申し訳ございません。
窓関数って出てきましたか? フーリエ変換で「ある瞬間」の周波数分布を出したいわけですよね。 かつある瞬間を繰り返し演算して「連続した周波数分布」がほしいわけですよね? そうしたら、出したい周波数分布の下限の周波数から、必要な標本点数が割り出せて、次の演算をするときには、標本の一部を捨てて、新しいデータを突っ込んでFFTすればいいので、サンプルの総時間が変わってもFFT演算器に入っているサンプル数は変化しないと思うのですが...。
補足
takkey-Tさん、はじめまして。 ご回答、ありがとうございます。 勉強している中で窓関数も出てきたのですが、 それがいったいどのように役立つのかについては 理解ができませんでした。 お手数でなければ、窓関数の物理的意味と 例として曲を一曲FFTする際の窓関数の果たす役割 の二点について、解説をお願いすることは可能でしょうか。 きっとそれが先ほどご回答くださった下記の部分のお話に つながってくるのだと思うのですが、情けないことにまだ そこまで理解が追いついていないというのが正直なところです。 >そうしたら、出したい周波数分布の下限の周波数から、必要な標本点数が >割り出せて、次の演算をするときには、標本の一部を捨てて、新しい >データを突っ込んでFFTすればいいので、サンプルの総時間が変わって >もFFT演算器に入っているサンプル数は変化しないと思うのです >が...。
- tance
- ベストアンサー率57% (402/704)
そのとおりです。 13,230,000という処理数はすごく多いと思うかもしれませんが、あくまでも 一秒間に44100サンプルさえし続ければ5分後にはそれだけサンプルした ことになります。 動画のFFTなどでは桁近いにサンプル数が増えます。
お礼
tanceさん、はじめまして。 ご回答、ありがとうございました。 まだ勉強を始めたばかりでわからないことが多いので とんちんかんなことを言っていたかもしれませんが、 快くお教えくださって感謝しております。 動画のFFTになると音楽とは桁違いの演算量になるのですね。 確かにFFT3回するわけなのでそうですね。 私など、音楽1320万回の時点でメモリ問題に直面しそうです。 Cでかいているのですが、すでにそんな気配です。。
補足
tanceさん、はじめまして。 お教えいただいてありがとうございます。 >13,230,000という処理数はすごく多いと思うかもしれませんが、あくまでも >一秒間に44100サンプルさえし続ければ5分後にはそれだけサンプルした >ことになります。 でもかなりの計算量になりますね。。 1000万回を超える演算プログラムは未経験なのですが、メモリも大変なことになりそうな。。
補足
semi-zzzさん、はじめまして。 詳しく教えて下さって、ありがとうございます。 曲をフーリエ変換するというのは、私にとって思いつきやすい例えですので、それ自体に何か意味があるわけではないのですが、確かに仰られるとおり、一曲をフーリエ変換したその結果と他の曲のフーリエ変換の結果が異なることを確かめてみたいという気持ちはあります。 相変わらずよくわかっていないのですが、曲とフーリエ変換の結果は必ず1対1になるので他の曲のフーリエ変換の結果とは絶対に異なるということを想像しており、それを確かめてみたいという気持ちです。 窓関数をなぜ使うのかという点につきましては、semi-zzzさんや他の皆様のアドバイスのおかげで理解することができました。 ありがとうございます。 ここまで皆様からお教え頂いた内容を自分の中で整理していたのですが、おそらく次は、曲を分割する際にFFTの式の中でどの変数がどういう役割になり、窓関数はどういうタイミングで使うのかという点になると思います。 いきなり質問してしまっては勉強にならないと思いますので、自分でもう少し理解できるように努力してから、わからない点をまたここで質問させていただきたいと思っております。 それにしても難しいものですね。。。