前提
ここに質問の内容を詳しく書いてください。
サンプリング周波数20kHzのデータをフーリエ変換したときに5kHzのデータが確認できない
実現したいこ
サンプリング周波数20kHzので録音された5kHzの信号を確認したい
発生している問題・エラーメッセージ
5kHzの周波数帯が確認できない
該当のソースコード
python
1import numpy as np 2import matplotlib.pyplot as plt 3##########データ抽出################# 4 5A=10 6f = 5000.0 # 周波数 Hz 7sec = 0.5 # 信号の長さ s 8sf = 10000 # サンプリング周波数 Hz 9count = sec*sf 10count = int(count) 11t=[] 12y=[] 13 14t = np.arange(0, sec, 1/sf) #サンプリング点の生成 15y = A*np.sin(2*np.pi*f*t) # 正弦波の生 16 17# Generate test signal 18fs = 20000 # Sampling frequency 19N = 10000 # Number of samples 20t = np.linspace(0, 1/fs, num=N, endpoint=False) 21x = 0.1 * np.sin(2 * np.pi * 1000 * t) + 0.01 * np.sin(2 * np.pi * 5000 * t) 22 23# Perform FFT 24X = np.fft.fft(y) 25f = np.fft.fftfreq(N, 1/fs) 26f = np.fft.fftshift(f) 27X = np.fft.fftshift(X) 28 29plt.plot(f, np.abs(X)) 30plt.xlim(0, 1000) 31plt.xlabel('Frequency [Hz]') 32plt.ylabel('Magnitude') 33plt.show()
試したこと
ここに問題に対して試したことを記載してください。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
質問のコードをそのまま実行したら、
ValueError: x and y must have same first dimension, but have shapes (10000,) and (5000,)
というエラーが出ます
> サンプリング周波数20kHz
なのだから、
sf = 10000 # サンプリング周波数 Hz
↓ 修正
sf = 20000 # サンプリング周波数 Hz
とするのではないですかね
(そうしたらエラー出なくなる)
上記を直した場合ですが、
> plt.xlim(0, 1000)
として0〜1kHzだけ表示させたら、
> 5kHzの周波数帯が確認できない
となるのは当たり前だと思うのですが
その行を無効にしたら、グラフの-5kHzと5kHzにピークがあります
すみませんでした,ただの勘違いでした
解決しました
ご指摘ありがとうございます
回答1件