python频谱分析
Ⅰ 谁知道如何在python中用处理wav文件,并且对他的频谱进行分析的程序
1.读取wav文件
# -*- coding: utf-8 -*-
import wave
import pylab as pl
import numpy as np
# 打开WAV文档
f = wave.open(r"c:\WINDOWS\Media\ding.wav", "rb")
# 读取格式信息
# (nchannels, sampwidth, framerate, nframes, comptype, compname)
params = f.getparams()
nchannels, sampwidth, framerate, nframes = params[:4]
# 读取波形数据
str_data = f.readframes(nframes)
f.close()
#将波形数据转换为数组
wave_data = np.fromstring(str_data, dtype=np.short)
wave_data.shape = -1, 2
wave_data = wave_data.T
time = np.arange(0, nframes) * (1.0 / framerate)
# 绘制波形
pl.subplot(211)
pl.plot(time, wave_data[0])
pl.subplot(212)
pl.plot(time, wave_data[1], c="g")
pl.xlabel("time (seconds)")
pl.show()
2.观察信号频谱
# -*- coding: utf-8 -*-
import numpy as np
import pylab as pl
sampling_rate = 8000
fft_size = 512
t = np.arange(0, 1.0, 1.0/sampling_rate)
x = np.sin(2*np.pi*156.25*t) + 2*np.sin(2*np.pi*234.375*t)
xs = x[:fft_size]
xf = np.fft.rfft(xs)/fft_size
freqs = np.linspace(0, sampling_rate/2, fft_size/2+1)
xfp = 20*np.log10(np.clip(np.abs(xf), 1e-20, 1e100))
pl.figure(figsize=(8,4))
pl.subplot(211)
pl.plot(t[:fft_size], xs)
pl.xlabel(u"时间(秒)")
pl.title(u"156.25Hz和234.375Hz的波形和频谱")
pl.subplot(212)
pl.plot(freqs, xfp)
pl.xlabel(u"频率(Hz)")
pl.subplots_adjust(hspace=0.4)
pl.show()
Ⅱ librosa音频处理教程
Librosa是一个强大的Python音频信号处理库,广泛应用于音频分析领域。本文将总结Librosa的一些重要且常用功能,帮助理解其在音频处理中的应用。
Librosa提供了一种便捷方式在Jupyter Notebook中直接播放音频,通过IPython.display.Audio函数可以实现。
绘制音频波形图,直观展示给定时间内的音频响度,帮助理解音频的动态变化。
频谱图(Spectogram)通过短期傅里叶变换(STFT)显示了声音频率随时间的变化,揭示了给定音频信号中不同频率的幅度,对于语音识别和环境声音识别具有重要意义。
Mel频率倒谱系数(MFCC)是一组简明描述频谱包络整体形状的特征,在音乐信息检索和语音识别中广泛应用,通常用于音色描述。
过零率(zero-crossing rate)作为声音符号变化的比率,在语音识别和音乐信息检索领域被广泛使用,尤其对于敲击声分类具有关键作用。
频谱质心表示频谱能量集中频率,类似于加权平均值,用于理解声音能量分布。
频谱带宽通过计算频谱幅度和频率的统计量,帮助分析声音的频率分布宽度。
频谱滚降揭示了特定频率范围内的总频谱能量,是频率响应特性分析的重要指标。
色度特征(Chroma Feature)通过12维向量表示信号中每个音高类别的能量分布,适用于音乐信号的分析。
音高作为声音感知属性,通过与频率相关的尺度排序,对于音乐旋律的“高低”判断具有重要意义。
Librosa提供的这些功能在音频分析和处理中发挥着关键作用,本文通过总结这些功能,旨在提供一个对Librosa在音频信号处理方面应用的直观理解。