开始 取1s原始信号 抽取第i个样值 判断样值符号 归一化和量化 段落判断 段内判断 输出 是否达到给定的 抽样频率次数32 N Y 结束
function code=pcm(S)
z=sign(S);
MaxS=max(abs(S)); S=abs(S/MaxS); Q=2048*S; code=zeros(length(S),8);
a=[0,16,32,64,128,256,512,1024,2048]; b=[1,1,2,4,8,16,32,64]; for i=1:length(S) for j=1:8
if (Q(i)>=a(j))&&(Q(i)<=a(j+1)) g=dec2bin(j-1,3);
code(i,(2:4))=[str2num(g(1)) str2num(g(2)) str2num(g(3))]; q=ceil((Q(i)-a(j))/b(j)); if q==0
code(i,(5:8))=[0,0,0,0]; else k=num2str(dec2bin(q-1,4));
code(i,(5:8))=[str2num(k(1)) str2num(k(2)) str2num(k(3)) str2num(k(4))] end end end
if z(i)>0
code(i,1)=1; elseif z(i)<0 code(i,1)=0; end end
四.结果分析
1.图1,图2的区别和特征
图1和图2分别以4HZ和32Hz的频率对函数进行采样,由于图2的采样频率更高,采集的点更多,更能反映原函数的特征。
2. 图3中不同量化等级的区别
图3是对以32Hz的抽样频率进行抽样后的信号的绝对值分别进行8级和2048级均匀量化而产生的函数以及原函数的正弦波波形 ,可以明显看出2048级的量化更精准,更能反映原函数的特征。
五.实验遇到的问题及解决方法
在该实验中我们主要学习了老师的编码,体会用matlab编程的思想与方法,初步掌握了matlab的应用,之后我与闫黄一起对原来的pcm编码进行了自己的编程,通过自己的变成对matlab有了更深的了解,感受比较深的是遇到matlab编程的问题时,不仅需要自己的思考,而且也需要去与别人讨论,有时也需要向老师与同学咨询,这样才能更快掌握matlab
六.相关源程序
Even.msample.mpcm.m