• 締切済み

MATLABによるFFTと位相スペクトルについて

純粋な正弦波信号 y=sin2πft ただし周波数f=500MHz をサンプリング周波数2.5GHz,サンプリング数128,256,512,1024の四パターンMATLABでFFTし、パワースペクトルと位相スペクトルを求めました。 結果、パワースペクトルは予想通り500MHzでピーク値をとったのですが、位相スペクトルは各サンプリング数ごとに全く違う値を取りました。 というわけで、 (1)理論上、正弦波の位相スペクトルはどのような値になるのか (2)なぜサンプリング数ごとに位相スペクトルの結果が大きく変わったのか この二点をご教授ください。よろしくおねがいします。

みんなの回答

  • ninoue
  • ベストアンサー率52% (1288/2437)
回答No.1

サンプリング周波数と信号周波数の比が小さく、整数倍の関係になっている為に問題が発生しているのだと思われます。 サンプリング周波数が信号周波数よりもずっと高いと問題は少ないでしょう。 或いはその比が数倍程度でしたら、整数倍の関係に無い方がサンプル数の増大につれて位相も次第に正しい値に収斂していくのではないでしょうか。 理論上どうなるかは、理論通りプログラム上でftの周波数でy=sin2πftの関数を発生させ、その5倍の周波数でサンプルしてFFTを求める事しか思いつきません。 このサンプルの関係では、5点毎に1サイクルの信号のサンプリングが繰り返されるので、128,256,512,1024サンプルでは、最後に3,1,2,4サンプルの分が不完全周期分として残り、これが残留位相分として変換されて現れるのではないでしょうか。 (なお質問は数学カテゴリの方が適しています)

関連するQ&A

  • matlabでのFFT

    matlabで信号処理を学んでいます。現在はFFTを使って信号処理をしているのですが、パワースペクトルを見るとDC成分だけピークがたってしまう状態です。原因としては何が考えるのでしょう。 どなたかご教授願います。

  • FFTの結果ついて

    ある50kHzの信号を1024点FFTにかけ、横軸周波数、縦軸をパワースペクトルに変換しました。  しかし、0Hzのところにとても大きな値が出力されました。 3Hzの正弦波を入力した際にはちょうど3Hzのところにピークが現れたので計算は合っていると思うので、原因がよくわかりません。   後、スペクトルをdb表示にしたいのですが、計算方法がわかりません。 申し訳ないですが、どなたか教えて下さい。

  • 振幅スペクトル、位相スペクトル→原信号の導出法

    matlabにてある信号をfftした結果から振幅スペクトル、位相スペクトルをそれぞれ求めたのですが、その2つから元の信号を得る方法を教えてください。

  • MATLABによるFFT

    MATLABのfft関数を使用して,フーリエ変換してPSDを算出すると,スペクトルの周波数領域での積分値が元データの二乗平均値と一致しないのですが,原因は何が考えられるでしょうか?FFTの出力がフーリエ係数であれば一致するはずなのですが.

  • FFT/スペクトルに関して

    エクセルにてFFTを勉強しているのですが、FFT後に出てくる縦軸のスペクトルとは何でしょうか? 時間軸×音圧 ⇒ 周波数×音圧に変換したんですが、この縦軸は音圧ではなくスペクトルというものだと理解しています。このスペクトルが示すものは単にその周波数の成分が強い傾向にあるというのを示しているだけで、その周波数の音圧がいくらというのを示しているのではないのでしょうか? 現在、訳あってその周波数の絶対量を使用したいのですが、その数字に意味はないのか教えてください。

  • MATLABを用いたFFT

    現在40kHzの正弦波をMATLABを用いてFFTをかけましたがしかし思った結果になりません。作成したmファイルの内容は以下のとおりです。 data = xlsread('test001.xls','Sheet1');   %excelファイルの読み込み data = data(:,2);   %2列目を選択 Y = fft(data);    %fft Pyy = Y.*conj(Y)/2500; %スペクトルを求める f = 40000 * (0:2499)/2500;          %範囲を指定 plot(f,Pyy(1:2500))             %グラフを作成 本当に困っているので、解答お願いします。

  • FFTについて

    FFTについて 得られたデータをハニング窓を用いて、FFTを行ったところ どのデータに関しても 周波数が0付近で他の周波数に比べて非常に大きいパワースペクトルが得られます。 これは窓関数による影響でしょうか? FFtについていくつか参考書を読みましたが、正直まったくつかめず、 よくわからないままツールを振りまわしていますので 得られたデータが本当に正しい結果であるのか信じきれません・・・。 よろしければFFTを初学者が学ぶコツ、オススメの参考書等ありましたら教えて頂きたいのです。 よろしくお願い致します。

  • パワースペクトルの0dBの値について

    matlabを用いて時系列データのパワースペクトルを計算、対数表示でグラフにプロットしています。 matlabのfft関数のヘルプに記載されていた例を参考に、以下のような自作の関数を組んで計算しているのですが、2つ質問があります。 1. この場合、パワースペクトルの0dBは、時系列の値ではいくつになるのでしょうか? 0dB = 1でしょうか? 2. 関数の中において、power_fftをN_fft(高速フーリエ変換時のデータ長さ)で割っている事の理由がわからなかったのですが、なぜ行っているのでしょうか? ------------------------------------------------ 以下、自作のパワースペクトル表示関数を示します function Power_db(Data_xx) fs = 1000; % サンプリング周波数 [Hz] N_fft = 2^12; % 4096個 xx_fft = fft(Data_xx,N_fft); power_xx = xx_fft.* conj(xx_fft) / N_fft; frequency = fs*(0:2047)/N_fft; % (0:2047)で500Hzまで plot(frequency,20*log10(power_xx(1:2048))) xlabel('Frequency [Hz]'); ylabel('Power Spectrum [dB]'); grid on; --------------------------------------------------------- 以上です。 何か足らない情報などがありましたらお申し付けください。 よろしくお願い致します。

  • EXCELとMATLABのFFT計算結果の違い

    はじめまして。 EXCELのフーリエ変換機能を使って計算したピーク周波数が、 MATLABのFFT関数から計算させたものとの結果より高くなってしましました。 ※0.0001秒刻み、振幅が4096行あるデータで約2.4Hz違いました。 違いの原因を調べたいのですが、どの様な事が考えられるでしょうか? よろしくお願いします。

  • パワースペクトルのデシベル表示について

    信号のパワースペクトルをFFTによって求め、それのデシベル値を横軸を周波数としてグラフで表示するとき、その上限が 0 dBになっているのを、様々な文献やサイトでよく見かけます。 パワースペクトルの値は 1 以上になることもありますので、そのデシベル値も 0 dB以上になると思うのですが、上記のような上限が 0 dBとして表示されている場合は、正規化などがされたパワースペクトルのデシベル値が表示されているのでしょうか? また、ある標本化関数のフーリエ変換を求め、その周波数特性の理論値をグラフとして表示するとき、周波数 0 のときで理論値が明らかに 1 ではないにも関わらず、そのデシベル表示が 0 dBから始まっているのを、様々な文献で見かけるのですが、それも正規化などがされた理論値が表示されているのでしょうか? 初歩的な質問かもしれませんが、よろしくお願いします。