《語音信號處理試驗教程》(梁瑞宇等)的代碼主要是Matlab實現的,現在Python比較熱門,所以把這個項目大部分內容寫成了Python實現,大部分是手動寫的。使用CSDN博客查看幫助文件:
Python語音基礎操作–2.1語音錄製,播放,讀取
Python語音基礎操作–2.2語音編輯
Python語音基礎操作–2.3聲強與響度
Python語音基礎操作–2.4語音信號生成
Python語音基礎操作–3.1語音分幀與加窗
Python語音基礎操作–3.2短時時域分析
Python語音基礎操作–3.3短時頻域分析
Python語音基礎操作–3.4倒譜分析與MFCC係數
Python語音基礎操作–4.1語音端點檢測
Python語音基礎操作–4.2基音週期檢測
Python語音基礎操作–4.3共振峯估計
Python語音基礎操作–5.1自適應濾波
Python語音基礎操作–5.2譜減法
Python語音基礎操作–5.4小波分解
Python語音基礎操作–6.1PCM編碼
Python語音基礎操作–6.2LPC編碼
Python語音基礎操作–6.3ADPCM編碼
Python語音基礎操作–7.1幀合併
Python語音基礎操作–7.2LPC的語音合成
Python語音基礎操作–10.1基於動態時間規整(DTW)的孤立字語音識別試驗
Python語音基礎操作–10.2隱馬爾科夫模型的孤立字識別
Python語音基礎操作–11.1矢量量化(VQ)的說話人情感識別
Python語音基礎操作–11.2基於GMM的說話人識別模型
Python語音基礎操作–12.1基於KNN的情感識別
Python語音基礎操作–12.2基於神經網絡的情感識別
Python語音基礎操作–12.3基於支持向量機SVM的語音情感識別
Python語音基礎操作–12.4基於LDA,PCA的語音情感識別
代碼可在Github上下載:busyyang/python_sound_open
對於線性預測器,其誤差爲,那麼在預測誤差和預測係數已知的情況下,就可以求出合成語音。
from chapter2_基礎.soundBase import *
from chapter7_語音合成.flipframe import *
from chapter3_分析實驗.C3_1_y_1 import enframe
from chapter3_分析實驗.lpc import lpc_coeff
from scipy.signal import lfilter
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
data, fs = soundBase('C7_2_y.wav').audioread()
data -= np.mean(data)
data /= np.max(np.abs(data))
N = len(data)
time = [i / fs for i in range(N)] # 設置時間
p = 12
wlen, inc = 200, 80
msoverlap = wlen - inc
y = enframe(data, wlen, inc)
fn = y.shape[0]
Acoef = np.zeros((y.shape[0], p + 1))
resid = np.zeros(y.shape)
synFrame = np.zeros(y.shape)
## 7.2.1
# 求每幀的LPC係數與預測誤差
for i in range(fn):
a, _ = lpc_coeff(y[i, :], p)
Acoef[i, :] = a
resid[i, :] = lfilter(a, [1], y[i, :])
# 語音合成
for i in range(fn):
synFrame[i, :] = lfilter([1], Acoef[i, :], resid[i, :])
outspeech = Filpframe_OverlapS(synFrame, np.hamming(wlen), inc)
plt.subplot(2, 1, 1)
plt.plot(data / np.max(np.abs(data)), 'k')
plt.title('原始信號')
plt.subplot(2, 1, 2)
plt.title('還原信號-LPC與誤差')
plt.plot(outspeech / np.max(np.abs(outspeech)), 'c')
plt.show()