• ベストアンサー

エクセルでのフーリエを使う目的

 エクセルでセンサーからの出力数値を記録した時に発生するノイズというか誤差をなくすためには、フーリエ解析をして、実部と虚部にわけて、実部について絶対値をとって小さい部分を切り捨て、今度はそれに逆フーリエ解析をかけるとよいと聞いてやってみたのですが、全くうまくいきません。そもそも、なぜこのようなことが有効なのか、フーリエ解析が具体的にどのようにこの一連の動作の中で働いているのかわかりません。ノイズを消せるのなら別の方法でもいいのでどなたか教えてくれないでしょうか。わからないことだらけで質問しているため、答えにくい質問ですいません。どうかよろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • maku_x
  • ベストアンサー率44% (164/371)
回答No.2

フーリエ変換というものは、学生以来10数年ぶりです。 一般的にノイズと言うものは、全周波数成分に一様に現れやすく、意味のある信号は周波数空間では大きな振幅を示します。なので、フーリエ変換して周波数空間上で、微小な成分をカットしてしまえば、意味のある信号だけが残り、ノイズが除去される(であろう)と言う仕組みです。演算量的には、例えば 8 タップ程度のデジタルローパスフィルターをかけてやる(信号に乗畳する)方が少なくて済むのですが、アナログのローパスフィルターと違って、カットオフ特性がいびつな曲線になり、ノイズが残ってしまう欠点があります。 > 実部について絶対値をとって小さい部分を切り捨て とありますが、「周波数空間上の複素数としての絶対値(√(実部^2+虚部^2))」を切り捨てるのではないでしょうか? 実部だけを切り捨てても、虚部の値が残っていては、ノイズが除去されないと思いますが。

hachi0415
質問者

お礼

 丁寧な回答ありがとうございます。おっしゃるとおり、絶対値は√(実部^2+虚部^2)でした。おかげで、まだまだ十分ではないにしろ、前よりきれいなグラフが描けました。

その他の回答 (1)

  • rabbit_cat
  • ベストアンサー率40% (829/2062)
回答No.1

実部の絶対値が小さい値を切り捨てる? うーん。何をしているんでしょう。ちょっと微妙な操作です。 多分、ローパスをかけてるorノイズフロアを切り捨ててるってことなんだろうと思いますが。 一番、簡単にノイズを(見た目上)消す方法として、移動平均をとることがよく行われてます。まず、それから試しては。

hachi0415
質問者

お礼

回答ありがとうございます。移動平均はもうすでに試してみました。結果は十分にノイズを消すことができませんでした。

関連するQ&A

  • 2次元データのフーリエ変換とデータ形式について

    画像やエクセルシートのように平面2次元的に広がっているデータがあります。このデータについて2回(2方向)のフーリエ変換を取るのですが、1回(1方向)のフーリエ変換プログラムを2回(2方向)することになると思います。 複素フーリエなので、1回目は複素数型の配列の実部に解析したいデータ系列、虚部はゼロとしてフーリエ変換します。この場合の出力値(複素数配列)で意味があるのは、実部、虚部の配列の前半だけであり、後半は前半の対称とか点対称になっています(前半が分かれば後半がわかるのだから情報量としてはゼロ)。 1回目の出力結果を2回目の変換に渡すわけですが、1回目の出力としての複素数配列のデータはその意味のないところも含めてフーリエ変換に渡すのでしょうか。 フーリエ逆変換で元に戻すときは、”無意味”な対称・点対称成分も含めて逆変換するわけですからその部分も必要ということでしょうか。その方がプログラムとしてはラクではあります。何もしないということなので。 説明がヘタだなと思いますが、主旨を汲み取り頂いて回答して頂けると助かります。 よろしくお願いします。

  • デルタ関数のフーリエ変換について

    デルタ関数のフーリエ変換後の波形について質問です よく見かけるδ(t)のフーリエ変換は1になり、実部で周波数軸に平行の波形になるのはわかるのですが t=aの位置にデルタ関数のあるδ(t-a)のフーリエ変換後は波形はどうなるのでしょうか? 私の計算結果だと実部はcos関数、虚部はsin関数になるのですが ある参考書を見たところ定数になっていて、何が正しいのか不明な状況です。 詳しい方がいらっしゃいましたら、是非ご教授お願い致します。

  • 【エクセル】株価をフーリエ変換し、波を三つ作りたい

    ※実際はドル円ですが、タイトルの文字数制限の関係で株価と表記することにします エクセルで株価の終値のデータ、128個用意したものをFFTしました。 A0=FFTの実部÷128 // 解析する周期2L=128 A1~A127=FFTの実部÷(128÷2) // 解析する周期2L÷2=128÷2 B1=(-1)*FFTの虚部÷(128÷2) // 解析する周期2L÷2=128÷2 振幅A゜1~A゜63(ナイキスト周波数を考慮して前半A゜0~A゜63のうち、A゜0を除いた)についての棒グラフを作成(→振幅スペクトルのグラフ) ※振幅A゜nはフーリエ係数Anと区別するために別の記号を用いた 振幅スペクトルで大きいほうから3つ(取り出し方はVLOOKUPで取り出したとする)を取り出し、それぞれの波を株価グラフ(折れ線)上に描きたいのですが、どうすれば良いのでしょうか? そこだけが分かりません。 画像が荒くてすみません。

  • 周波数解析をエクセルツール『フーリエ解析』で実施したいのですが・・

    周波数解析をエクセルツール『フーリエ解析』で実施したいのですが・・ 時刻歴を持った波形をエクセルのフーリエ解析にかけたところ以下のような結果が出ました。 時刻(s)波形(風速)(フーリエ結果) 0 0 4964.547892 0.01 0.016148 162.934386092482+757.485796541738i 0.02 0.024223 -176.671853947744+679.108499109482i 0.03 0.032297 -38.1198577747876+304.999881074942i 0.04 0.040371 -33.7184553866481+283.069540754i 0.05 0.047921 67.2878230094194+268.189434427773i 0.06 0.055471 -5.3340068659851+181.755877831686i 0.07 0.063021 43.7700366445313+188.325607658826i 0.08 0.070571 95.1628904739282+115.524911946043i 0.09 0.078121 79.1610244918527+286.809861194846i 0.1 0.084849 -20.9326884388047+207.486443103952i 0.11 0.091578 -10.0874722910491+176.517532576085i この場合の結果をパワースペクトル密度にしたいのですが, 一番上が定常分で,事項以降が ωt,2ωt,・・・nωtということに なって,それぞれの実部^2+虚部^2の平方がスペクトルになると思いますが これを横軸周波数のおなじみのグラフにするには横軸の周波数はどのよう に考えればいいのでしょうか。 (たとえば2ωtの項の場合の周波数はいくらになる?) また,風速のパワースペクトルの単位はどのようになるでしょう。 基本的な質問だと思います。とても恥ずかしいのですが,ご教授いただけますか。 もしかすると根本的な間違いをしている気もします・・

  • 複素数と実数が混在するように見える式について

    時系列解析で、自己相関係数のフーリエ変換がパワースペクトルになるというウィナーキンチンの関係というものがあります。その式では複素数が含まれているので、実数を入力として複素数が含まれている式で計算された出力結果は普通は複素数ということになります。しかし、自己相関係数は実数の系列で、パワースペクトルも実数になると思います(実部と虚部の2乗和なので)。実数に複素数を絡ませて変換して出てきたものが実数になるということになってしまいます。ここが理解できないのですが、どのように考えていくのでしょうか。絶対に虚部がゼロになるから、ということなのでしょうか。 一般にFFTによるスペクトル変換では実数列は複素数の実部にあてて変換する(例えば虚部はゼロにしておくとか)ので複素数から複素数を入出力するということで理解できます。 実際にプログラムでの処理を考えているので概念的な説明だけでは実装することできません。 なお、私は常に標準的なFFTでフーリエ変換しているので複素数での入出力ということなので実数となる系列では先に進めないという感じなのですが。もし出力が実数ということになったとき実部がそれ、虚部がそれ、実部と虚部の2乗和がそれ、というのならわかるのですが。 よろしくお願いします。

  • フーリエ変換による周波数解析についてなのですが

    フーリエ変換による周波数解析についてなのですが 時々刻々と微小な変動がおこる測定量をセンサを用いて測定し、AD変換したのちにマイコンに取り込んだとします。 しかし画面上に表示される測定値の変動が本当に現象によるものなのか、それともノイズによるものなのか分からず、フーリエ変換を行い、周波数解析を行おうとおもったのですが フーリエ変換によって求められるパワースペクトルは振幅の二乗ですよね? ノイズによる振幅と現象による振幅がほぼ同じくらいのときは フーリエ変換を行っても何もわからないのでしょうか?

  • 2次元データの複素フーリエ変換するコードの作成

    数値計算等の2次元や3次元の空間データ(実数)をFFTによって複素フーリエ変換する実際のプログラム化についてお尋ねします。プログラムの実装ということなので実際的な質問で長文になっています。すみません。 まず、手持ちに1次元のFFTプログラムがあるということを前提とします(逆フーリエ変換すると、元の実数の系列が出ることは確認済のコード)。そして2次元配列の実数のデータがあるとします。この2次元のデータを2次元の複素フーリエ成分に変換することが目的です。(私の分野では波数空間への展開ということになり、複素数ですから位相情報も含まれることになります。) 例えば、x,y方向に16x16のデータあるとすると、 do j=1,16 ここでjを固定してi:1~16の実数データについて1次元のFFTをかける。 このとき、FFTにかける16個の実数データを複素数の実部に入れて、虚部はゼロとする。 FFTの出力も複素数となっている。 ここで出てくる複素フーリエ変換の結果は実部・虚部で前半(0~7)であり、後半(8~15)はその対称とか点対称(符号が逆)とかになっている(虚部をゼロとしているから)。それを複素数の2次元配列として保存する。 enddo 次いで、 do i=1,16 iを固定してj方向にFFTをかける。このとき、FFTに放り込むデータは上記の複素フーリエ変換の出力結果である2次元データを使う。具体的には複素数の2次元データをj方向の1次元の複素数配列にコピーしてFFTをかけて、その出力結果を新たな2次元配列の複素数に保存する。 enddo この結果、得られた2次元の複素数のデータが、私の所望のデータである、ということです。 式が指し示すとおりのことをすればいいのだ、ということに尽きるのだろうと思いますが、アルゴリズム的にアンバランスのように見えてこれでいいのかなと思えてしまいます。最初に虚部をゼロにするというようなこととかです。そのため確信が持てません。また、結果を見てもわかりにくい面があります。 このような考え方で実装するということいいのでしょうか。全く間違っているでしょうか。もしその場合、考え方の間違いを指摘して頂けると助かりますが(根本的な間違いだったら指摘しようがないということにもなりますが。) また、例えば、始めから実数の2次元配列をすぐに2次元複素数の実部に入れて、虚部をゼロとしてそこからコード方がすっきりするのかなと思いますが。 この辺が確定すると、3次元は同じことということになります。 サンプルコードがネットに出ているという面もありますが、自分でやる方が組み込みやすいのでお尋ねしました。 長文で申し訳ありませんが、よろしくお願いします。

  • fortranでフーリエ変換→パワースペクトル算出

    プログラミング全くの初心者です タイトル通り、任意のデータ(100個ほど)による波長をフーリエ変換し、 そのパワースペクトル算出をfortranで行いたいのです。 (横軸時間、縦軸大きさのデータです) フーリエ変換の理論上の原理、およびパワースペクトル(=虚部の二乗+実部の二乗) という定義は、教科書から理解できたのですが、 実際に任意のデータに対してフーリエ変換を施す、となると、一体全体何からはじめていいかわからないのです。 そもそもフーリエ変換をしてデータを補間し、100個をさらに分割して増やさなければならないと思うのですが、(違うかもしれませんが) 何をしたらいいのかわからず途方にくれています。 フーリエ係数を求めるのに積分が出てきますが、これもプログラムでどう表現していいのかわかりません 無教養で申し訳ありません。 どうにもこうにも調べ方がわかりませんでしたので質問させていただきます どなたかヒントをお願いします・・・・・

  • 実部画像と虚部画像の意味

    ある画像について、2次元の離散フーリエ変換を 実施し、パワースペクトル画像と実部画像と 虚部画像が得られました。 パワースペクトル画像というものは、 その画像がどのような周波数を持つのかが 分かる画像だということは分かったのですが、 実部画像と虚部画像の意味、またはこれらの画像が 表している情報とは何なのかが分かりません。 質問の仕方が悪いのかもしれませんが、 一般的にフーリエ変換した時に得られる 実部の画像と虚部の画像にはどのような意味が あるのでしょうか? ご存知の方がいましたら、お教え願います。

  • フーリエ変換の振幅について教えてください。

    エクセルアドインを使って下記サイン波をフーリエ変換しました。 振幅3mm、周波数4Hz、サンプリング周波数256Hzの波形であり、 つまり、フーリエ変換したい波形は3×SIN(2×PI()×4)です。 アドインでフーリエ変換を行い、出てきた複素数の絶対値つまり√(実部^2+虚部^2)を計算すると3を示すと思っていたのですが、実際は周波数4Hzで384 という値になりました。 周波数分析して周波数4Hz時の振幅が3となるようにするには振幅はどう計算すればよいのでしょうか?またいろいろな振幅や周波数の混ざったランダム波でも各周波数での振幅を求めるにはどう計算したらよいのでしょうか?素人ですが教えてください。