from scipy.fft import rfft, rfftfreq
# Note the extra 'r' at the front
yf = rfft(normalized_tone)
xf = rfftfreq(N, 1 / SAMPLE_RATE)
plt.plot(xf, np.abs(yf))
plt.show()
返回的值rfft()代表每个频率仓的功率。如果您将给定 bin 的功率设置为零,则该 bin 中的频率将不再出现在生成的时域信号中。
使用 的长度xf、最大频率以及频率区间均匀分布的事实,您可以计算出目标频率的索引:
# The maximum frequency is half the sample rate
points_per_freq = len(xf) / (SAMPLE_RATE / 2)
# Our target frequency is 4000 Hz
target_idx = int(points_per_freq * 4000)