首页 > 编程语言 >基于ACF,AMDF算法的语音编码matlab仿真

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

时间:2023-10-18 23:46:42浏览次数:44  
标签:plot code ACF AMDF nF 语音 matlab func

1.算法运行效果图预览

 

 

 

2.算法运行软件版本

matlab2022a

 

3.算法理论概述

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

 

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

 

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

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

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

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

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

 

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

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

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

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

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

 

 

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

 

 

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);

  

标签:plot,code,ACF,AMDF,nF,语音,matlab,func
From: https://www.cnblogs.com/matlabworld/p/17773678.html

相关文章

  • 通过MATLAB自动产生Hamming编译码的verilog实现,包含testbench
    1.算法运行效果图预览 2.算法运行软件版本matlab2022a和vivado2019.2 3.算法理论概述       Hamming编码是一种用于纠错错误的线性分组码。它是由理查德·哈明(RichardHamming)在20世纪中期提出的,用于在数字通信和存储系统中检测和纠正传输过程中产生的错误。本......
  • m基于FPGA的OFDM系统中降PAPR技术的实现,包含testbench测试文件和MATLAB辅助测试
    1.算法仿真效果本系统进行了Vivado2019.2平台的开发:将FPGA的仿真结果导入matlab中,并通过matlab2022a进行papr对比:2.算法涉及理论知识概要峰值平均功率比(PAPR—PeaktoAveragePowerRatio),简称峰均比(PAPR)。MIMO-OFDM系统能够提供更大的覆盖范围、更好的传输质量、更高的数......
  • m基于FPGA的OFDM系统中降PAPR技术的实现,包含testbench测试文件和MATLAB辅助测试
    1.算法仿真效果本系统进行了Vivado2019.2平台的开发: 将FPGA的仿真结果导入matlab中,并通过matlab2022a进行papr对比: 2.算法涉及理论知识概要        峰值平均功率比(PAPR—PeaktoAveragePowerRatio),简称峰均比(PAPR)。MIMO-OFDM系统能够提供更大的覆盖范围、......
  • 微波技术基础——单枝节匹配的计算机解(MATLAB)
    一、实验目的使用计算机程序计算单枝节匹配的问题,得到传输线段长度和枝节长度二、实验思路设归一化负载阻抗为,通过传输线长度的阻抗为其中于是可以得到传输线长度的导纳为很容易得到又因为并联枝节的匹配条件是解得同时可以得到传输线段长度和枝节长度的解三、......
  • Matlab 2023b 中文版 下载安装及永久激活教程!
    软件介绍:MatlabR2023b是MathWorks公司推出的一款专业的数值计算和数据可视化软件。它是Matlab软件系列的最新版本,具有许多强大的功能和工具,适用于科学、工程和金融等领域的数据分析和模拟。  安装和使用教程:1.通过文章末尾处下载软件后,选中下载的【MATLABR2023b(64bit)】压缩包......
  • 解决Matlab遇到的svmtrain (line 234) Y must be a vector or a character array.
    解决Matlab遇到的svmtrain(line234)Ymustbeavectororacharacterarray.在使用MATLAB进行SVM分类器训练时,有时会出现以下错误提示:svmtrain(line234)Ymustbeavectororacharacterarray.这个错误是由于目标变量Y的类型不正确导致的。本文将介绍如何解决这个问题......
  • Matlab 2023a 中文版 下载安装及永久激活教程!
    软件介绍:MATLABR2023a是一款由MathWorks公司开发的著名专业编程和数学计算软件,为用户提供了一个高效、灵活和易用的环境,用于进行数值计算、数据可视化、算法开发、数据分析等任务。 安装和使用教程:1.通过文章末尾处下载软件后,选中下载的【Matlab2023a】压缩包,右击选择解压到【Ma......
  • 【福利】基于matlab生成任意多面体有界 Voronoi 图附完整代码
    ✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。......
  • 基于LEACH路由协议的网络性能matlab仿真,包括数据量,能耗,存活节点
    1.程序功能描述    LEACH的原理在于它将传感器节点分为两类:簇头节点和普通节点。普通节点将数据发送给距离自己最近的簇头节点,然后簇头节点将收集到的数据融合后发送给基站。这种机制可以减少网络中节点的能耗,并且能够提高数据融合比例,减少传输数据量。本课题将分别对比le......
  • Matlab simulink常见问题和数据导出到变量区
    ✅作者简介:热爱科研的算法开发者,Python、Matlab项目可交流、沟通、学习。......