実数入力からのfft()出力の振幅と位相角を計算するにはどうすればよいですか?

私は実数信号から24サンプルを持っています。サンプルで fft()関数を実行し、複雑な出力を取得します。私は非冗長高調波のそれぞれの振幅と位相角を求めたいと思う。実数値のデータがあるので、計算にエイリアシングが含まれている必要があることはわかっています。どうすればいいの?

(1)両面から片面フーリエ変換への変換、

私はここでいくつかのことを聞いた。例えば、最初の12の高調波(すなわち、 fft()出力の2番目から13番目までの要素)を2倍にして残りの高調波を落とします(つまり、 > fft()出力)?

(2)片側フーリエ変換の振幅を計算し、

私は Mod()関数を使用することができますが、これはいつ行うのですか?私は2から片面に変換する前または後に?

(3)片側フーリエ変換の位相角を計算する。

私は atan()関数を fft()の出力の虚数部と実数部の比で使うことができます。 2面から片面への変換の前後どちらか?また、 atan が未定義の場合はどうなりますか?

ありがとう。

4
@joran:おそらく dsp.stackexchange.com に適していますが、まだFFTに関する多くの質問があります。問題に少なくともトークンの実用的なプログラミングの側面がある限り、許容される
追加された 著者 Paul R,
現時点では、これは私にプログラミングの質問よりも数学的な質問のように感じられ、オフトピックと見なされる危険性があります。
追加された 著者 joran,

1 答え

あなたの入力が実際であるので、FFTの出力はN/2について対称になるので、最初のN/2ビンを見て、2の倍率でスケールすることができます。フェーズでは、理想的にはatan2関数が必要です実数成分と虚数成分を別々の引数として返し、4象限の結果を返します。

3
追加された
@オウェン:はい、最後の1つはナイキストで、やや疑わしい有用性があります。
追加された 著者 Paul R,
(a)N/2ビンの実数成分と虚数成分を2倍するか、または大きさに2を掛けることができます。これは同じものになります。(b)一般的なケースでは、アンチエイリアシングフィルタがナイキスト成分を大きく減衰させます。スペクトルにスペクトルを含めるかどうかはあなた次第です。(c)使用している分散の公式を見る必要があります
追加された 著者 Paul R,
OK - 彼らはすでに(3)と(4)の対称性から x 2 の世話をしていません - 分散の/2 あなたがまだそれを必要としているように見える
追加された 著者 Paul R,
まあ、技術的に最初のN/2 + 1ビン。
追加された 著者 Owen,
みんなありがとう。私が答えをチェックし、あなたに恵まれた代理人をあなたに与えてもらうには、次の点を明確にしています。(a)スケールで2倍にすると、n/2(またはn/2 + 2つ、はい? (b)ナイキストは疑わしい有用性があるので...明確にしてください。ナイキストにはどうしたらいいですか? 2倍しないでください。 (c)2倍の倍率は、あるコンポーネントの分散を計算する式で、2倍の2乗を除算するように言われているのはなぜですか?再度、感謝します。
追加された 著者 Brash Equilibrium,
追加された 著者 Brash Equilibrium,
ああ、はい。笑。 (3)と(4)を見ていないための馬鹿のように感じる。ありがとう。散文では、説明された分散の割合を計算する方法を議論するとき、彼らはナイキスト以上の周波数を使用しているように聞こえるので、「すべての調波」または「すべての調波」を言っていないことを望みます。 (N/2以上のナイキスト周波数のスケールファクタ使用によるアンチエイリアシングを数えない限り)。
追加された 著者 Brash Equilibrium,