【语音编码】基于matlab ADPCM编解码【G.723.1】(Matlab代码实现)

 ‍个人主页:研学社的博客 

欢迎来到本博客❤️❤️

博主优势:博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。

⛳️座右铭:行百里者,半于九十。

本文目录如下:

目录

1 概述

2 运行结果

3 Matlab代码实现

4 参考文献


1 概述

在研究了发声器官和语音的产生过程以后,便可以建立一个离散时域的语音信号产生模型,对于进一步的各项研究以及各种具体应用,这个模型是非常重要的。这里先给出一个较简单的模型如图2-1所示,对于大多数研究和应用而言(例如语音编码,语音识别等),这个模型可以完全满足需要。
 

【语音编码】基于matlab ADPCM编解码【G.723.1】(Matlab代码实现)_第1张图片

图中给出了这个语音产生的离散时域模型。它包括三个部分:激励源、声道模型和辐射模型。激励源分浊音和清音两个分支,按照浊音/清音开关所处的位置来决定产生的语音是浊音还是清音。
在浊音的情况下,激励信号由一个周期脉冲发生器产生。所产生的序列是一个周期为N的冲激序列,即每隔N点便有一个样值为 1,而其它样值都为0。周期加取决于基音频率和语音信号采样频
率。在清音的情况下,激励信号由一个随机噪声发生器产生。可设定其平均值为0,其自关函数是一个单位冲激函数。这表明它的任何两个不同样点都不相关且其均方差值为1。
 

2 运行结果

【语音编码】基于matlab ADPCM编解码【G.723.1】(Matlab代码实现)_第2张图片

3 Matlab代码实现

部分代码:

fid = fopen(fullfile(G271RootPath,'data','ExampleAudioInput2.txt'),'rt');    %读文件,文件格式为.txt
a=fscanf(fid,'%e\n');
fclose(fid);
%fid=('ling11.wav');wavwrite(44100,fid);  %转换回wav格式音频文件

fid = fopen(fullfile(G271RootPath,'data','ExampleAudioOutput2.txt'),'wt');
for  i = 1:size(a,1)
    Slk=a(i);     %输入信号
    [coe,coe1,coe2,coe3,Dqk] = adpcm(Slk,coe,coe1,coe2,coe3,Dqk);  
    %调用语音编解码函数
    fprintf(fid,'%f\n',coe2(5));
end
fclose(fid)

%---------------波形显示--------------
fid = fopen(fullfile(G271RootPath,'data','ExampleAudioInput2.txt'),'rt');
a=fscanf(fid,'%e\n');
fid = fopen(fullfile(G271RootPath,'data','ExampleAudioOutput2.txt'),'rt');
b=fscanf(fid,'%e\n');
subplot(211),plot(a);
title('输入语音波形');
subplot(212),plot(b);
title('解码输出波形');

4 参考文献

部分理论来源于网络,如有侵权请联系删除。

[1]陈云凤,伍康文.一种基于波形变换域的分段ADPCM语音编码算法[J].数据采集与处理,1992(03):169-175.DOI:10.16337/j.1004-9037.1992.03.003.

[2]宁静. 语音编码G.723.1在TMS320C5402上的实时实现[D].天津大学,2007. 

你可能感兴趣的:(#,adpcm,语音编码,ADPCM,G.723.1)