フーリエ変換について教えてください

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
よろしくお願いします。
2デフォルトの名無しさん:2001/08/04(土) 21:56
どこまでわかっててどこからわからないのか、教えてください。
助言はできると思います。
3デフォルトの名無しさん:2001/08/04(土) 21:58
Fourierってフランス人らしいのですが、
実は日本の時田重盛であると聞いたのですが、本当ですか?
4デフォルトの名無しさん:2001/08/04(土) 22:06
 ここがネタスレとして荒れるか、バカ丸出しの1を無視して
良質スレになるか、見ものだな。
51:2001/08/04(土) 22:06
>>2
とりあえずプログラムには使えるのですが理論はほとんど理解して
ません。理論をお願いします
6デフォルトの名無しさん:2001/08/04(土) 22:19
フーリエ級数は?
7デフォルトの名無しさん:2001/08/04(土) 22:27
f(x) = \frac{A_0}{2} + \sum^{\infty}_{\mu = 1}[A_{\mu} \cos \frac{2\pi \mu x}{L} + B_{\mu} \sin \frac{2\pi \mu x}{L}]
8デフォルトの名無しさん:2001/08/04(土) 22:28
>>1
>>7 が理解できないようなら、勉強しても無駄です。
9デフォルトの名無しさん:2001/08/04(土) 22:32
f(x) = \frac{A_0}{2} + \sum^{\nifty}_{\mu = 1}[A_{\mu} \cos \frac{2\pi \mu x}{L} + B_{\mu} \sin \frac{2\pi \mu x}{L}]
10デフォルトの名無しさん:2001/08/04(土) 22:51
>>1
>>7が理解できないようなら,いきなりフーリエ変換を勉強するのではなく,
フーリエ級数からはじめてください.
11デフォルトの名無しさん:2001/08/04(土) 22:55
一番はじめは、
ヒッポファミリークラブ、フーリエの冒険
ぐらいでいいと思う。
http://www.lexhippo.gr.jp/sh.html
12偽ASIMO:2001/08/04(土) 22:58
>>11
この本は分かりやすくていいよね
大学の時に買ったが優しく解き明かしている
パッと見た目は子供向けみたいだが
13デフォルトの名無しさん:2001/08/04(土) 23:05
>>11
なんか面白そうだな。
14not 1:2001/08/04(土) 23:14
>>7
フーリエ級数の式は知っててもこの書き方では意味がわかりません。
Texかなにかのマクロで書いてるのでしょうか?
それとも私のブラウザが対応してないだけ??

>>5
プログラムで使うってDFT(離散フーリエ変換)のこと?
それともFFTから?もっと戻って数学的なフーリエ変換から?
15デフォルトの名無しさん:2001/08/04(土) 23:37
g(k)=∫exp(-ikx)f(x)dx
f(x)=∫exp(ikx)g(k)dk/オッパイ2個
16デフォルトの名無しさん:2001/08/05(日) 15:47
たぶん1さんは何を聞いたらいいかも判らない段階なんだろなあ・・

プログラムで扱えるのは数値的にはDFTだけ
数式処理なら別だけどね

FFTについては素数スレにソースがあるけどFFT自体は簡単だよ
17デフォルトの名無しさん:2001/08/05(日) 16:35
フーリエ変換ってどんな方面で活用されてるの?
18デフォルトの名無しさん:2001/08/05(日) 16:42
>>17
信号処理全般
19デフォルトの名無しさん:2001/08/05(日) 16:44
>>17
CD
20デフォルトの名無しさん:2001/08/05(日) 16:44
>>18 信号処理では理論面は別にして実際に使ってるのはDFT だろう

フーリエ変換自体は理論的なもんじゃないのかな
21デフォルトの名無しさん:2001/08/05(日) 16:49
フーリエ変換を使うと なんと今まで解けなかった微分方程式もほらこの通り
ラプラス変換では今ひとつスッキリしなかったアナタにもお勧めよ
22デフォルトの名無しさん:2001/08/05(日) 19:08
フーリエ変換することで何が変わるんですか?
23デフォルトの名無しさん:2001/08/05(日) 19:09
表現が時間空間から周波数空間に変わる。
24デフォルトの名無しさん:2001/08/05(日) 19:26
あれは周波数空間というより回転空間という感じだけどなあ
25デフォルトの名無しさん:2001/08/05(日) 19:28
>>17
地震屋さん
26デフォルトの名無しさん:2001/08/05(日) 19:30
DFTならπの計算や素数の計算にも
27デフォルトの名無しさん:2001/08/05(日) 19:40
>>17

 画像・音声の不可逆圧縮。
28デフォルトの名無しさん:2001/08/05(日) 19:51
>>27 それはコサイン変換が多いような・・・
29デフォルトの名無しさん:2001/08/05(日) 20:32
どうして変換するといいんですか?
30デフォルトの名無しさん:2001/08/05(日) 21:17
>>29

関数積=たたみ込み がフーリエ変換すると値積になる。これに尽きるんじゃない?

最速の素数判定アルゴリズム 
http://piza2.2ch.net/test/read.cgi?bbs=tech&key=993457354
で普通の掛算に比べてFFTを使うとどれだけ速くなるか判るだろう
31デフォルト:2001/08/05(日) 21:21
32にゃ:2001/08/05(日) 21:44
>>30
掛け算が足し算になるlogみたいなもんと考えていいか?
33デフォルトの名無しさん:2001/08/05(日) 23:41
>>32
そうなんですか。じゃあたくさんの計算に使うといいんですか?
34デフォルトの名無しさん:2001/08/06(月) 06:33
DFTにはFFTという高速演算法があって、だからDFTは実用になる

たたみ込みが値積になる為、たたみ込み的演算をFFTして
値積で処理して逆FFTする方が演算コストが低くなるのだ。
  サウンドや画像関係で次数の高いフィルターを実現する事に
  πや素数の計算で長多桁の積(これはたたみ込みの形になる)類に
 利用されている

 たたみ込みというのは、いわゆる線形フィルターは全てたたみ込み
 演算に変形出来るから、この特徴は非常に応用範囲が広い

その他に、周波数という指数に分解出来るというメリットがある
 同じ周波数分解の仲間であるコサイン変換もDFTから計算した方が
 FFTが使える分高速になる

直接的には、周波数分析表示(スペアナ)とかに使われる
 例えばステレオ12素子スペアナを フィルターで実現するより
 FFTを使った方が数倍高速、しかも分解能がいい
 (FFT使わなくてもマトモに計算しなけりゃいいんだけどさ)
35デフォルトの名無しさん:2001/08/06(月) 08:27
とりあえず、 >>11 の本を買って読めばだいたい分かるとおもう。
ちょっと前だけど、秋葉原のブックタワーの 3Fの数学のところにあったよ。
36デフォルトの名無しさん:2001/08/07(火) 00:30
畳み込み
値積

ってなんですか?
37デフォルトの名無しさん:2001/08/07(火) 00:43
ヒッポの本読んだけど、わかった気にならせるような解説なんだよな
結局使えてなんぼだろ やり直しの工業数学でやり直せ
38デフォルトの名無しさん:2001/08/07(火) 04:56
ネタスレの予感
3934:2001/08/07(火) 07:41
いや 上で使ってたから値積って用語は定着してるのかと思ったんだが?

たたみ込み積に対して 値同士の積という事でしょ?
行列積やベクトル積はたたみ込み型の積
40デフォルトの名無しさん:2001/08/07(火) 15:28
やり直しのための工業数学
http://www.cqpub.co.jp/hanbai/books/33181.htm

信号解析のための数学
http://www.morikita.co.jp/mokuji/7852.html
41デフォルトの名無しさん:2001/08/08(水) 01:48
>>37
なつかしいなあ。。ヒッポ本。

おれ、物理学科卒なのに、量子力学の冒険読んで
初めてリョウリキが少しわかったよ。

フーリエもいいらしいね。

ヒッポのサイトってある?
42デフォルトの名無しさん:2001/08/08(水) 01:49
11に書いてあった。
ウツだし
4336:2001/08/08(水) 04:58
>39
ありがとう。

つまり、
畳み込み=各成分(配列)の掛け算の足し合わせ
値積 = ただの掛け算

ってかんじでいいですか?

情報系専攻じゃないので。やってる数学用語とか違うのかな。
44デフォルトの名無しさん:2001/08/08(水) 07:05
もしかしてみんな頭いい?
45デフォルトの名無しさん:2001/08/08(水) 09:12
畳込みは
c[x]=Σ a[x-i]*b[i]
みたいな感じじゃないのかな?
46デフォルトの名無しさん:2001/08/10(金) 00:52
全ての信号は


Σ{ A[n]*sin( 2πn )+B[n]*cos( 2πn ) }
n

で表す事ができる。以上。
47デフォルトの名無しさん:2001/08/10(金) 00:54
>>46
ぜんぜん違うじゃん(w
4823区:2001/08/10(金) 01:04
Excelにも簡単な解析ツールがついている。
49デフォルトの名無しさん:2001/08/10(金) 08:41
定期age
50デフォルトの名無しさん:2001/08/10(金) 08:44
全ての信号は



Σ A[n]*x^n
n=0
で表現出来るか?
51デフォルトの名無しさん:2001/08/10(金) 08:59
全ての信号は

ΣA[n]*e^(s*n)

で表す事ができる。以上。
52デフォルトの名無しさん:2001/08/10(金) 17:00

C+Σ { A[n]*Sin(2πn)+B[n]+Cos(2πn) }
n

じゃなかったっけ?
53デフォルトの名無しさん:2001/08/10(金) 17:17
うろおぼえだけど

全ての信号は
2πk/nの周期を持つ正弦波と余弦波の和で表す事ができる(kは任意の定数)

x(t) : 時間tにおける信号

      ∞
x(t) = C+Σ { A[n] sin (2πkt/n) + B[n] cos (2πkt/n) }
      n=1

Cは直流成分

じゃなかったっけ
54デフォルトの名無しさん:2001/08/10(金) 17:42
>>53 その式の k はナンダイ?

その式は kが変数で n が定数だろう。
そして周期 n の周期関数はという条件がつくのでは?
55デフォルトの名無しさん:2001/08/10(金) 18:23
こんなふうに考えたら面白いかな?

 時間Tだけ遅延する演算を D(-T)と表現する。
 0,1,2,3,4 てな数列にD(-1)をかけると
1,2,3 と一つずれる訳だ。
 例えば差分は D[1]-D[0] と表現出来る
 遅延するという性格から D(A+B)=D(A)*D(B)だろう。
  つまり、D(-T)は指数関数の延長上にありそうな気配が漂う
  だから D(t)=e^s*t と表現してみよう。
  sは今はどんな数か判らないけどいいじゃないか。

 また、時間Tの所に大きさ1の信号がある状態もD(T)と表現しよう

 この表現を使えば全ての 離散信号を ΣA[n]*D(n) と表現出来るぞ
56デフォルトの名無しさん:2001/08/10(金) 18:25
>>51
s∈{Complex} なら、それはラプラス変換では?
s=-j*t, t∈{Real}ならそれだとDCレベルを含む信号は表せない。
57デフォルトの名無しさん:2001/08/10(金) 18:27
連続関数だって ∫f(t)*D(t)*dt と表現出来るぞ

そういやD(t) = e^s*t と表現してみようって話があったな

あれ? これってフーリエ変換ともソックリ?

ソックリって事は同じ規則で動くって事だぞ!
58デフォルトの名無しさん:2001/08/10(金) 18:39
>>57
Σか∫かは表現する関数が離散か連続かではなくて、
周期的か否かに依ると思われ。
59デフォルトの名無しさん:2001/08/10(金) 18:45
ところでFFTって、
上のsやらtやら信号やらがが2次元以上のベクトルのときにも
OKなの?
SSE instruction使うと早く計算できる?
# プログラマ板向けに軌道修正を謀る。
60デフォルトの名無しさん:2001/08/11(土) 08:07
>>58
ここはラプラス変換(ミクシンスキースタイルの演算子法?)を導いて
そこからフーリエ変換への類似へ言及しようとしてるんでしょ?

>>59
FFTはスタイルだから 原理的には離散的な処理には応用可能

SSE については、複素数積の段階で使おうと思えば使える
x'=c*x-s*y
y'=c*y+s*x
61デフォルトの名無しさん:2001/08/11(土) 19:17
>>60
どこに話を持っていこうとしてるか見えてなかった。
ラプラス変換とフーリエ変換の類似って。
物理卒だからラプラス変換はフーリエ変換の単なる応用の一つ
って感じだな。厨房的に表すと Fourie>>Laplace。

>>55みたいに空間(あるいは時間)の並進対称性から、
指数関数を使いたくなる発想は一緒だけど、
どうせなら正規直行関数系で表現したくなる。

けど、現実の問題は境界条件とかつくから
ラプラスがはまる場合が多いんだよね。
フーリエ変換は周期的、または対象に比べてだだっ広い空間
(物理にはありがちなんだが)でないと使えない。
FFTも実際には大抵窓関数とセットにして使われてるよね。
62デフォルトの名無しさん:2001/08/12(日) 19:55
FFTを窓関数とセットにする場合は、FFTにある周波数分析という面を使う場合だよね


>>55

D(t)=e^(s*t) もいいけど Z^t と表現してみるのが この板では本流じゃないかな?
63デフォルトの名無しさん:2001/08/26(日) 01:11
>>56
どんな数字でも0乗は1だからDCもOKじゃない?

>>61
私は逆に、フーリエ変換はラプラス変換のサブセットと理解してました。
∫f(t)*e^st dtで、sが実部、虚部両方を持った複素数のときが
ラプラス変換で、虚部のみのときがフーリエ変換だから。

歴史的にフーリエ変換が先だから、ラプラス変換は応用のひとつ(拡張)
でフーリエ変換の方がえらいというのなら...そう思います。
#わたしゃ電気、制御系なんで、ラプラスの方が親しみが。
64デフォルトの名無しさん:01/08/26 18:35 ID:dfW079aM
既に
>>1
には理解不能な話題になっていてもう見ていないかもしれないが、
そんな
>>1
にはこれをお勧め。
ttp://www.intel.co.jp/jp/developer/vtune/perflibst/index.htm
使うだけならすぐ使えるしIntelの各CPU向けにそれぞれ最適化されているので
速度も十分。マニュアルも親切で、読めばFFTとはなんぞやというのがわかるかも。
65nanasi:01/08/31 01:53 ID:MTRYrRJs
DCTてのは、ふるいっつうか、棒倒し(砂山に棒切れを差すやつ)だと思うん
だな。最初の取り分ほど量が多く、後ほど少なくなる。

この手のことは貴家センセの本に詳しいでっせ。
フーリエの冒険よりセンセの本のほうが、何故DCTを使うのか詳しく書かれて
いる。(正確に言えばDCTUですな)

まあ、DCTは圧縮の効率を高めるよう、データに偏りを発生させるために用い
るいるのだと思えばいいのかな。
66デフォルトの名無しさん:01/09/01 05:34 ID:jNF.zKm2
>>65

エンディアンの話題でも会った? MPEGのビットストリームがどうこう言ってた人。
DCTでスペクトル解析するのは邪道かな?
DCT関連はよく使われるので、よく練りこまれた高速なライブラリがあって便利だから使ってみたんだが。

2の累乗以外の幅でも解析したいので、FFTではなくDFTにしたいんだが、
DFTだと重いのでDCTで妥協してしまったのだが、ダメかな?
67デフォルトの名無しさん:01/09/01 08:49 ID:RDsBmczU
>66 解析したいのが周波数分析なら、
 窓関数をかけた後、単純に2の累乗に足りない分ゼロで埋めておけばOK

DFTもDCTも同じだと思うんだが?
 単に複素数だから重いというなら実数データを1/2幅のDFTでする方法を使えばいい
68nanasi:01/09/01 09:29 ID:4vAZTrpI
>66
周波数解析はやってないからわかんない。必要なことは勉強するけど、理学の
勉強じゃなくて工学の勉強だから、ご都合主義。

局所領域の解析なら、精度はも一つでもウェーブレットになるんでしょうな。
画像の特徴量つうかパラメータ化?ってところに興味があるからウェーブ
レットは勉強するけど、それ以外は知らん。しかも頭に残ってない。

DCTを用いるケースで言えば、ある画像とその画像を180°回転させた画像を
区別できるってことかな。フーリエだと結果が同じ画像になってしまって都
合が悪い、てな話を教授としたことはあるが…。

解析対象の性質に合ってれば、別に何使ってもいいんじゃない? 理学の人から見ると
この手の解析はどのみちインチキに見えるらしいし。
69デフォルトの名無しさん:01/09/01 20:31 ID:jNF.zKm2
>>67
>>68
レスサンクス。
プレイヤーのスペアナ表示に使いたいだけだから、嘘っぽいものでも構わないんだ。
例えば、160pointで解析したい場合、160pointDFT(orDCT)するのと、
256pointになるように0を埋めて、FFTするのとどっちが速いかな?

実際に計測しろと言われそうだが、なにぶんWindowsなものであてにならん。
システムモニタの負荷ではほとんど変わらないんだが、
負荷のうちのほとんどは計算ではなく描画で使ってるみたいのなのでなんとも言えん。

計算自体はかなり軽いので、アナライザ関数のとこに計測ルーチン埋めて
毎回の実行時間を記録してみても誤差が大きすぎてよくわからん。

つーかそれくらいの差気にしなくてもよいのかな?
70デフォルトの名無しさん:01/09/01 22:12 ID:cqAA7v/U
>例えば、160pointで解析したい場合、160pointDFT(orDCT)するのと、
>256pointになるように0を埋めて、FFTするのとどっちが速いかな

ステレオなら複素数に実部虚部を使う2実数のFFTが使えるので 256FFTが高速です

さらに、周波数分解能の上でも256FFTが上でしょう

実際160点DFTだと低周波の分解能はまったく足らないのでは?
それとも低周波だけBPFかQの高いLPFで処理してる?
71デフォルトの名無しさん:01/09/01 22:47 ID:jNF.zKm2
>>70

解析結果を周波数軸はリニアなままで表示してるから、
表示領域の横幅に依存する感じ。
対数スケールで表示するなら、確かに不足するけど。

複素数のFFTって使い方がよくわからないんだけど、
例えば左チャンネルを実数部、
右チャンネルを虚数部に入れてかけるのかな?
そうすると、出てきた結果はどう扱えばいいの?

あと、モノラルの場合って、実数部に入れて虚数部0にするの?
それとも実数部と虚数部に同じ値を入れるの??

スマソ、漏れ専門卒でその辺の数学やって無いからわからん。
必要に駆られて実戦でやってるだけだから。
72デフォルトの名無しさん:01/09/01 22:50 ID:/fV/gw3o
なぜか というか当然かもしれないけど この板の素数スレに詳しい
http://piza2.2ch.net/test/read.cgi?bbs=tech&key=993457354

ソースへのリンクもあるから追いかけてみたら?
73デフォルトの名無しさん:01/09/01 22:54 ID:/fV/gw3o
上のスレの 200 前後からがFFTについて書いてあって

203 に実数2組のFFTを 実部虚部に与えてした場合について書いてある
74デフォルトの名無しさん:01/09/01 23:45 ID:jNF.zKm2
上の例の160pointの場合を256pointFFTで処理するように変えてみた。
遅くなった。。。

FFT部分は確かに速くなってるのだが、
表示領域が160バンド分しかないため、256バンドでてきた結果を
160バンドに縮小(?)する部分が重いらしい。
結果として全体では重くなってしまった。
大人しくDCTでやってろってことかも知れない……
75デフォルトの名無しさん:01/09/02 10:22 ID:6hJ7KTEI
160点の(何も考えない)DCTと 256点FFTなら3〜5倍くらい高速になる筈なんだが?

いっそ512点に増やして周波数分解能をあげて3点毎に合計して上下5点を捨てるとか
76デフォルトの名無しさん:01/09/02 13:36 ID:J64zStzc
>>71
電波の場合は、虚数部と実数部を取り出す
回路をとおすらしい
オーディオの場合はデジタルフィルタを使うらしいが
おれも、よく分からん
77デフォルトの名無しさん:01/09/02 15:37 ID:4.l/Qws.
>>75

今回例にあげたのがたまたま160pointなだけで、
最悪1pointから(画面の表示サイズの制限から)
1960pointぐらいまで可変するのよ。
だから、
>いっそ512点に増やして周波数分解能をあげて3点毎に合計して上下5点を捨てるとか
こういう処理には出来ないのよ。
2の累乗からそれ以下のいくつにでも縮小できる汎用的な変換関数になっちゃう。
一応、今回は表示位置0〜160を0〜256にマッピングして、
そうすると小数位置になるから、前後の値からコサイン補完して表示してみたのだけど。
線形補完ならもうちょい速いかな。
どっちにしろ、SSEとか適用しにくいのであんまり使いたくないタイプの処理だ。。。
DCTとFFTがSSE最適化されてるから遅くなっただけで、
SSE使えない環境ではちゃんと速くなるみたい。
78デフォルトの名無しさん:01/09/02 15:44 ID:hKBCqfHs
そういう事なら2048サンプル毎に2048点FFT固定にして周波数分析した
方がどう考えてもいいんじゃないの?
 
79デフォルトの名無しさん:01/09/02 15:47 ID:4.l/Qws.
あ、あとFFTだとパワースペクトルの計算もあるからかも。
sqrt(re*re + im*im);
になるでしょ?(C言語風表記)
DCTだと片方しか出ないから、絶対値取るだけで済む。
80デフォルトの名無しさん:01/09/02 16:10 ID:hKBCqfHs
>>79 なんか変だよ

 cos( (2n+1)kπ/2N )

みたいな式だから パワーを計算するなら やっぱり hypot は必要だよ
81デフォルトの名無しさん:01/09/02 16:59 ID:fY9Tvgc.
む?
漏れが見た本にはそう書いてあった……
正確な式きぼーん
82デフォルトの名無しさん:01/09/02 19:32 ID:0GEkTz1s
つまりさ、
実数を与えた FFTの場合、 re, im は それぞれ偶関数、奇関数になる
だから n=0 と n=N/2 でない nについて
  hypot(re[n],im[n]) = hypot(re[N-n],im[N-n])

コサイン変換もパワーが必要なら hypot( A[n] ,A[N-n]) (もちろんn=0 と n=N/2は除く)
 と求めなければいけない

つまりパワーの数は N/2 に減ってしまう
83デフォルトの名無しさん:01/09/02 19:35 ID:0GEkTz1s
82の話は パワーを 周波数強度という意味に使った場合の話ね

その本に書いてあったパワーは、たんにcos成分の強度という意味じゃないのかね
>>81
8481:01/09/04 21:51 ID:rccG4HwI
ね、その時は『ふーん、そうなんだ』って軽く流してしまったんだけどさ、
よくよく考えてみたら、hypot(re,im)==sqrt(re*re+im*im)ぢゃないかヽ(`Д´)ノ

あってんぢゃん、俺の言ってた(本で見た)ことヽ(`Д´)ノ

>_hypot 関数は、2 辺の長さ x と y が与えられると、
>直角三角形の斜辺の長さを計算します。
>_hypot 関数の呼び出しは、
>( x の 2 乗 + y の 2 乗 ) の平方根を計算することに相当します。
8580:01/09/05 07:45 ID:mNqbuqRc
いや、だからさ、FFTでもコサイン変換でも、両方hypotが必要なのであって
 コサイン変換なら絶対値でいいって所が違うよって意味だよ
86デフォルトの名無しさん
話の筋には関係ない が
>hypot(re,im)==sqrt(re*re+im*im)
hypotはre*reの計算でオーバーフローをおこすような
場合でもちゃんと計算してくれるのではないでしょうか