首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >需要帮助选择频率范围,用于FFT操作后的峰值搜索。

需要帮助选择频率范围,用于FFT操作后的峰值搜索。
EN

Stack Overflow用户
提问于 2014-04-10 20:50:27
回答 1查看 228关注 0票数 2

我对这个(和编程)有点陌生。我正在尝试编写一个脚本来帮助我分析一个大型的.wav文件。理论上,它将对时间段运行fft,输出与功率v频率相对应的数据,对某个频率范围执行峰值功率搜索,并将其附加到另一个新的数组中,我稍后将使用它来构建直方图。

我坚持的步骤是选择一个频率范围并让屏幕打印出该频率范围的最大功率(我的尝试是在plt.show()之后),我希望能够返回频率范围为260-270 of的峰值功率.有什么建议(我已经在主板上做了调整以返回dbm )?

代码语言:javascript
复制
for i in range(reads-1):
    if i > 0:
        break
    print 'working on set {:d} \n'.format(i) 
    waveData = wavFile.readframes(int(Windowsize))
    waveDataunpack = struct.unpack(formatstring,waveData)
    fftData = ((np.fft.rfft(waveDataunpack)/Windowsize))
    freqs = np.fft.fftfreq(Windowsize+1, float(1.0/rate))
    plt.plot(freqs[:16385],10*np.log10(np.abs(fftData)))
    plt.ylabel('power (dBm)')
    plt.xlabel('frequency (Hz)')
    plt.ylim((0,50))
    plt.xlim((0,500)) 
    #plt.show()

    pointy = fftData[freqs.index(260)]
    #print pointy
    #print(fftData.max)
    #print max(10*np.log10(np.abs(fftData)));
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-04-18 22:47:09

我通过枚举找到了我的范围问题的答案。

代码语言:javascript
复制
ind = [i for i, x in enumerate(windowed_freqs) if x >= 240 and x <= 285]

#now take the DB data only at the indicies where x is between the proper range.
value = fftData_inDB[ind]

#print freqs[ind]
maxval=-1000
maxind=0
for j in ind:
    if fftData_inDB[j] > maxval:
        maxval = fftData_inDB[j]
        maxind = j
print 'max power in range is {} dBm'.format(maxval)
print 'corresponding frequency is {} Hz'.format(freqs[maxind])
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22998768

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档