发布网友 发布时间:2023-06-23 11:09
共1个回答
热心网友 时间:2023-10-09 18:12
%修改抽样间隔为0.1和程序最后两行%可以观察量化输入输出关系n=input('量化级数,k=[8]');if isempty(n), n=64; %默认便产生8个量化级数end%产生题目要求的函数endtime = 2; %结束时间dt = 0.1; %抽样间隔.抽样20个点t = 0:dt:endtime; %0:0.1:2a = zeros(size(t)); %产生一个长度为20的全0序列 size(t)->20for tt=1:1/dt %1:10 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求绝对值并将最大值赋给amaxa_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)); %求量化信噪比