【先着1,000名様!】1,000円分をプレゼント!

失礼します。

DFT(離散フーリエ変換)について質問させてください。
DFTの周波数分解能は時間領域でのデータが持つ幅の逆数で決まりますが、
この周波数分解能で表現されなかった周波数成分はどこに行くのか教えていただけないでしょうか?
DFTでの離散的な周波数の間にある成分はどこへ行くのか?

単純に考えて、DFTは形としては級数和なので、
それらの成分はどこかに畳み込まれているように思うのですが、
表現されない周波数成分の情報は消されたりするのでしょうか?

よろしくお願い致します。

このQ&Aに関連する最新のQ&A

A 回答 (4件)

質問の意味が掴みかねますが。

。。予想して答えます。

離散化された周波数の間の周波数は、時間領域の信号が本当に周期的なら、存在しないと思います。しかし本当の信号は周期的ではないことがおおいです。ですから精密化しようと思えば、時間領域での信号の幅(人工的な周期)を大きくする必要があります。すると離散化された周波数の幅は狭まります。よって強いていうなら、離散化された周波数の間の周波数の情報は、本来周期的でないものを周期的なものにしてしまうという意味で失われていると思います。
    • good
    • 0
この回答へのお礼

ありがとうございます。解決しました。

そうですね。時間領域で見ている範囲のデータ列が無限に周期的に連なっていると考えれば、
その周期の逆数の倍でしか周波数は存在しませんね。
時間領域で見る範囲を大きくとることによって、今まで表現されていなかった周波数に情報が入ってきますが、それは範囲を大きくしたところからやってきたということですね。

なにか勘違いをしていました。
ありがとうございます。

お礼日時:2011/11/22 21:23

>時間領域でのデータはそのような不都合が起きないよう両端で0に収束していると


仮定してもらって結構です。

もし、窓関数を使用していないのに両端で0に収束しているとすると
あなたの言う周波数分解能で表現される成分しか含まれない事になります。
ですから他に行く必要などもともと無いのです。

もし、表現可能で無い周波数成分を含んでいるのに両端で0になっているのであれば窓関数を適用した結果です。
    • good
    • 0
この回答へのお礼

ありがとうございます。
勘違いをしていました。おっしゃる通りです。

お礼日時:2011/11/22 21:26

http://cp.literature.agilent.com/litweb/pdf/5988 …
のp4~p7が参考になると思う。
    • good
    • 0

信号のサイクル数がデータの幅の中に丁度収まらない場合はデータの始まりと終わりの部分に段差が生じます。


この段差は高い周波数成分を持つ為、その部分がフーリエ変換されて色々な周波数に現れます。
この為、元の周波数のスペクトラムが広がって現れます。

通常、FFTでは窓関数を使用しますが、窓関数をフーリエ変換したものがスペクトラムの広がりかたを示します。

データの範囲に信号の複数サイクルが丁度収まる時には、窓関数を使用しない(矩形窓を使用するのに等しい)場合にはスペクトラムの広がりが起きません。

こちらを参考に
http://ja.wikipedia.org/wiki/%E7%AA%93%E9%96%A2% …

この回答への補足

すみません。

私がうまく言いたいことを表現できてないからでしょうが、
窓関数は今考えていません。
時間領域でのデータはそのような不都合が起きないよう両端で0に収束していると
仮定してもらって結構です。

あくまで私が聞きたいのは、
ある時間領域でのデータをDFTする場合、
DFTで表現されない周波数のうち、ナイキスト周波数内のもの、
デジタイズされた周波数の間にある周波数に対応する振幅情報はどこに行っているのかということでして・・・。
未だうまく説明できていないかもしれませんし、
私が何か勘違いしているだけなのかもしれませんが・・・。

補足日時:2011/11/22 16:50
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QFFTにおけるゼロ追加、補間や分解能について

FFT解析で、時間軸データの後にゼロをつけると、周波数分解能が上がることは数値計算で確認しましたが、次の場合のやり方がわかりませんので教えていただけないでしょうか。
1. 周波数軸データの後にゼロをつけて最高周波数をあげ、逆変換して刻み時間を細かくしたいのですが、ゼロの配置は共役関係やナイキスト周波数を考えるとどういう風になるのでしょうか。
2. 周波数軸データの値を内挿すると周波数分解能が上がり、逆変換すると結果として時間軸の継続時間が長くなるように思うのですが、それでよいのでしょうか。またその場合、良い内挿の方法はあるのでしょうか。
3. 以上に関するURLや書籍を紹介していただけないでしょうか。

Aベストアンサー

「時系列の中央部分がゼロに近い」の「中央部分」とは、「IFFTをしたときに得られる、t=0からt=周期までサンプル値を並べた配列の中央付近」ってことですね。周波数空間で応答関数を表現したものが滑らかであればそうなる。応答関数もそれをIFFTしたものも、持っている情報量は同じなので、こりゃしょうがないです。補間をしないで(半分の点数で)IFFTして得られるのは時系列のエリアス(つまり、時系列を周期の整数倍だけ時間軸上でずらしたものを全部の整数について合計したものの一周期分)であって、それ以上のことは情報がないから分からない。
 もしも何か別の拘束条件があるのなら、一応、手がない訳ではありません。すなわち、拘束条件によって時系列関数としてあり得る関数が絞られるから、その中から解を探すんです。しかしこの手(「超解像」という)は誤差に極めて敏感で不安定であり、だから応答関数の精度が非常に良いと保証できる場合でない限り使えません。(10時間掛けて計算するぐらいだから、そんな保証はタブンできないでしょう。)拘束条件がないのなら、せいぜい例えば「FFTしてサンプルを間引いたときに応答関数に一致するような時系列のうちで、ノルムが最小であるもの」を「一例として」構成してみせるぐらいが関の山です。

 なお、もしもご質問が「時系列のうち、後端ならともかくヨリニヨッテ中央部分が抜けるのが困る(「後端部分はどうせゼロに近い」とアプリオリに分かっていて、だからIFFTでドンナ値が出ようと誤差に過ぎないと考えて利用しない)」という話であるのなら、それは時間軸の原点の位置がまずいだけかも知れません。すなわち、ひょっとすると「応答関数を細かく計算するとギザギザしていて、それを1点おきに間引いてから補間したためにギザギザが失われ、IFFTすると時系列が時間軸上で周期/2だけずれて現れる」という現象なのではないか。
 どういうことかと言いますと、ある滑らかな応答関数をIFFTして得た時系列(中央部分がほとんど0)を考え、その時系列を時間軸上で周期/2だけ平行移動したとします。それをFFTして得られる応答関数はギザギザに振動していてでも1点おきに間引くと元の滑らかな応答関数の格好になる(。で、これを10時間掛けて計算したのだとしましょう)。この、間引いた物(滑らかな応答関数)を普通のヤリカタで補間して得られるものも当然滑らかであり、これをIFFTすると、最初の時系列(中央部分がほとんど0)、つまり時間軸上で周期/2だけずらす前の物に(ほぼ)戻ってしまう。
 もしそういうことが起こっているのだとすると、計算なさった時系列の後端部分はゴミなんかじゃなく、それを前端部分の前にくっつけたものこそが時系列の本来の姿ということになります。

 またしても滑ってるかも知れませんが…

「時系列の中央部分がゼロに近い」の「中央部分」とは、「IFFTをしたときに得られる、t=0からt=周期までサンプル値を並べた配列の中央付近」ってことですね。周波数空間で応答関数を表現したものが滑らかであればそうなる。応答関数もそれをIFFTしたものも、持っている情報量は同じなので、こりゃしょうがないです。補間をしないで(半分の点数で)IFFTして得られるのは時系列のエリアス(つまり、時系列を周期の整数倍だけ時間軸上でずらしたものを全部の整数について合計したものの一周期分)であって、それ以上...続きを読む

Q離散フーリエ変換の周期とサンプリング間隔と周波数

離散フーリエ変換で求まるスペクトルの各点の周波数について質問があります。
離散フーリエ変換で時間軸上の各点(0~T[s]でΔt刻みにN個の点を取った)を周波数軸上の各点に変換したときの周波数の換算式を調べると、
Δf=1/Tとなっていたり、Δf=1/(N*Δt)
となっていました。
意味上はどちらでも良さそうな気がしたのですが、実際に計算してみると両者の式で周波数軸上の各点での周波数がずれていました。
たとえば0秒から0.1秒刻みで10点とると一周期T=0.9秒になるのですが、N*Δtで計算すると一周期1秒になってしまいます。0.9秒しか見ていないのに一秒周期の関数としてフーリエ変換していることになると思いますが、周波数間隔はどちらの式で計算すべきでしょうか?それとも用いるフーリエ変換の式によって異なるのでしょうか?
教えていただければ助かります。よろしくお願いします。

Aベストアンサー

0~T[s]でΔt刻みにN個の点を取った
の意味ですが、
0からT秒までをΔtの幅で分割します。
分割した区間内のある時刻に計測するわけです。
たとえば、すべての区間で最初に測るときもあれば、
すべての区間で最後に測るときもあるでしょう。
 N回測ったときにかかる時間は、
それぞれの区間で計測した瞬間だけではなく、
各区間の残りの時間を含めて考えるべきです。
 そうしないと、
(N+1)回目の測定は、2*Δt秒間で1回計測することになってしまいます。
均等にするには0.9秒の瞬間に測ったとしても残りの0.1秒をつけた区間の中で1回測ったとして扱いますので、10回測るのに必要な時間は1秒となります。

Q高速フーリエ変換でデータ数が2のべき乗でない時

こんにちは。現在、フーリエ変換について勉強しているのですが、ちょっとわからないことがあったので質問させていただきました。

質問内容は高速フーリエ変換についてで、cooley&tukeyのアルゴリズムを利用すると、データが2の冪乗個のときは計算量をО(NlogN)に減らせる事ができるというものでした。

しかしデータが2の冪乗個でないとき。例えばN=5000くらいのときはデータを切り取って無理やりN=4096(=2^12)みたいな感じにすれば良いんですよね?
やっぱりその時って、N=5000で通常の離散フーリエ変換したときと周波数値に誤差が出ると思うのですが、それはどうやったら計算できるのでしょうか。。。

どなたかご教授していただければ幸いです。

Aベストアンサー

離散フーリエ変換は、信号が周期的であることを前提としています。
離散フーリエ変換でのデータ数Nは、離散時間信号の周期に当たります。変換の結果は線スペクトルとなります。
N=5000がその信号の1周期なのでしょうか。
もしそうならば、4096にすれば、誤差が大きくなるでしょう。
N=5000で変換すべきです。この場合にも高速アルゴリズムが
存在します。#1の方のとおりです。
FORTRANの時代には、パッケージがありました。
NはN=2^m*3^n*5^k*7^Lだったと思います。

もうひとつの考え方は、有限持続時間信号のフーリエ変換としての
適用です。これは、連続スペクトルとなります。データ数Nは
スペクトルの分解能に関係します。サンプリング周波数をNで割った
ものが周波数分解能となります。
実際のデータよりも2倍程度のNを使うことが多いと思います。
データ数が5000ならば、Nは8192とし足りないデータには、
0を詰めます。これならば、2のべき乗のNを選べます。
この場合、逆変換は周期的な拡張が行われることに注意が必要です。

離散フーリエ変換は、信号が周期的であることを前提としています。
離散フーリエ変換でのデータ数Nは、離散時間信号の周期に当たります。変換の結果は線スペクトルとなります。
N=5000がその信号の1周期なのでしょうか。
もしそうならば、4096にすれば、誤差が大きくなるでしょう。
N=5000で変換すべきです。この場合にも高速アルゴリズムが
存在します。#1の方のとおりです。
FORTRANの時代には、パッケージがありました。
NはN=2^m*3^n*5^k*7^Lだったと思...続きを読む

Qパワースペクトルとは?

パワースペクトルについて説明してくださいと先生に言われました。
全くわからない人に説明するので端的にわかりやすく説明したいのですが誰かできる人はいませんか?ちなみにぼくも詳しいことは全然わかりません。
本などを見ても式があったりしてそれをまた理解することが出来ません。
なんかイメージがわくような方法はないですかね?

Aベストアンサー

スペクトルとは、独立な成分それぞれについての強さをグラフにしたものです。
光の場合、光の種類を色で分類する事ができます。光といっても、その中に青はどれくらい、オレンジはどれくらいとそれぞれの色に応じて強さがあります。
光をそれぞれに分ける方法は、たとえばプリズムがあって、光をプリズムに通すといろいろな色にわかれてみえます。

ニュートンはプリズムを使った実験で有名です。一つ目のプリズムで光を分光し、赤と青の光を残して他の光を遮り、赤と青を二つ目のプリズムやレンズで一つにまとめました。その後でもう一度プリズムを通すと、いったんまとめたのにやはり赤と青しかでてこないのです。これから光の色の独立性(赤や青は、混ざらないものとして独立に扱って良い、ということ)がわかります。

このように色にはそれぞれを別々に扱ってもよいので、色ごとに物事を考えると分かりやすくなります。この色ごとについての強度を「光のスペクトル」、といいます。
強度はふつう「時間当たりに光りが運ぶエネルギー」(パワー)で表すので、この時は「パワースペクトル」です。

こんなふうに物事を自然な「成分(光の時は色)」にわけて考えた物がスペクトルです。詳しくは座標とフーリエ成分の関係について(フーリエ変換について)勉強するといいと思います(電磁場の実空間の振動とフーリエ空間上での振動の対応として)。

スペクトルとは、独立な成分それぞれについての強さをグラフにしたものです。
光の場合、光の種類を色で分類する事ができます。光といっても、その中に青はどれくらい、オレンジはどれくらいとそれぞれの色に応じて強さがあります。
光をそれぞれに分ける方法は、たとえばプリズムがあって、光をプリズムに通すといろいろな色にわかれてみえます。

ニュートンはプリズムを使った実験で有名です。一つ目のプリズムで光を分光し、赤と青の光を残して他の光を遮り、赤と青を二つ目のプリズムやレンズで一つにま...続きを読む

QFFT・PSDの縦軸は何を意味するのでしょう?

加速度計測の結果について、PSD(パワースペクトラムデンシティ)をかけた場合、その縦軸の意味を教えてください。
また、FFTとPSDはどういう違いが有るのでしょうか?
これまでは、周波数の分布のみに着目していました。
どなたか、わかりやすく教えてください。
よろしくお願いします。

Aベストアンサー

一般に加速度センサー信号の出力は電圧です。

縦軸は係数をかけていない状態では#1さんがおっしゃるように計測した電圧の値を示しています。

よって、縦軸に物理的な意味を持たせるのには、電圧と加速度の間の換算係数をかけてやる必要があります。

フーリエ解析は時刻歴波形は正弦波の組み合わせで構成されるという仮定の下で計算を行っています。FFTの結果は横軸で示される周波数の正弦波の振幅を示しています。
電圧と加速度の換算係数をかけてやると、FFTの縦軸はその周波数成分を持つ加速度振幅を示しています。

ここで1つ問題があります。FFTはサンプリング周波数により分解能が変わります。FFTによる周波数分析は正確にいうと、離散値なので、ジャストの周波数のもをだけを表しているのではなく、ある範囲の周波数範囲にある成分を表しています。
このため分解能が変わると周波数範囲が変わり、同じ波形を分析しても振幅が変わります。
これでは分解能が異なるデータ同士は比較できないなどの問題が生じます。
そのため、周波数幅で振幅を基準化して、1Hzあたりの振幅としたものがPSDです。
PSDならサンプリング周波数が異なるデータ同士の比較ができます。

要はフーリエ振幅(FFT)はサンプリング周波数・分解能により変わる値であり、PSDはそのようなことのないように周波数幅で基準化した値という差があります。

なお、2乗表示したものをパワースペクトルと呼び、それを周波数で基準化したものをPSDと呼びますが、PSDは表示方法によって2乗した状態のあたいを表示(パワー表示)するときと、2乗した値の平方根を計算して表示することがありますので、使用する際には縦軸の表示方法については要注意です。

一般に加速度センサー信号の出力は電圧です。

縦軸は係数をかけていない状態では#1さんがおっしゃるように計測した電圧の値を示しています。

よって、縦軸に物理的な意味を持たせるのには、電圧と加速度の間の換算係数をかけてやる必要があります。

フーリエ解析は時刻歴波形は正弦波の組み合わせで構成されるという仮定の下で計算を行っています。FFTの結果は横軸で示される周波数の正弦波の振幅を示しています。
電圧と加速度の換算係数をかけてやると、FFTの縦軸はその周波数成分を持つ加速...続きを読む

Q【Excel VBA】マクロでExcel自体を終了させたい

環境:WindowsXP、Excel2003

マクロでエクセルを終了(ブックを閉じて、アプリケーション自体も終了)させたいのですが、以下のコードではアプリケーションが閉じてくれません。

ThisWorkbook.Close
ExcObj.Quit
Application.Quit

どこか悪いところはありますでしょうか?

よろしくお願いします。

Aベストアンサー

普通に考えれば質問者のコードで上手くいきそうですが
hana-hana3さんの回答にもあるようにThisWorkBook.Closeでコード終了となりますので
Application.QuitをThisWorkBook.Closeの前にもってこないといけません。
Application.Quitはそれがあるプロシージャのコードが全て終わるまで
その実行を保留するちょと特別動作をします。

'-------------------------------------
 Application.Quit
 ThisWorkbook.Close
'-------------------------------------
 
 

Q原波形のノイズ除去方法(FFT、逆FFT)

始めに、僕は数値解析等にはかなりの未熟者です。
今、微量な電流を拾ってそれを200倍に増幅した原波形があるのですが、それには多くのノイズがはいってしまい見にくいんです。それでそのノイズを除去したいのです。
今考えているのはFFTをかけてでてきた周波数を逆FFTを行いノイズを除去しようと考えています。もし他に簡単にノイズを除去できる方法があれば教えていただきたいのですが。
今、自分のなりの考えで行うとしてもその処理の仕方がまったくわかりません。どのソフトを使うのが最適なのかがわかりません。こういう場合で使いやすいソフトってありますか?

わかりにくい説明ではありますが、分かる人がいましたらアドバイスください。

Aベストアンサー

No.2です。

画面全体がノイズだらけになるとしたらデータの処理だけで
ノイズを除去する事は難しいかもしれません。
データの再取得が可能であるならば再取得してください。
その際、あらかじめアナログ回路部分でノイズを除去しておいてデータを取得するようにしてください。
データのサンプリング時にエイリアシングが発生して信号にかぶさった場合には後処理でノイズを除去する事は不可能です。


フィルタについてはアナログ回路で実現するもの、AD変換後にデジタル回路で実現するもの、データ取得後にソフトウエアで行うものなどが有ります。

>多少信号のでている時間、大きさに誤差が出てきてしまう
とのことですが、フィルタを通した場合一般的には時間遅れが生じます。
どれだけ遅れるかはフィルタが決まれば決定されるのでその分補正すれば良いです。
大きさについては適切に設計されていれば大きくずれる事はありませんが
フィルタの種類によっては通過域でゲインが変化しないものと多少の変化があるものとが有るので用途によって使い分けします。

フィルタ処理の具体例を挙げます。
No.3さんの計算と同じものです。
/* FIRフィルタのサンプル */
#define DATA_SZ1000 /* データの個数 */
#define KN2
#define KEISU_SZ(2*KN+1) /* フィルタの係数の個数 */

float input[DATA_SZ]; /* 入力データ 適当な方法で初期化すること */
float output[DATA_SZ]; /* 出力データ */
float keisu[KEISU_SZ] = {1.0/KEISU_SZ} ; /* 移動平均フィルタの場合 */

void fir( float *in, float *out, float *ks ){
int i,j ;
float x;

  for( i=KN ; i<DATA_SZ-KN ; i++ )
    {
      x= 0 ;
      for( j=-KN : j<=KN ; j++ )
      {
         x += in[i+j] * ks[j+KN] ;
      }
      out[i] = x ;
   }
} /* インデントを付けるため全角スペースを使用しています */

もっと具体的には
入力データ d0,d1,d2,d3,d4,d5,d6,d7
係数データ k0,k1,k2,k3,k4
出力データ ______x2______  上下をそれぞれ掛け算したものの合計
x2 = ( d0*k0 + d1*k1 + d2*k2 + d3*k3 + d4*k4 )

出力のx3を求める場合は入力データを1個左にシフトします。
入力データ d1,d2,d3,d4,d5,d6,d7
係数データ k0,k1,k2,k3,k4
出力データ ______x3______ 
x3 = ( d1*k0 + d2*k1 + d3*k2 + d4*k3 + d5*k4 )

これから分かるように x0,x1 を求めるにはデータが足りません。
どこかから(例えばd0で置き換える)データを持ってくるか、無いものとするしかありません。

係数の数を増やせばより高性能なフィルタとすることが出来ます。
係数を決める、つまりはフィルタを設計する方法の説明はここでは難しいです。
次数がそれほど大きくなけれはエクセルでも計算できます。

No.2です。

画面全体がノイズだらけになるとしたらデータの処理だけで
ノイズを除去する事は難しいかもしれません。
データの再取得が可能であるならば再取得してください。
その際、あらかじめアナログ回路部分でノイズを除去しておいてデータを取得するようにしてください。
データのサンプリング時にエイリアシングが発生して信号にかぶさった場合には後処理でノイズを除去する事は不可能です。


フィルタについてはアナログ回路で実現するもの、AD変換後にデジタル回路で実現するもの、データ取得...続きを読む

Q分解能について(フーリエ変換)

フーリエ変換について、時間分解能Δtと周波数分解能Δfについて、
両立は難しいと言われますよね。

サンプリング周波数 f_s
データ数 N

とすると、

Δf = f_s/N

Δt = 1/f_s

だと思うのですが、それならば、両立する条件として、

Δf × Δt = 1/N

でデータ数 N を単に増やすだけで解決すると思うのですが、
何か考え方が間違っていますでしょうか?

詳しい方、よろしくお願いします。

Aベストアンサー

>Δt = 1/f_s = 0.001 s の細かさまで信号は扱えるのではないですか?

いや、例えばバイオリンのビブラートを測定したいとします。
つまり周波数成分の時間変化を知りたい。
この時積分範囲を大きくして周波数の精度を上げようとすると
積分範囲がビブラートの周期を超えて、時間変動が
積分の中に埋もれてしまいます。

つまり、ここでいう、時間分解能とは、積分間隔のこと。
サンプリング間隔はどうでもよいのです。

Q時間領域、周波数領域とはなにか

タイトルそのままですが時間領域、周波数領域について教えてください。
また、その違いについても

Aベストアンサー

時間的に変化する波は、周波数の異なる多数の正弦波の集合(和)として表すことが出来ます。

このためx軸に時間、y軸に波の高さを取ったものを時間領域。
x軸に周波数、y軸にその周波数の波の強さを取ったものを周波数領域と呼びます。

1つの波を時間的変化としてみるのが時間領域、周波数の集まりとしてみるのが周波数領域ということになります。

Qエクセル STDEVとSTDEVPの違い

エクセルの統計関数で標準偏差を求める時、STDEVとSTDEVPがあります。両者の違いが良くわかりません。
宜しかったら、恐縮ですが、以下の具体例で、『噛み砕いて』教えて下さい。
(例)
セルA1~A13に1~13の数字を入力、平均値=7、STDEVでは3.89444、STDEVPでは3.741657となります。
また、平均値7と各数字の差を取り、それを2乗し、総和を取る(182)、これをデータの個数13で割る(14)、この平方根を取ると3.741657となります。
では、STDEVとSTDEVPの違いは何なのでしょうか?統計のことは疎く、お手数ですが、サルにもわかるようご教授頂きたく、お願い致します。

Aベストアンサー

データが母集団そのものからとったか、標本データかで違います。また母集団そのものだったとしても(例えばクラス全員というような)、その背景にさらならる母集団(例えば学年全体)を想定して比較するような時もありますので、その場合は標本となります。
で標本データの時はSTDEVを使って、母集団の時はSTDEVPをつかうことになります。
公式の違いは分母がn-1(STDEV)かn(STDEVP)かの違いしかありません。まぁ感覚的に理解するなら、分母がn-1になるということはそれだけ結果が大きくなるわけで、つまりそれだけのりしろを多くもって推測に当たるというようなことになります。
AとBの違いがあるかないかという推測をする時、通常は標本同士の検証になるわけですので、偏差を余裕をもってわざとちょっと大きめに見るということで、それだけ確証の度合いを上げるというわけです。


人気Q&Aランキング