⛄一、获取代码方式
获取代码方式1:
完整代码已上传我的资源:【语音编码】基于matlab语音信号PCM编解码【含Matlab源码 4175期】
点击上面蓝色字体,直接付费下载,即可。
获取代码方式2:
付费专栏Matlab语音处理(初级版)
备注:
点击上面蓝色字体付费专栏Matlab语音处理(初级版),扫描上面二维码,付费29.9元订阅海神之光博客付费专栏Matlab语音处理(初级版),凭支付凭证,私信博主,可免费获得1份本博客上传CSDN资源代码(有效期为订阅日起,三天内有效);
点击CSDN资源下载链接:1份本博客上传CSDN资源代码
⛄二、PCM编解码简介
最早的语音编码系统是采用波形编码方法, 如脉冲编码调制(PCM) 等, 这是一种基于语音信号波形的编码方式,也叫非参数编码,其目的是力图使重建的语音波形保持原语音信号的形状。这种编码器是把语音信号当成一般的波形信号来处理,它的优点是具有较强的适应能力, 有较好的合成语音质量, 然而编码速率高, 编码效率低。脉冲编码调制(PCM) 、自适应增量调制(Adaptive Delta Modulation, ADM) 、自适应差分脉冲编码调制(ADPCM) 、子带编码(Sub-Band Coding, SBC) 、变换域(Transform Coding, TC) 编码等都是属于波形编码。当编码速率为64~16kbit/s时, 波形编码方法有较高的编码质量, 但当编码速率下降时,其合成语音质量会下降得很快。
1937年, A.H.Reeves提出的脉码编码调制(PCM) 开创了语音数字化通信的历程。直至今日, 64kbit/s标准的PCM系统仍占有重要地位。PCM是最简单的波形编码形式, 它直接把语音信号进行采样量化,表示成二进制数字信号,并通过并-串转换过程转换成串行的脉冲,并用脉冲对采样幅度进行编码,以便于传输和存储,故称为脉冲编码调制。由于没有利用语音信号的冗余度, PCM编码效率很低。一般来说, PCM有均匀PCM、非均匀PCM
和自适应PCM几种形式。
1 均匀PCM
波形编码方式最简单的形式是均匀PCM。不论信号幅度的大小, 它都采用同等的量化阶距进行量化, 即采用均匀量化。均匀PCM作为一种语音信号的模/数转换(A/D转换)技术与通常的A/D转换是完全相同的。这种方式完全没有利用语音的性质,所以信号没有得到压缩。语音是非平稳随机信号,电话语音电平变化超过40dB。对小信号电平输入,信噪比(SNR) 应保证20~30dB, 即最大信噪比应需60~70dB。对于均匀量化, 假设量化误差e(k)在各个量化间隔▲的区间里均匀分布,则信号对量化噪声的信噪比可近似写为SNR(dB) =6.02B-7.2(9-5)其中,B为量化器字长。
由式(9-5) 知, 信噪比取决于量化字长。当要求60dB的SNR时, B至少应取11。此时, 对于带宽为4kHz的电话语音信号, 若采样率为8kHz, 则PCM要求的速率8x11kbit/s=88kbit/s。这样高的比特率是无法承受的, 因而必须采用具有更高性能的编码方法。
2 非均匀PCM
均匀量化的缺点就是不论语音信号的幅度大小,量化阶距保持不变。因此在信号动态范围较大而方差较小时,其信噪比下降明显。根据语音信号概率密度可知,语音信号是大量集
中在低幅度上的。因此,采用量化阶距变化的非均匀量化可以弥补均匀量化的缺点。非均匀量化在输人为低电平时量化阶距小,而高电平时量化阶距大。也就是说,信号概率密度大的区间,量化间隔应该小些;反之,信号概率密度小的区间,量化间隔应该大些。因此,非均匀量化的基本思想是对大幅度的样本使用大的A,对小幅度的样本使用小的▲,在接收端按此还原。图9-4给出了几种均匀和非均匀量化器输人输出特性比较。
非均匀量化也可看作是将信号进行非线性变换后再作均匀量化,而非线性变换后的信号
应具有均匀的(矩形)概率密度分布。通常,电话系统中使用的编码就是利用语音信号幅
度的统计特性, 对幅度按对数变换压缩, 将压缩后的信号作PCM编码, 因此称为对数PCM。当然,译码端需要按指数进行解码。因为语音信号的幅度近似为指数分布,因此进行对数变换之后,在各量化间隔内出现的概率相同,从而得到最大的信噪比。该技术称为压缩-扩张技术,其基本框图如图9-5所示。图9-6为非线性压缩示意图。
现在非均匀PCM一般采用两种压缩扩张非均匀量化方法:A律压缩扩张技术和u律压缩扩张技术。其中, 从律PCM主要在北美和日本使用, A律PCM用于其他国家和地区。这两种方式差别很小, u律压缩是最常用的一种。在美国, 7位p律PCM一般已被接受为长途
电话质量的标准。设x(n)为语音波形的取样值,则u律压缩的定义为
式中,X…是x(n)的最大幅度;p是表示压缩程度的参量,p=0表示没有压缩,p越大压缩
率越高,故称之为u律压缩。通常p在100~500取值。当u=255时,可以对电话质量语音
进行编码,解码后的音质与12位均匀量化的音质相当。
我国则采用A律压缩,其压缩公式为
图9-7给出了p律和A律压缩输人输出特性图。
3 自适应PCM(APCM)
PCM在量化间隔上存在着矛盾:为适应大的幅值要用大的量化间隔A, 但为了提高信噪比又希望用小的量化间隔▲。前面介绍的两种PCM编码都有一个共同的特点, 就是量化器
一旦确定以后,量化间隔就固定下来,不随输人语音信号的幅度变化而变化。而自适应
PCM(Adaptive PCM, A PCM) 使量化器的特性自适应于输人信号的幅值变化, 也就是量化间隔A匹配于输人信号的方差值,或使量化器的增益G随着幅值而变化,从而使量化前信号的能量为恒定值。图9-8为这两种自适应方法的原理图。
如果按自适应参数A(n)或G(n)的来源划分,自适应量化又分为前馈自适应和反馈自适应两种。前馈自适应是指A(n)或G(n)是通过对输人信号估计得到的,而反馈自适应是由估计量化器的输出(n)或编码器的输出c(n)而得到的。图9-9以A(n)为例给出了这两种系统框图。
前馈自适应是计算信号有效值并决定最合适的量化间隔,用此量化间隔控制量化器Q[·],并将量化间隔信息发送给接收端;而反馈自适应是由编码器输出c(n)来决定量化间隔A(n),而在接收端由量化传输来的幅度信息自动生成量化间隔。显然,反馈与前馈相比的优点是无需将▲传送到信道中去,但对误差的灵敏度较高。通常,采用了自适应技术之后可得到4~6dB的编码增益。
不论前馈自适应还是反馈自适应,其参数A(n)或G(n)均由下式产生:
即A(n)正比于方差o(n),而G(n)反比于o(n)。同时,o(n)正比于信号的短时能量,即
式中,h(n)就是短时能量定义中的低通滤波器的单位函数响应。
⛄三、部分源代码
[x,fs]=audioread(‘test1.wav’);
subplot(211);plot(x);title(‘抽样信号’);
n=length(x);
M=max(x);
A=(x/M)*2048;
code=zeros(n,8);
for i=1:n
if A(i)>=0
code(i,1)=1;
else
code(i,1)=0;
end
if abs(A(i))>=0&&abs(A(i))<16
code(i,2)=0;code(i,3)=0;code(i,4)=0;step=1;start=0;
elseif 16<=abs(A(i))&&abs(A(i))<32
code(i,2)=0;code(i,3)=0;code(i,4)=1;step=1;start=16;
elseif 32<=abs(A(i))&&abs(A(i))<64
code(i,2)=0;code(i,3)=1;code(i,4)=0;step=2;start=32;
elseif 64<=abs(A(i))&&abs(A(i))<128
code(i,2)=0;code(i,3)=1;code(i,4)=1;step=4;start=64;
elseif 128<=abs(A(i))&&abs(A(i))<256
code(i,2)=1;code(i,3)=0;code(i,4)=0;step=8;start=128;
elseif 256<=abs(A(i))&&abs(A(i))<512
code(i,2)=1;code(i,3)=0;code(i,4)=1;step=16;start=256;
elseif 512<=abs(A(i))&&abs(A(i))<1024
code(i,2)=1;code(i,3)=1;code(i,4)=0;step=32;start=512;
elseif 1024<=abs(A(i))&&abs(A(i))<2048
code(i,2)=1;code(i,3)=1;code(i,4)=1;step=64;start=1024;
end
⛄四、运行结果
⛄五、matlab版本及参考文献
1 matlab版本
2014a
2 参考文献
[1]韩纪庆,张磊,郑铁然.语音信号处理(第3版)[M].清华大学出版社,2019.
[2]柳若边.深度学习:语音识别技术实践[M].清华大学出版社,2019.
3 备注
简介此部分摘自互联网,仅供参考,若侵权,联系删除