?? 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 + -