实验三模拟-数字转换

上传人:今*** 文档编号:108122736 上传时间:2019-10-22 格式:DOC 页数:16 大小:1.36MB
返回 下载 相关 举报
实验三模拟-数字转换_第1页
第1页 / 共16页
实验三模拟-数字转换_第2页
第2页 / 共16页
实验三模拟-数字转换_第3页
第3页 / 共16页
实验三模拟-数字转换_第4页
第4页 / 共16页
实验三模拟-数字转换_第5页
第5页 / 共16页
点击查看更多>>
资源描述

《实验三模拟-数字转换》由会员分享,可在线阅读,更多相关《实验三模拟-数字转换(16页珍藏版)》请在金锄头文库上搜索。

1、实验三 模拟-数字转换一、实验预习: 1.概述 2.Huffman编码 3.量化4.均匀PCM平按已量化值的递增次序映射。5.非均匀PCM二、实验内容(题目解答):1. 编码实验代码:主函数:clc;p=0.2 0.15 0.13 0.12 0.1 0.09 0.08 0.07 0.06;h,l=huffman(p);H=entropy(p);求熵函数:function h=entropy(p)if length(find(p10e-10, error(Not a prob. vector, components do not add up to 1)endh=sum(-p.*log2(p);

2、Huffman编码函数:function h,l=huffman(p); if length(find(p10e-10, error(Not a prob. vector, components do not add up to 1)endn=length(p);q=p;m=zeros(n-1,n);for i=1:n-1 q,l=sort(q); m(i,:)=l(1:n-i+1),zeros(1,i-1); q=q(1)+q(2),q(3:n),1;endfor i=1:n-1 c(i,:)=blanks(n*n);endc(n-1,n)=0;c(n-1,2*n)=1;for i=2:n-

3、1 c(n-i,1:n-1)=c(n-i+1,n*(find(m(n-i+1,:)=1). -(n-2):n*(find(m(n-i+1,:)=1); c(n-i,n)=0; c(n-i,n+1:2*n-1)=c(n-i,1:n-1); c(n-i,2*n)=1; for j=1:i-1 c(n-i,(j+1)*n+1:(j+2)*n)=c(n-i+1,. n*(find(m(n-i+1,:)=j+1)-1)+1:n*find(m(n-i+1,:)=j+1); endendfor i=1:n h(i,1:n)=c(1,n*(find(m(1,:)=i)-1)+1:find(m(1,:)=i)*

4、n); l1(i)=length(find(abs(h(i,:)=32);endl=sum(p.*l1);实验结果:Huffman编码结果:平均码长:信源的熵:2. 量化实验代码:主函数:echo on ;a=-20,-5,-4,-3,-2,-1,0,1,2,3,4,5,20;y,dist=mse_dist(normal,a,0.01,0,1);for i=1:length(a)-1 y(i)=centroid(normal,a(i),a(i+1),0.001,0,1); echo off ;end子函数:function dist=uq_mdpnt(funfcn,b,n,delta,tol,

5、p1,p2,p3) if (2*bdelta*(n-1) error(Too many levels for this range.); returnendargs=;for j=1:nargin-5 args=args,p,int2str(j);endargs=args,);a(1)=-b;a(n+1)=b;a(2)=-(n/2-1)*delta;y(1)=a(2)-delta/2;for i=3:n a(i)=a(i-1)+delta; y(i-1)=a(i)-delta/2;endy(n)=a(n)+delta;dist=0;for i=1:n newfun = x_a2_fnct ;

6、dist=dist+eval(quad(newfun,a(i),a(i+1),tol,funfcn, num2str(y(i), args);endfunction y,dist=uq_dist(funfcn,b,c,n,delta,s,tol,p1,p2,p3) if (c-bdelta*(n-2) error(Too many levels for this range.); returnendif (sc) error(The leftmost boundary too large.); returnendargs=;for j=1:nargin-7 args=args,p,int2st

7、r(j);endargs=args,);a(1)=b;for i=2:n a(i)=s+(i-2)*delta;enda(n+1)=c;y,dist=eval(mse_dist(funfcn,a,tol,args);实验结果:均方误差:dist = 0.0769量化值:y = -5.0168 -4.2168 -3.2605 -2.3158 -1.3832 -0.4599 0.4599 1.3832 2.3158 3.2605 4.2168 5.01683. 均匀PCM 实验代码:主函数:echo ont=0:0.01:10;a=sin(t);sqnr8,aquan8,code8=u_pcm(a

8、,8);sqnr16,aquan16,code16=u_pcm(a,16);pause % Press a key to see the SQNR for N=8.sqnr8pause % Press a key to see the SQNR for N=16.sqnr16pause % Press a key to see the first five quantized values.plot(t,a,-,t,aquan8,-,t,aquan16,-,t,zeros(1,length(t);title(用8电平和16电平对一个正弦信号进行的均匀PCM); 子函数:function sqn

9、r,a_quan,code=u_pcm(a,n)amax=max(abs(a);a_quan=a/amax;b_quan=a_quan;d=2/n;q=d.*0:n-1;q=q-(n-1)/2)*d;for i=1:n 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) );

10、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)/(2j) = 1) code(i,(nu-j) = 1; b_quan(i) = b_quan(i) - 2j; end endendsqnr=20*log10(norm(a)/norm(a-a_quan); 实验结果: 所得的SQNR是:sqnr8 = 18.9023 sqnr16 = 25.1272 4. 非均匀PCM 实验代码: 主函数:echo ont=0:0.

11、01:10;a=20*randn(1,20),randn(1,480);n=64;sqnr,aquan,code=u_pcm(a,64);pause % Press a key to see the SQNR .sqnrpause plot(a);pauseplot(aquan,-);sqnr1,aquan1,code1=mula_pcm(a,64,255);pause % Press a key to see the SQNR .sqnr1pause plot(aquan1,-);子函数:function sqnr,a_quan,code=mula_pcm(a,n,mu)y,maximum=

12、mulaw(a,mu);sqnr,y_q,code=u_pcm(y,n);a_quan=invmulaw(y_q,mu);a_quan=maximum*a_quan;sqnr=20*log10(norm(a)/norm(a-a_quan);function sqnr,a_quan,code=u_pcm(a,n)amax=max(abs(a);a_quan=a/amax;b_quan=a_quan;d=2/n;q=d.*0:n-1;q=q-(n-1)/2)*d;for i=1:n a_quan(find(q(i)-d/2 = a_quan) & (a_quan = q(i)+d/2)=. q(i

13、).*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)/(2j) = 1) code(i,(nu-j) = 1; b_quan(i) = b_quan(i) - 2j; end endendsqnr=20*log10(norm(a)/norm(a-a_quan);实验结果:

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号