6

これを行う方法がわかりません。スペクトログラムなどの例が与えられましたが、これは2Dです。

ここに周波数の混合を生成するコードがあり、fft でこれらを選択できます。スペクトログラムでこれらを確認するにはどうすればよいですか? 私の例の頻度が時間の経過とともに変化しないことを感謝します。これは、スペクトログラム全体に直線が表示されるということですか?

私のコードと出力画像:

# create a wave with 1Mhz and 0.5Mhz frequencies
dt = 2e-9
t = np.arange(0, 10e-6, dt)
y = np.cos(2 * pi * 1e6 * t) + (np.cos(2 * pi * 2e6 *t) * np.cos(2 * pi * 2e6 * t))
y *= np.hanning(len(y))
yy = np.concatenate((y, ([0] * 10 * len(y))))

# FFT of this
Fs = 1 / dt  # sampling rate, Fs = 500MHz = 1/2ns
n = len(yy)  # length of the signal
k = np.arange(n)
T = n / Fs
frq = k / T  # two sides frequency range
frq = frq[range(n / 2)]  # one side frequency range
Y = fft(yy) / n  # fft computing and normalization
Y = Y[range(n / 2)] / max(Y[range(n / 2)])

# plotting the data
subplot(3, 1, 1)
plot(t * 1e3, y, 'r')
xlabel('Time (micro seconds)')
ylabel('Amplitude')
grid()

# plotting the spectrum
subplot(3, 1, 2)
plot(frq[0:600], abs(Y[0:600]), 'k')
xlabel('Freq (Hz)')
ylabel('|Y(freq)|')
grid()

# plotting the specgram
subplot(3, 1, 3)
Pxx, freqs, bins, im = specgram(y, NFFT=512, Fs=Fs, noverlap=10)
show()

出力ファイル

4

3 に答える 3

2

あなたが求めているものを得るには:

1) 高い周波数で 1d 波形をサンプリングします (その最高周波数成分の周波数の少なくとも 5 倍)。

2) サンプルのブロック (1024、16384 などの 2 の累乗) を使用して FFT を計算します。

3) 各スペクトルについて、色が各周波数の振幅を表すピクセルの垂直線をプロットします。

4) サンプルのブロックごとにステップ 2 と 3 を繰り返します。

あなたの場合、プロットには虹色の色があり、非常に異なる周波数がいくつかあるだけでは存在しないはずです。スペクトル プロットには、ピークの周りにかなり広い帯域がありますが、これはサンプリング レートが低く、プロットが滑らかであることが原因である可能性があります。

于 2013-09-27T13:59:55.793 に答える