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在音頻信號處理方面應用的直觀理解。