複素共役とIFFT


8

スタックオーバーフローについて質問しました。

しかし、少し問題があります。Paul RIが示唆しているように、私の下位のビンを上位のn / 2ビンにミラーリングしています。n/2n/2

ただし、いくつか質問があります。

  • 私は2 f f t O r d e rですか?したがって、オーダー10のIFFTの場合、下位の512個の周波数ビンを上位の512にミラーリングしますか?これにより、最終的に1024の実際のサンプルも生成されますか?n2fftOrder
  • ミラーリングすると、これは、ビン0がビン、ビン1がビンn 2にというように続くということですか?n1n2
  • サンプリング周波数の4分の1でなんらかの反射が発生しているようです。これは、私の周波数範囲の上半分が実際には下半分の上に表示されていることを意味します。なぜ誰かアイデアはありますか?
  • ある大きさの512サンプルと別の大きさの次の512サンプルを取得するストライピング効果が発生する理由を誰かが知っていますか?(これは私の「ミラーリング」がどこから来ているのか)

今のところはそれでいいと思います。どんな助けも大いに役立つでしょう!!

編集:あなたに反射のイメージを与えることは、非常に見るのが難しいので十分に不可能です!基本的に私は22 kHzでサンプリングしていて、11 kHzを超えると「ノイズ」しか出ません。11 kHzを超えると(当然私は何か間違ったことをしているのですが)11 kHzから0に反射するように見えます。これは非常に奇妙です。

縞模様の画像はこちらでご覧いただけます

各ストライプは、512サンプル幅だと思います。


私はあなたが正確に何を意味するのか分かりません:1)fs / 4でのある種の反射と2)縞模様の効果... ?私はあなたが何を意味するかについて推測することができますが、それはあまり役に立ちません。
Lorem Ipsum 2011

私はあなたの説明を理解するのに失敗したヨーダと一緒ですが、ビン0からn-1へのミラーリングは間違いなく正しく聞こえません。ビン0はDCを表し、どこにもミラーリングしないでください。nが偶数の場合、ビンn / 2にも特別な処理が必要です。また、この用語は役立つよりも混乱する可能性が高いため、1024ポイントのIFFTを次数10のIFFTと呼ぶことはお勧めしません。
Dilip Sarwate、2011

@yoda:更新されました。
Goz、2011

@Dilip Sarwate:お詫び申し上げます。説明するのが非常に難しく、さらに見づらいです。
Goz

@ゴズ軸は何ですか?
Lorem Ipsum、2009

回答:


4

「反射」または「ストライピング」で何が得られるのかはわかりませんが、周波数領域信号(IFFTへの入力)が共役対称になるようにデータポイントを複製したいとします。つまり、場合でも、N

X[k]=X[Nk],k=1,2,,N21

はゼロベースであることに注意してください。ベクトルの最初の要素はX [ 0 ]です。上記は、ゼロとNを複製しないことを示していますkX[0]入力ベクトルの 2番目の要素。この関係は、離散フーリエ変換の周期性に基づいています。周波数領域ベクトルの前半は、0からN1πまでの角周波数範囲をカバーする「正の」周波数に対応します。N20。後半カバーπN-12π(N1)πNπを利用して、2π周波数領域で周期は、と等価である-π-2π(N1)2πN2ππ。周波数領域ベクトルが共役対称性を持つためには、上記の関係が真でなければならないことを簡単に示すことができます。2πN

スペクトログラムを意味のある音声信号に変換するという本来の目的といえば、得られるものがどんなに楽しいものであるという保証はありません。Stack Overflowで指摘されたように、スペクトログラムには位相情報がありません。そこで提案されている方法は、各周波数領域ビンの位相がゼロであることを前提としています(したがって、上記の共役演算は不必要です)。人間の耳はオーディオの位相の歪みにそれほど敏感ではありませんが、達成したいことによっては、他のことをしなければならない場合があります。


3

[0]インデックスはDCコンポーネントであるため、ミラーリングしないでください。反射点は(N / 2)+1でなければなりません


1

1024ポイントの実際のシーケンスがあるとします。複素数FFTは、これを1024の複素数に変換します。ただし、X [0](DC)およびX [512] Nyuistは実数であり、X [1] .. X [511]は共役対称であるため、スペクトル全体を1024の数値(2実数および511複素数)で表すことができます。ハーフサイドスペクトルX [0] ... x [512]があり、その共役対称バージョンY [0] ... Y [1023]を作成するとします。以下をせよ

Y[0] = X[0], Y[1] = X[1] .... Y[512] = X[512];
Y[513] = conjugate(X[511]), Y[514] = conjugate(X[510]) ... Y[1023] = conjugate(X[1])

Matlabを使用する場合、Matlabは1からカウントを開始するため(0ではなく)、すべてのインデックスに "1"を追加する必要があります。


0

反射は正常です。これはエイリアシングまたは周波数フォールディングと呼ばれ、サンプリングしている信号が、ナイキスト周波数と呼ばれるものを超えたときに発生します。これは、サンプリング周波数の半分です。理想的には、正確にこの理由から、サンプリングする信号の周波数の少なくとも2倍のサンプリング周波数が必要です。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.