如何解决scipy.rfft 产生减半的频率
我正在尝试检测计算机音频输出中的某些频率。出于某种原因,我发现的频率大约是预期值的一半。整个程序有点长,所以我只贴出相关部分。
我使用 pyaudio 的一个分支来传输输出声音 (https://github.com/intxcc/pyaudio_portaudio)。由此,我读入了一些音频数据,应用 scipy.rfft 并绘制了频谱图。
frames = np.frombuffer(
self.stream.read(int(self.sampleRate/10)),np.int16)
xf,yf = audioUtils.getSpectrum(frames,self.sampleRate)
self.plotWidget.plot(xf,yf)
请求:
def getSpectrum(frames,sampleRate):
n = len(frames)
yf = rfft(frames)
yf = np.abs(yf)
xf = rfftfreq(n,1 / sampleRate)
我一直在使用在线音调发生器 (https://www.szynalski.com/tone-generator/) 测试代码,它针对 10 kHz 音调产生以下结果:
出于某种原因,主峰位于预期频率的一半。此外,在~12 kHz 附近似乎有一个峰值镜像。这是 20 kHz 的第二个例子
我的采样率为 44100 Hz。 我的 rfft 做的不对吗?
解决方法
问题是流正在从 2 通道源读取音频。一个简单的拼接固定它。
工作代码:
frames = np.frombuffer(
self.stream.read(int(self.sampleRate)),np.int16)
frames = frames[::2]
xf,yf = audioUtils.getSpectrum(frames,self.sampleRate)
self.plotWidget.plot(xf,yf)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。