📄 pcm.asv
字号:
%修改抽样间隔和程序最后两行%可以观察量化输入输出n=input('请输入量化级数,k=[8]');if isempty(n), n=8;end%产生题目要求的函数endtime = 2; %结束时间dt = 0.5; %抽样间隔%dt = 0.005;t = 0:dt:endtime;a = zeros(size(t)); %产生一个长度为N的全0序列for tt=1:1/dt a(tt+[0:endtime/2-1]*(2/dt))=t(tt); %t when 0 <= t < 1endfor tt=1/dt+1:2/dt a(tt+[0:endtime/2-1]*(2/dt))=2-t(tt); % -t+2 when 1 <= t < 2end;%初始化amax=max(abs(a));a_quan=a/amax;%归一化b_quan=a_quan;%赋初值d=1/n;%量化间隔q=d.*[1:n];q=q-d/2;%量化电平%进行量化for i=1:n%定位第i个量化间隔码子 a_quan(find((q(i)-d/2<=a_quan) & (a_quan<=q(i)+d/2)))=... q(i).*ones(1,length(find((q(i)-d/2<=a_quan)&(a_quan<=q(i)+d/2))));%赋值为相应的量化电平 b_quan(find(a_quan==q(i))) =(i-1) .* ones(1,length(find(a_quan==q(i))));enda_quan=a_quan*amax;%恢复原值(量化后)nu=ceil(log2(n));%编码code=zeros(length(a),nu);for i=1:length(a) for j=nu:-1:0 if (fix(b_quan(i)/(2^j))==1) code(i,(nu-j))=1; b_quan(i)=b_quan(i)-2^j; end endendsqnr=20*log10(norm(a)/norm(a-a_quan));%求量化信噪比disp('量化信噪比')disp(sqnr)disp('量化误差')disp(a - a_quan)disp('编码结果')disp(code)plot(t,a,'r-')hold on;plot(t,a_quan,'.b')%plot(t,a_quan,'b-')%axis([0 1 0 1])
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -