No.1ベストアンサー
- 回答日時:
マクロが組めるならば、無理にFFTをせずに、DFT(離散フーリエ変換)で良いのかと思います。
また、かなり誤解がある(一般にそうだろうと思いますが)ようなので、
少し難しくなりますが、頑張って読んでください。
FFTと言う名前は有名ですが、DFTと演算結果は同じです。
DFTの演算量を減らして高速化したものがFFTです。
DFTは非常に簡単なループ処理で演算できます。
FFTは結構面倒なので、一からプログラムすると大変です。
私はFFTのサンプルを手に入れるのが面倒なので、
必要に迫られたときネットで検索してDFTの数式を見つけて毎回プログラムしてます。
【これを知っておくと、C言語だろうが、Javaだろうが、エクセルだろうが、何でも移植できる】
プログラムも総ライン数で10行くらいでしょうか。
デジタルデータの周波数変換に関してFFTを頼る必要は全く無いですよ。
【DFTで検索。Σ式がすぐ出てきます。つまり数列の和ですね。表計算で簡単に出力できるでしょう】
FFTは今から相当昔に開発された手法ですが、コンピュータが遅い時代に重宝しました。
しかし、当時のマイコンでもDFTで充分なスピードでしたよ。
今のパソコンのスピードは、当時の1000倍くらいです。
定義をおさらいします。
(1)フーリエ変換
無限数列を前提に処理するもの。周波数変換。
(2)DFT
サンプリングされたデータを擬似的に周波数変換するもの。厳密に周波数変換ではない。
(3)FFT
DFTと演算結果が同じになるように開発された高速演算アルゴリズム。
アルゴリズム名であり、変換としての用語ではない。直交変換としてはDFTが正しい説明。
DFTの演算結果を見ると、周期的に、実数と虚数の絶対値が同じものが現れたりする事に着眼。
最初のほうだけDFTを行い、途中から虚実を入れ替えたり、符号を変えたりして、
残りの演算結果を生成してしまう手法。
FFTが有難いとされていたのは、(3)の説明で分かると思いますが、浮動小数点演算よりも、
符号の入れ替えや、実数部と虚数部の入れ替えの方が早いとされていた時代の話です。
3Dポリゴンのゲームなどは、浮動小数点を使った行列演算を物凄いスピードでやっております。
と言うことは、DFTとFFTの違いにこだわる必要もなくなってきたわけです。
その上で、DFTは普通の人でもプログラムできます。正に初心者向け。
次にサンプリング周期が不規則とありますが、これはディジタル信号処理の感覚ではNGです。
せめてサンプリングレートを落として、一定周期でサンプリングされていることを保障しましょう。
サンプリングしたタイミングがズレると、歪みの様なノイズが重畳されます。(変調がおきる)
さらに、通常のFFTの使い方は、周波数積でのフィルタリングです。
この用途の一つとしてデータ補完があります。
インターポレーションというテクニックです。
これにより粗いサンプリングをしたデータの中間値を補完する事ができます。
これは直線補完や二次補完よりも滑らかな補完になり、自然に見える効果があります。
アニメやイラスト画像には向いていませんので、スプラインとか色んな補完が使われます。
しかし、音声や自然画像(写真)の補完では周波数をつかった補完が効果的で重宝されます。
JPEGやMPEGなどで使われるDCTもこれと似た考え方をしています。
つまり、一度圧縮でデータを削っておいて、補完によって復元するわけです。
そのため、
【FFTする前に別のアルゴリズムで中間値を補完してしまったら、意味が無いです】
中間値を直線的に案分して補完したり、投影法により補完していたのは相当昔(40年以上前)
の話であり、今はDFTを使って補完するほう普通です。(特性が良い)
また、
DFTでは少ないサンプルデータでも大雑把に周波数のカーブを見せてくれるので便利なのです。
例1)サンプルデータは5個しかないが、周波数データは1024サンプル欲しい。
【1024の配列を用意し、先頭5個にサンプルデータを代入。残りに0を入れてDFTをする】
これでOKです。
例2)データサンプルを補完を使って増やしたい(インターポレーション)
元データ:A、B、C、D、 の4サンプルを例に、データを2倍に増やす方法を説明します。
手順1) A、0、B、0、C、0、D、0 と言う0(ゼロ)を間に挿入したデータを作る。
手順2)DFTをかける
手順3)DFTデータを見ると、周期的に同じデータ出てくるので2周期目を虚数部含めて
0(ゼロ)で消す
a,b,a,b,b,a,b,a 見たいな感じに成るので、a,b,0,0,0,0,b,a に作り直す
手順4)IDFT(DFTの逆変換)をする。これも式が違うだけでDFTとほぼ同じ演算方法です。
手順5)IDFT結果を見て、元のデータと似たような変化を持つ数列になっていることを確認する。
例3)歯抜けデータを補完する
歯抜けになった部分を0として例2と同様の処理をする。
この場合サンプリングレートは半分になります。また完全な復元ではありません。
大雑把に復元できた気分になります。
以上ご参考になれば。
非常に丁寧に教えて頂きありがとうございます。
ただ時間ステップが不規則なものに対してどうやって適用できるのか、直ぐには理解できず、また元のデータで例2の処理ができないのです。一応ネット検索してみたのですが、時間ステップが一定なものに対するDFTしかなく、一度DFTを勉強してみたいと思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) エクセル 2つの列にある値の完全一致を抜き出すVBA 15 2022/12/15 03:22
- 数学 「FFTの基本は、DFTはサンプル数Nが偶数なら 2つのDFTに分解できるということ。 分解するとD 3 2022/03/31 21:01
- その他(IT・Webサービス) 高速処理可能な表計算ソフトについて ExcelやGoogleスプレッドシートのような表計算ソフトで、 2 2023/04/29 16:06
- 物理学 フーリエ級数展開をExcelのFFTでシミュレートする 5 2023/07/03 22:02
- Excel(エクセル) Excel ドロップダウンリスト(入力規則)に関してです データの入力規則で元データ79000行のド 3 2023/07/17 10:06
- Visual Basic(VBA) ExcelVBAの複数指定範囲の構文 2 2022/05/26 22:39
- システム CSVファイルのマッピング処理の省力化 1 2022/11/24 00:01
- 会計ソフト・業務用ソフト Excelで売上げデータの中の任意の商品の合計を出したい 3 2023/01/18 18:19
- Excel(エクセル) Excelに関して質問があります。 写真のようなことが起こりました。 解決方法が分かりません。 どな 2 2023/05/30 05:54
- Visual Basic(VBA) 【困っています2】VBA 追加処理の記述を教えてください。 2 2022/08/26 11:42
このQ&Aを見た人はこんなQ&Aも見ています
-
「どうして捨てられないの?」前妻の物を捨てられない男性の心理って?
前妻の物を捨てられない理由に加え、捨てるための手段はあるのかを専門家に聞いてみた!
-
Excelで4096点以上のFFTの方法
その他(Microsoft Office)
-
【エクセル】測定時間がバラバラのデータを統一したい
その他(Microsoft Office)
-
フーリエ変換のデータの補間について
数学
-
-
4
エクセルについての質問です。サンプルレートの違うデータの処理の仕方を教えてください。
その他(教育・科学・学問)
-
5
高速フーリエ変換でデータ数が2のべき乗でない時
その他(自然科学)
-
6
Excel VBAにてFFT
その他(プログラミング・Web制作)
-
7
エクセルでの補間方法について
Excel(エクセル)
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
教えて下さい
-
配列でデータが入っている要素...
-
VBA 空白セルを削除ではない方...
-
【エクセル】測定時間がバラバ...
-
メモ帳(テキストデータ)をExc...
-
多量のSUMIF式を軽くしたい
-
ActiveReportについて
-
データ取得時のエラーに関して
-
この行は既に別のテーブルに属...
-
VBAで「"」[']をエスケープする...
-
VisualBasicでデータ検索プログ...
-
CString型の文字列連結について
-
ACCESSからEXCELに出力する際、...
-
VB6のListの使い方
-
EXCELVBAでSQLserverからデータ...
-
エクセル マクロの組み方について
-
ポケコン PC-E650 の...
-
COBOL数値転記をCOPY句内での仕様
-
LoadPictureしたイメージデータ...
-
Web画面を遷移してもデータを保...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
教えて下さい
-
配列でデータが入っている要素...
-
【エクセル】測定時間がバラバ...
-
メモ帳(テキストデータ)をExc...
-
VBA 空白セルを削除ではない方...
-
多量のSUMIF式を軽くしたい
-
この行は既に別のテーブルに属...
-
S9タイプからXタイプにデータ...
-
Excelのマクロでワードのテキス...
-
エクセルで2つの時系列のデー...
-
Accessで該当データにフラグを...
-
ユーザーフォームのテキストボ...
-
シーケンサにパソコンからアク...
-
EXCELVBAでSQLserverからデータ...
-
[C言語] コメント文字列を無視...
-
VBAを使ってOutlookメール本文...
-
プログラミング python pandas ...
-
VBA 毎日取得するデータを順番...
-
<VB>String→Object
-
カンマからスラッシュに
おすすめ情報