Tôi đang tìm cách xoay trục tần số trong một fft (được thực hiện thông qua scipy.fftpack.fftfreq) thành tần số trong Hertz, chứ không phải là thùng hoặc thùng phân đoạn.Phân tích tần số Scipy/Numpy FFT
Tôi cố gắng để mã dưới đây để kiểm tra các FFT:
t = scipy.linspace(0,120,4000)
acc = lambda t: 10*scipy.sin(2*pi*2.0*t) + 5*scipy.sin(2*pi*8.0*t) + 2*scipy.random.random(len(t))
signal = acc(t)
FFT = abs(scipy.fft(signal))
FFT = scipy.fftpack.fftshift(FFT)
freqs = scipy.fftpack.fftfreq(signal.size)
pylab.plot(freqs,FFT,'x')
pylab.show()
Tỷ lệ lấy mẫu nên 4000 mẫu/120 giây = 33,34 mẫu/giây.
Tín hiệu có tín hiệu 2.0 Hz, tín hiệu 8.0 Hz và một số nhiễu ngẫu nhiên.
Tôi lấy FFT, lấy tần số và vẽ nó. Những con số này khá vô nghĩa. Nếu tôi nhân tần số bằng 33,34 (tần số lấy mẫu), thì tôi nhận được các đỉnh vào khoảng 8 Hz và 15 Hz, điều này có vẻ sai (tần số phải là một hệ số 4 tách rời nhau, không phải 2!).
Bất kỳ suy nghĩ nào về những gì tôi đang làm sai ở đây?
Cảm ơn bạn đã trả lời đầy đủ. hyry, tại sao u chọn âm mưu 20 * scipy.log10 (FFT) thay vì FFT? – Archie1986
HYRY cung cấp cho bạn một âm mưu có trục Y theo thang đo dB và 20log10 cung cấp chuyển đổi chính xác cho một phổ độ lớn. – OldTinfoil