matlab语音信号处理程序代码,语音信号处理—MFCC特征提取(matlab代码)
时间: 2023-07-06 16:37:43 浏览: 62
以下是MATLAB语言的MFCC特征提取程序代码:
```matlab
% 读取音频文件
[audio, fs] = audioread('test.wav');
% 分帧
frame_length = 0.025; % 每帧长度
frame_shift = 0.01; % 帧移
frame_size = round(frame_length * fs); % 每帧点数
frame_shift_size = round(frame_shift * fs); % 帧移点数
n_frames = floor((length(audio) - frame_size) / frame_shift_size + 1); % 总帧数
frames = zeros(frame_size, n_frames); % 存储所有帧
for i = 1 : n_frames
frame_start = (i - 1) * frame_shift_size + 1;
frame_end = frame_start + frame_size - 1;
frames(:, i) = audio(frame_start : frame_end);
end
% 加窗
window = hamming(frame_size);
for i = 1 : n_frames
frames(:, i) = frames(:, i) .* window;
end
% FFT
n_fft = 512; % FFT点数
fft_frames = fft(frames, n_fft);
% Mel滤波器组
n_mel_filters = 26; % Mel滤波器个数
mel_filters = melFilterBank(fs, n_fft, n_mel_filters);
% 应用Mel滤波器组
mel_spectrum = mel_filters * abs(fft_frames(1 : n_fft / 2, :)).^2;
% DCT
n_coeffs = 13; % DCT系数个数
mfcc = dct(log(mel_spectrum), n_coeffs);
% 取MFCC特征
mfcc_features = mfcc(2 : n_coeffs, :); % 第一个系数为能量,忽略
% 归一化
mfcc_features = mfcc_features - repmat(mean(mfcc_features, 2), 1, n_frames);
mfcc_features = mfcc_features ./ repmat(std(mfcc_features, 0, 2), 1, n_frames);
```
其中,`melFilterBank`函数如下:
```matlab
function melFilters = melFilterBank(fs, n_fft, n_filters)
% 计算Mel频率
f_min = 0;
f_max = fs / 2;
mel_min = hz2mel(f_min);
mel_max = hz2mel(f_max);
mel_points = linspace(mel_min, mel_max, n_filters + 2);
hz_points = mel2hz(mel_points);
% 计算Mel滤波器组
mel_filters = zeros(n_filters, n_fft / 2);
for i = 1 : n_filters
left = floor(hz_points(i) / fs * n_fft) + 1;
center = floor(hz_points(i + 1) / fs * n_fft) + 1;
right = floor(hz_points(i + 2) / fs * n_fft) + 1;
mel_filters(i, left : center) = (0 : center - left) / (center - left);
mel_filters(i, center : right) = (right - center) / (right - center + 1 : 0);
end
melFilters = mel_filters;
end
function mel = hz2mel(hz)
mel = 1127 * log(1 + hz / 700);
end
function hz = mel2hz(mel)
hz = 700 * (exp(mel / 1127) - 1);
end
```
这个程序实现了基于MFCC的语音信号特征提取,将音频文件分帧、加窗、FFT,计算Mel频率滤波器组,应用滤波器组,进行DCT变换,最终得到MFCC特征。