基于ACF,AMDF算法的语音编码matlab仿真

举报
简简单单做算法 发表于 2023/10/18 23:31:49 2023/10/18
【摘要】 1.算法运行效果图预览 2.算法运行软件版本matlab2022a 3.算法理论概述       语音编码是一种将连续的语音信号转换为数字数据的过程,以便在数字通信和存储应用中使用。基于ACF和AMDF的编码算法是一种经典的方法,它在语音信号处理领域得到了广泛应用。基于ACF和AMDF的语音编码过程包括以下步骤: 预处理:对原始语音信号进行预加重、分帧、窗函数等处理,以提取有用的特征。计算A...

1.算法运行效果图预览

1.jpeg

2.jpeg

3.jpeg

4.jpeg

 

2.算法运行软件版本

matlab2022a

 

3.算法理论概述

       语音编码是一种将连续的语音信号转换为数字数据的过程,以便在数字通信和存储应用中使用。基于ACFAMDF的编码算法是一种经典的方法,它在语音信号处理领域得到了广泛应用。

基于ACFAMDF的语音编码过程包括以下步骤:

 

预处理:对原始语音信号进行预加重、分帧、窗函数等处理,以提取有用的特征。

计算ACFAMDF:计算每一帧的ACFAMDF函数,以便估计基频的候选周期。

基频估计:通过在AMDF函数中寻找最小值,确定基频的候选周期。

量化:将基频的候选周期量化为离散值,以便编码和传输。

编码:使用合适的编码方法(如霍夫曼编码)对量化后的数据进行编码,以减小数据的传输带宽。

 

基于ACFAMDF的语音编码方法在以下领域得到应用:

电话通信:在语音通话中,使用这些方法进行语音信号的压缩和传输。

语音存储:将语音信号转换为数字数据,以便在设备中进行存储。

语音识别:用于基频估计,有助于识别语音中的音素和音节。

语音合成:用于合成自然的语音声音。

 

 

       基于ACFAMDF的语音编码方法利用了自相关性和平均差分来估计语音信号中的基频信息。这些方法在语音处理中有着重要的应用,为语音通信、存储和分析提供了有效的解决方案。

 

 

4.部分核心程序

plotFlag        = 0; %绘图标识位
istrain         = 0;
%1.预处理,滤波
%1.预处理,滤波
 
%2.预加重 
%2.预加重 
 
%3.清、浊音判决的分析及量化
%低带能量:通过一个截止频率为900Hz 阻带为10dB的低通滤波器
Wp   = 900/4000;
[b,a]= cheby2(6,10,Wp,'low');
yLF  = filter(b,a,yPre);
plot3;
 
%成帧
[yFrame,nF]    = func_enFrame(yLF); 
 
%短时能量来区分清/浊音
VoiceSoundFlag = func_short_energy(yFrame,nF);
 
%二阶逆滤波(白化滤波)
yFrame         = inverseFilter(yFrame,nF); 
 
%获得基音周期(AMDF)
pitchT         = func_GetPitch(yFrame,VoiceSoundFlag,nF); 
 
%计算增益(RMS)
RMS            = func_RMS(yFrame,VoiceSoundFlag,pitchT,nF);
 
%LPC预测阶数
[Vlpc,Vlsf]    = func_LPC_Order(yFrame,nF);
 
%矢量量化采用王炳锡书5.8章红圈的方法,并组帧
%训练,得到码本,这里需要大量的语音库,这里仅仅提供算法流程,训练库使用少量样本
if istrain == 1
   tops; 
   load Train\code_save.mat 
else
   load Train\code_save.mat 
end
 
figure;
K1 = 1;
K2 = 2;
plot(lsf{1}(K1,:), lsf{1}(K2,:), 'xr');
hold on;
plot(code{1}(K1,:),code{1}(K2,:), 'vk');
hold on;
plot(lsf{2}(K1,:), lsf{2}(K2,:),  'xb');
hold on;
plot(code{2}(K1,:),code{2}(K2,:), '+k');
hold on;
 
xlabel('2th Dimension');
ylabel('6th Dimension');
legend('Speaker 1', 'Codebook 1', 'Speaker 2', 'Codebook 2');
title('2D plot of accoustic vectors');
 
%VQ发送
Frame = func_vq_trans(Vlsf,pitchT,RMS,VoiceSoundFlag,nF,code);
 
%计算压缩对比
Rate = func_size_cal(yOri,Frame);
 
 
%接收,矢量解码器
[Vlsf3,VQ_decode,lsf_code,VoiceSoundFlag3,RMS3,pitchT3] = func_vq_rec(Frame,nF,code);
 
%解码
yCom = func_decode(Vlsf3,VoiceSoundFlag3,pitchT3,RMS3,nF);
 
%去加重
b    = 1;
a    = [1 -0.9375];
yCom = filter(b,a,yCom);
sound(yCom,Fs); 
 
 
figure;
subplot(311);
plot(yOri);
 
subplot(312);
plot(pitchT);
 
subplot(313);
plot(yCom);
【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。