如何由LPC系数计算LPCC系数
时间: 2023-08-25 20:06:32 浏览: 95
LPCC(Linear Prediction Cepstral Coefficients)是由LPC(Linear Prediction Coefficients)演化而来的,计算LPCC系数可以分为以下几个步骤:
1. 计算LPC系数。LPC是一种线性预测分析方法,它可以用来估计信号的谱密度函数。计算LPC系数的方法有多种,其中比较常用的是Autocorrelation法和Covariance法。
2. 由LPC系数计算LPC Cepstrum(LPC倒谱系数)。LPC Cepstrum是将LPC系数进行傅里叶变换得到的,其物理意义是LPC滤波器的输出的倒谱。
3. 对LPC Cepstrum进行加窗。加窗是为了减小噪声对LPCC系数的影响,常用的窗函数有汉明窗、海明窗等。
4. 对加窗后的LPC Cepstrum进行离散余弦变换(DCT)。DCT是一种变换方法,它可以将信号从时域变换到频域,并且具有压缩性质。DCT变换后得到的系数即为LPCC系数。
需要注意的是,LPCC系数的计算方法有多种,不同的方法可能在LPC Cepstrum的处理、加窗和变换等方面有所不同。
相关问题
用python提取语音文件的lpcc、lpc、lsp特征
提取语音文件的特征可以使用Python中的LibROSA库。以下是提取语音文件的LPCC、LPC、LSP特征的示例代码:
```python
import librosa
import numpy as np
from scipy.signal import lfilter
# 读取语音文件
y, sr = librosa.load('sample.wav', sr=None)
# 提取LPCC特征
order = 12 # LPC阶数
n_fft = 512 # FFT窗口大小
hop_length = 160 # 帧移
win_length = 320 # 帧长
lpcc = librosa.lpc(y, order)
lpcc = librosa.feature.lpcc(y=y, sr=sr, n_fft=n_fft, hop_length=hop_length, win_length=win_length, n_mfcc=order, ref=1.0, lifter=0, normalize=False)
# 提取LPC特征
lpc = librosa.lpc(y, order)
lpc = -1 * lpc[1:]
# 提取LSP特征
m = order + 1
a = np.zeros((m, m))
a[0, 0] = 1
a[1:, 0] = -lpc
a[0, 1:] = lpc
for i in range(2, m):
a[i, i-1] = 1
a[i, i] = -lpc[i-2]
r = np.roots(a.T)
r = np.sort(np.angle(r))
lsp = r
print('LPCC:', lpcc)
print('LPC:', lpc)
print('LSP:', lsp)
```
这里使用了LibROSA库中的`lpc`函数来计算LPC系数,`lpcc`函数来计算LPCC系数,和自己实现的算法来计算LSP系数。其中,`n_fft`表示FFT窗口大小,`hop_length`表示帧移,`win_length`表示帧长,`order`表示LPC阶数。LPCC和MFCC类似,它们都是一种基于梅尔频率的特征。LSP是LPC系数在极坐标下的表示,它通常被用来作为LPC系数的一种替代表示方式,因为它具有更好的鲁棒性。
利用python实现线性预测系数(linear predictive coding coefficients,LPCC)
LPCC(线性预测系数)是一种用于语音信号处理的特征提取方法,用于语音识别、语音合成和语音压缩等应用中。下面是通过Python实现LPCC系数的步骤:
1. 导入所需的库和数据集
```
import numpy as np
from scipy.io import wavfile
from python_speech_features import mfcc
```
2. 读取音频文件并提取MFCC特征
```
(rate,sig) = wavfile.read("audio.wav")
mfcc_feat = mfcc(sig,rate)
```
3. 计算LPCC系数
```
def lpcc(signal, order):
signal = signal.astype(np.float64)
n_samples = len(signal)
signal = signal.reshape(n_samples, 1)
preemph_signal = signal.copy()
preemph_signal[1:] -= preemph_signal[:-1] * 0.97
frame_size = int(np.floor(0.025 * rate))
frame_step = int(np.floor(0.01 * rate))
nf = int(np.floor((n_samples - frame_size) / frame_step)) + 1
frames = np.zeros((frame_size, nf))
for i in range(nf):
frames[:, i] = preemph_signal[i * frame_step:i * frame_step + frame_size, 0]
w = np.hamming(frame_size)
frames = frames * w.reshape(frame_size, 1)
nfft = int(2 ** np.ceil(np.log2(frame_size)))
spectrum = np.abs(np.fft.fft(frames, nfft, axis=0)[:nfft // 2 + 1])
lpc = np.zeros((order + 1, nf))
r = np.zeros((order + 1,))
for i in range(nf):
auto_corr = np.correlate(frames[:, i], frames[:, i], mode='full')
auto_corr = auto_corr[frame_size - 1:]
for j in range(order + 1):
r[j] = auto_corr[:order + 1][j]
lpc[:, i] = np.linalg.solve(toeplitz(r[:-1]), -r[1:])
lpcc_feat = lpc[1:, :].transpose()
return lpcc_feat
```
4. 调用函数并输出LPCC系数
```
lpcc_feat = lpcc(sig, 12)
print(lpcc_feat)
```
注意:上述代码中的order表示LPCC系数的阶数,一般取12。同时,为了能够使用该代码,需要安装python_speech_features库。
相关推荐
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)