有人知道MFCC参数提取的MATLAB程序吗?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了有人知道MFCC参数提取的MATLAB程序吗?相关的知识,希望对你有一定的参考价值。

求完整的程序,MFCC参数的提取用MATLAB得出最终结果。

%mfcc
function mfc=mfcc(x)
%%%%%%%%%%%%%%%%%%%%%%%%%
%对输入的语音序列x进行mfcc参数提取,返回mfcc参数和一阶差分mfcc参数,mel滤波器的阶数为24
%fft变换长度为256,采样频率为8000HZ,对x 256点分为一帧
%%%%%%%%%%%%%%%%%%%%%%%%%%%%

bank=melbankm(24,256,8000,0,0.5,'m');
%归一化mel滤波器组参数
bank=full(bank);
bank=bank/max(bank((:));

%DCT系数,12*24
for k=1:12
n=0:23;
dctcoef(:,k)=cos((2*n+1)*k*pi/(2*24));
end

%归一化倒谱提升窗口
w=1+6*sin(pi*[1:12]./12);
w=w/max(w);

%预加重滤波器
xx=double(x);
xx=filter([1 -0.9375],1,xx);

%语音信号分帧
xx=enframe(xx,256,80);

%计算每帧的mfcc参数
for i=1:size(xx,1) %
y=xx(i,:);
s=y'.*hamming(256);
t=abs(fft(s));
t=t.^2;%计算能量
c1=dctcoef*log(bank*t(1:129));%dctcoef为dct系数,bank归一化mel滤波器组系数
c2=c1.*w';%w为归一化倒谱提升窗口
m(i,:)=c2';
end

%差分系数
dtm=zeros(size(m));
for i=3:size(m,1)-2;
dtm(i,:)=-2*(i-2,:)-m(i-1,1)+2*m(i+2,:);
end
dtm=dtm/3;

%合并mfcc参数和一阶差分mfcc参数
mfc=[m dtm];
%去除首尾两帧,因为这两帧的一阶差分参数为0
mfc=mfc(3:size(m,1)-2,:);
参考技术A close all
clear
clc
[x fs]=wavread('speech.wav');
bank=mel(24,256,fs,0,0.4,'m');%Mel滤波器的阶数为24,fft变换的长度为256,采样频率为8000Hz
% 归一化mel滤波器组系数
bank=full(bank);
bank=bank/max(bank(:));
% DCT系数,12*24
for k=1:12
n=0:23; dctcoef(k,:)=cos((2*n+1)*k*pi/(2*24));
end
% 归一化倒谱提升窗口
w = 1 + 6 * sin(pi * [1:12] ./ 12);
w = w/max(w);
% 预加重滤波器
xx=double(x);
xx=filter([1 -0.9375],1,xx);
% 语音信号分帧
xx=enframe(xx,256,80);%对x 256点分为一帧
% 计算每帧的MFCC参数
for i=1:size(xx,1)
y = xx(i,:);
s = y' .* hamming(256);
t = abs(fft(s));%fft快速傅立叶变换
t = t.^2;
c1=dctcoef * log(bank * t(1:129));
c2 = c1.*w';
m(i,:)=c2';
end
%求取差分系数
dtm = zeros(size(m));
for i=3:size(m,1)-2
dtm(i,:) = -2*m(i-2,:) - m(i-1,:) + m(i+1,:) + 2*m(i+2,:);
end
dtm = dtm / 3;
%合并mfcc参数和一阶差分mfcc参数
ccc = [m dtm];
%去除首尾两帧,因为这两帧的一阶差分参数为0
ccc = ccc(3:size(m,1)-2,:);
subplot(211)
ccc_1=ccc(:,1);
plot(ccc_1);title('MFCC');
ylabel('幅值');
[h,w]=size(ccc);
A=size(ccc);
subplot(212)
plot([1,w],A);
xlabel('维数');
ylabel('幅值');
title('维数于幅值的关系')
是找来的。

使用 MFCC 进行特征提取

【中文标题】使用 MFCC 进行特征提取【英文标题】:Feature Extraction using MFCC 【发布时间】:2019-06-07 04:17:41 【问题描述】:

我想知道,如何提取音频(x.wav)信号,使用MFCC进行特征提取?我知道使用 MFCC 进行音频特征提取的步骤。我想知道使用 Django 框架在 Python 中的精细编码

【问题讨论】:

我正在研究使用 MFCC 进行语音识别 【参考方案1】:

这是构建语音识别器最重要的一步,因为在将语音信号转换为频域之后,我们必须将其转换为特征向量的可用形式。

import numpy as np
import matplotlib.pyplot as plt
from scipy.io import wavfile
from python_speech_features import mfcc, logfbank

frequency_sampling, audio_signal = 
wavfile.read("/home/user/Downloads/OSR_us_000_0010_8k.wav")

audio_signal = audio_signal[:15000]

features_mfcc = mfcc(audio_signal, frequency_sampling)

print('\nMFCC:\nNumber of windows =', features_mfcc.shape[0])
print('Length of each feature =', features_mfcc.shape[1])



features_mfcc = features_mfcc.T
plt.matshow(features_mfcc)
plt.title('MFCC')

filterbank_features = logfbank(audio_signal, frequency_sampling)

print('\nFilter bank:\nNumber of windows =', filterbank_features.shape[0])
print('Length of each feature =', filterbank_features.shape[1])

filterbank_features = filterbank_features.T
plt.matshow(filterbank_features)
plt.title('Filter bank')
plt.show()

或者您可以使用此代码提取特征

import numpy as np
from sklearn import preprocessing
import python_speech_features as mfcc

def extract_features(audio,rate):
"""extract 20 dim mfcc features from an audio, performs CMS and combines 
delta to make it 40 dim feature vector"""    

        mfcc_feature = mfcc.mfcc(audio,rate, 0.025, 0.01,20,nfft = 1200, appendEnergy = True)    
        mfcc_feature = preprocessing.scale(mfcc_feature)
        delta = calculate_delta(mfcc_feature)
        combined = np.hstack((mfcc_feature,delta)) 
        return combined

【讨论】:

【参考方案2】:

您可以使用以下代码使用 librosa 包提取音频文件 MFCC 功能(易于安装和工作):

import librosa
import librosa.display
audio_path = 'my_audio_file.wav'
x, sr = librosa.load(audio_path)
mfccs = librosa.feature.mfcc(x, sr=sr,n_mfcc=40)
print(mfccs.shape)

您也可以使用以下代码显示 MFCC:

librosa.display.specshow(mfccs, sr=sr, x_axis='time')

【讨论】:

不鼓励在 SO 上仅使用代码的答案,并且随着时间的推移不太可能被投票。考虑编辑以添加说明或文档链接。此外,建议从答案中删除“简单”一词。

以上是关于有人知道MFCC参数提取的MATLAB程序吗?的主要内容,如果未能解决你的问题,请参考以下文章

如何合并 MFCC

语音识别基于MFCC的GMM实现语音识别matlab源码

使用 MFCC 进行特征提取

语音识别基于MFCC的GMM语音识别matlab源码

语音识别基于mfcc特征模板匹配算法实现语音识别matlab源码含GUI

语音识别基于mfcc特征模板匹配算法实现语音识别matlab源码含GUI