1

リスト(サイズ1024)でFFTとFFTShiftを実行した後、出力をプロットしようとしています。データを希望どおりに表示しようとすると、いくつかの問題が発生しました。

http://i.imgur.com/HTpiX.png

現在、x軸にはビン番号が表示されています。FFTシフトに続いて、周波数0 Hzはビン番号512にあり、各ビンは追加の2000/1024 Hzの価値があるため、ビン0は-1000 Hz、ビン1023は+1000Hzである必要があります。ビン1は-998.05Hzで、ビン1022は+998.05である必要があります。

これを表示するためにxticksを使用してみました:

xlocs, xlabs = plt.xticks()
plt.xticks([0,(len(a)*0.25),(len(a))/2,(len(a)*0.75),len(a)],[(-1000),(-500),0,500,1000])

しかし、グラフの特定のポイントでx値を実際に読み取ることができず、代わりにy値とx=のみが表示されます。これを修正する方法はありますか?

さらに、グラフ全体を302ビンだけ左に変換したいと思います。とにかく私はこれを行うことができますか?

4

2 に答える 2

3

グラフのプロット方法を変更する必要があります。つまり、プロットする前にビンから頻度を計算します。

import numpy as np
import matplotlib.pyplot as plt

bins = np.arange(-512, 512)
x = 2000.*bins/1024
plt.plot(x, fft_data)

次に、を使用して表示される周波数範囲を調整できます。plt.xlim

于 2012-11-16T12:16:10.530 に答える
1

fftfreq適切にスケーリングされた周波数を提供するヘルパー関数を使用することもできます。その後、とアレイfftshiftの両方に適用できます。次に、としてプロットする場合fftfreq

plot(freq,fft_vals)

あなたはあなたが望む結果を得るでしょう。

xxticksを手動で設定したときに値を読み取ることができない理由は、ティックラベルとして何でも入力できるため(文字列、非単調シーケンスなど)、matplotlibはx値を決定する方法を知らないためです。キャンバス上の任意のポイント(matplotlibでtickslabelを設定すると、マウスカーソルの位置が無効になりますを参照)。

于 2012-11-17T19:03:53.987 に答える