%PCM编码函数
function[out]=pcm_encode(x)
n=length(x); %-4096<x<4096
for i=1:n
if x(i)>0
out(i,1)=1; %根据符号输出第1位量化结果
else
out(i,1)=0;
end
if abs(x(i))>=0 & abs(x(i))<32 %根据输入范围输出后2-4位
out(i,2)=0; out(i,3)=0; out(i,4)=0; step=2;st=0;
elseif 32<=abs(x(i)) & abs(x(i))<64
out(i,2)=0; out(i,3)=0; out(i,4)=1; step=2;st=32;
elseif 64<=abs(x(i)) & abs(x(i))<128
out(i,2)=0; out(i,3)=1; out(i,4)=0; step=4;st=64;
elseif 128<=abs(x(i)) & abs(x(i))<256
out(i,2)=0; out(i,3)=1; out(i,4)=1; step=8;st=128;
elseif 256<=abs(x(i)) & abs(x(i))<512
out(i,2)=1; out(i,3)=0; out(i,4)=0; step=16;st=256;
elseif 512<=abs(x(i)) & abs(x(i))<1024
out(i,2)=1; out(i,3)=0; out(i,4)=1; step=32;st=512;
elseif 1024<=abs(x(i)) & abs(x(i))<2048
out(i,2)=1; out(i,3)=1; out(i,4)=0; step=64;st=1024;
elseif 2048<=abs(x(i)) & abs(x(i))<4096
out(i,2)=1; out(i,3)=1; out(i,4)=1; step=128;st=2048;
else
out(i,2)=1; out(i,3)=1; out(i,4)=1; step=128;st=2048;
end
if(abs(x(i))>=4096) %超出最大幅值的量化结果
out(i,2:8)=[1 1 1 1 1 1 1];
else %未超出,计算后四位
tmp=floor((abs(x(i))-st)/step);
t=dec2bin(tmp,4)-48; %十进制转为4位二进制字符串
out(i,5:8)=t(1:4);
end
end
out=reshape(out',1,8*n); %调整为长为8n的行向量
没有合适的资源?快使用搜索试试~ 我知道了~
MATLAB实现PCM编解码实验【语音信号处理实战】.zip
共4个文件
m:3个
wav:1个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 153 浏览量
2023-04-14
13:13:04
上传
评论
收藏 8KB ZIP 举报
温馨提示
MATLAB实现语音信号处理实战。 项目代码可直接编译运行~
资源推荐
资源详情
资源评论
收起资源包目录
MATLAB实现PCM编解码实验【语音信号处理实战】.zip (4个子文件)
MATLAB实现PCM编解码实验【语音信号处理实战】
C6_1_y_1.m 507B
pcm_encode.m 2KB
C6_1_y.wav 17KB
pcm_decode.m 752B
共 4 条
- 1
资源评论
不脱发的程序猿
- 粉丝: 24w+
- 资源: 5763
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功