赞
踩
首先你需要有一段音频.....,不用太长,我是准备了一个八秒的无损音频,可以用专门的录音软件(例如:Audacity),或者可以下载一些音频然后转为无损(当然有损也可以提取特征),频率最好在16000Hz及以上。其次是你需要在你的python环境中安装以下库,我以pycharm社区版为例。
- import numpy as np
- import matplotlib.pyplot as plt
- from python_speech_features import mfcc
- from python_speech_features import delta
- from sklearn.preprocessing import StandardScaler
- import librosa.display
- import pyworld
y, sr = librosa.load("audio.wav")
y, sr = pyworld.load("audio.wav")
- # 可视化时域特征
- time = np.arange(len(y)) / sr
- plt.figure(figsize=(14, 5))
- plt.subplot(2, 1, 1)
- plt.plot(time, y)
- plt.xlabel('Time (s)')
- plt.ylabel('Amplitude')
- plt.title('Time-domain features')
- plt.tight_layout()
- plt.show()
- # 可视化频域特征
- D = librosa.stft(y)
- D_db = librosa.amplitude_to_db(np.abs(D), ref=np.max)
- plt.subplot(2, 1, 2)
- librosa.display.specshow(D_db, sr=sr, x_axis='time', y_axis='log')
- plt.colorbar(format='%+2.0f dB')
- plt.title('Frequency-domain features')
- plt.tight_layout()
- plt.show()
- # 将音频转化为MFCC特征
- mfcc_features = mfcc(y, sr)
- # 对MFCC特征进行delta处理
- delta_features = delta(mfcc_features, 2)
- # 归一化处理
- scaler = StandardScaler()
- normalized_features = scaler.fit_transform(delta_features)
- # 可视化MFCC特征
- plt.figure(figsize=(10, 5))
- plt.imshow(normalized_features.T, origin='lower', aspect='auto', cmap='jet')
- plt.title('MFCC features')
- plt.xlabel('Frame index')
- plt.ylabel('MFCC coefficient index')
- plt.tight_layout()
- plt.show()
- # 计算语谱图
- S = librosa.feature.melspectrogram(y=y, sr=sr)
-
- # 转换为分贝单位
- S_db = librosa.power_to_db(S, ref=np.max)
-
- # 可视化语谱图
- plt.figure(figsize=(10, 5))
- librosa.display.specshow(S_db, sr=sr, x_axis='time', y_axis='mel')
- plt.colorbar(format='%+2.0f dB')
- plt.title('Mel Spectrogram')
- plt.tight_layout()
- plt.show()
- # 计算短时傅里叶变换(STFT)
- D = librosa.stft(y)
- # 将STFT的幅度谱转换为概率分布
- P = librosa.amplitude_to_db(np.abs(D), ref=np.max)
- P = P / np.sum(P, axis=0)
- # 计算谱熵
- spectral_entropy = -np.sum(P * np.log2(P), axis=0)
-
- plt.plot(spectral_entropy)
- plt.xlabel('Frame index')
- plt.ylabel('Spectral Entropy')
- plt.title('Spectral Entropy Feature')
- plt.show()
上述特征是语音信号处理中很常见的一些特征,如果对你有帮助的话,我将会很开心。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。