基于MFCC的语音信号基音提取算法matlab仿真

630 篇文章 1058 订阅 ¥39.90 ¥99.00

目录

1.算法仿真效果

2.MATLAB源码

3.算法概述

4.部分参考文献


1.算法仿真效果

matlab2022a仿真结果如下:

2.MATLAB源码

function [ pitch_est1,pitch_est2 ] = fbe2pitch(fbe,H,window,fs,nfft,lamda,pr)


rfft=(nfft/2)+1;

win_fft = abs(fft(window,nfft))/nfft;
W=toeplitz(win_fft);
W=W(1:rfft,1:rfft);

A=H*W;
M=A'*A;
opts = optimoptions('quadprog','Display','off');
Ns=240;
M=M(1:Ns,1:Ns);
A = A(:,1:Ns);
lamda = lamda*ones(1,Ns);

% fbe=fbe;
f=lamda-fbe'*A;
tmp=quadprog(M,f,[],[],[],[],zeros(size(M,2),1),[],[],opts);
tmp2=pinv(A)*fbe;
% pr=[90,150];
[~,pitch_est1]=shrp(tmp,fs,pr,40,10);
[~,pitch_est2]=shrp(tmp2,fs,pr,40,10);
end
mama631<
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Matlab中,您可以使用以下步骤来提取语音信号MFCC特征: 1. 读取语音信号:使用`audioread`函数读取音频文件,并将其转换为单声道信号。 ```matlab [y, fs] = audioread('audio.wav'); ``` 其中,`y`是音频信号,`fs`是采样率。 2. 预加重:对信号应用预加重滤波器以平衡高频部分和低频部分的能量。 ```matlab preEmphasized = filter([1 -0.97], 1, y); ``` 3. 分帧:将信号分成短时帧,通常每帧20-40毫秒,并且有50%的重叠。 ```matlab frameLength = 0.025; % 帧长度(秒) frameOverlap = 0.5; % 帧重叠比例 frameSamples = frameLength * fs; frameShift = floor(frameSamples * (1 - frameOverlap)); frames = buffer(preEmphasized, frameSamples, frameShift, 'nodelay'); ``` 4. 加窗:对每帧应用汉宁(Hanning)窗口以减少频谱泄漏。 ```matlab window = hamming(frameSamples); windowedFrames = frames .* window; ``` 5. 快速傅里叶变换(FFT):对每个窗口帧应用快速傅立叶变换以获取频谱。 ```matlab fftSize = 2^nextpow2(frameSamples); spectra = fft(windowedFrames, fftSize); ``` 6. 功率谱密度:计算每个频谱的功率谱密度。 ```matlab powerSpectra = abs(spectra).^2 / frameSamples; ``` 7. 梅尔滤波器组:计算梅尔滤波器组系数。 ```matlab numFilters = 26; minFrequency = 0; maxFrequency = fs/2; filterBank = melFilterBank(numFilters, fftSize, fs, minFrequency, maxFrequency); ``` 其中,`melFilterBank`是一个自定义函数,用于生成梅尔滤波器组。 8. 梅尔频谱:将功率谱密度乘以梅尔滤波器组以获得梅尔频谱。 ```matlab melSpectra = filterBank * powerSpectra(1:fftSize/2+1, :); ``` 9. 对数压缩:对梅尔频谱应用对数压缩。 ```matlab logMelSpectra = log(melSpectra); ``` 10. 离散余弦变换(DCT):对每个帧的对数梅尔频谱应用离散余弦变换以获取MFCC系数。 ```matlab mfcc = dct(logMelSpectra); ``` 最终,`mfcc`即为提取得到的MFCC特征。 希望这个回答对您有帮助!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Simuworld

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值