python统计每个整数出现频率,统计字符频次python
我试着用Python来得到。wav文件。目前,我有一个代码,可以绘制振幅与时间和频率与功率(dB)的关系。我尝试用频率和功率图的代码来代替绘制频率和时间图,但没有成功。我知道频率数据是对称的,这意味着我与时间数据相比有1/2的数据点。我可以通过保存重复的频率数据来绘制它们,但我怀疑这是否能真正准确地表示频率和时间的关系。在
我认为这种方法需要对数据段进行短时傅里叶变换,然后得出结果。也就是说,我发现了一些类似的代码,但我很难理解这些代码发生了什么,并做出任何有意义的调整来帮助我实现目标。在
总之,我希望有人能有一些样本代码或方法来创建频率对时间的图表。Python中的wav文件。非常感谢!请让我知道,如果我能张贴代码,我一直在使用它至今。At #导入所需的函数
从scipy.io.wavfile导入读取
从scipy.fftpack导入fft,fftfreq,fftshift
从scipy.signal导入get_window
从数学导入单元
从pylab导入图,imshow,clf,gray,xlabel,ylabel
#读入一个wav文件
#返回采样速率(每秒采样数)和数据
rate,data=read(waveTest.wav )
数据=数据[:0]
#定义样本间距和窗口大小。
dT=1.0/速率
T_window=50e-3
N_window=int(T_window *速率)
N_data=len(data)
# 1.获取窗口配置文件
window=get_window(hamming ,N_window)
# 2.建立FFT
结果=[]
开始=0
while (start N_data - N_window):
end=开始N_window
result . append(FFT shift(FFT(window * data[start:end]))
开始=结束
result . append(FFT shift(FFT(window * data[-N _ window:]))
结果=数组(结果,结果[0])。数据类型)
#显示结果
freq scale=FFT shift(fftfreq(N _ window,dT))[150:-150]/1e3
图(1)
clf()
s.imshow(abs(result[:150:-150]),extent=(5,-5,(N_data*dT-T_window/2.0),T_window/2.0)) #19.04,-19.04,6.41,0.025
s.xlabel(频率(kHz))
s.ylabel(时间(秒。))
显示()
按照要求,以上是我正在努力的代码。其实我觉得挺好用的,但是我有几个疑问。在
1)什么是abs(结果[:150:-150])?我意识到他是在取傅里叶变换的绝对值(为了去掉复杂成分?)。这是频率吗?在
2)如何交换数据,使X轴上的时间与Y轴上的频率相同?在
3)图像如何知道哪个频率对应哪个时间?如果我理解正确的话,扩展数据块需要最后两个参数,即文件的长度和文件应该执行的步骤?在
4)是否可以在图中而不是图像上绘制数据?在
希望这些问题不要太多,也不要太具体。再次感谢您的帮助!在
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。