matlab实现PCM,关于PCM的Matlab程序,不知道如何运行

我有几个关于PCM的Matlab程序,不知道如何运行,希望大家多多指教,谢谢了。

%PCM Encoding

function [code,codeout,error,codeout2,codeout3]=PCMcoding(Range,S)

code=zeros(1,8);

%% Range=max(S);%量化范围

Normalization=abs(S)/Range;

deta=1/2048;%量化单位

if sign(S)==1%极性划分

code(1)=1;%正数

else

code(1)=0;%负数

end

detas=ceil(Normalization/deta);

%ceil(x) Round x to the nearest

%integer toward positive infinity :ceil(3.1)=4 and ceil(-3.1)=3

%detas是量化后的数值

if detas>128

code(2)=1;

if detas>512

code(3)=1;

if detas>1024

code(4)=1;

end

elseif detas>256

code(4)=1;

end

elseif detas>32

code(3)=1;

if detas>64

code(4)=1;

end

elseif detas>16

code(4)=1;

end

%以上是段落码的生成

%具体算法见《通信原理》P277

Tribal=bin2dec(num2str(code(2:4)))+1;

%   Example

%       bin2dec('010111') returns 23

%       bin2dec('010 111') also returns 23

%       bin2dec(' 010111') also returns 23

if Tribal==1

Interval=1;

else Interval=(2^(Tribal+2))/16;

end

%计算的是每段的步长 example:111代表第八段1024-2048,

%具体算法:

%111由二进制转化位十进制为7,则Tribail=7+1=8

%Interval=2^(8+2)/16=1024/16=64  即为步长

%出现bin2dec(num2str(code(2:4)))+1=0+1=1表示为第一段0-16

%当然是Interval=1;

%例子源于《通信原理》P278

if Tribal==1

code(5)=(2^3)*Interval

code(6)=code(5)*(2^3)*Interval+(2^2)*Interval

code(7)=code(5)*(2^3)*Interval+code(6)*(2^2)*Interval+(2^1)*Interval

code(8)=code(5)*(2^3)*Interval+code(6)*(2^2)*Interval+code(7)*(2^1)*Interval+(2^0)*Interval

else

code(5)=2^(Tribal+2)+(2^3)*Interval

code(6)=2^(Tribal+2)+code(5)*(2^3)*Interval+(2^2)*Interval

code(7)=2^(Tribal+2)+code(5)*(2^3)*Interval+code(6)*(2^2)*Interval+(2^1)*Interval

code(8)=2^(Tribal+2)+code(5)*(2^3)*Interval+code(6)*(2^2)*Interval+code(7)*(2^1)*Interval+(2^0)*Interval

end

%仍以上例

%+1270,段落码111,段内码0011,介于1216-1280

%最后输出为(1216+1280)/2=1248(量化单位)

if Tribal==1

codeout=code(5)*(2^3)*Interval+code(6)*(2^2)*Interval+code(7)*(2^1)*Interval+code(8)*(2^0)*Interval;

else

codeout=2^(Tribal+2)+code(5)*(2^3)*Interval+code(6)*(2^2)*Interval+code(7)*(2^1)*Interval+code(8)*(2^0)*Interval+(Interval/2);

end

%量化误差为1270-1248=22(量化单位)

error=abs(detas-codeout);

%12位的均匀量化码组

codeout2=dec2bin(codeout);

codeout3=[num2str(code(1)) codeout2];

%实现数据的A/D转换

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值