实验三 模拟数字转换.docx

上传人:b****3 文档编号:13019115 上传时间:2023-04-22 格式:DOCX 页数:21 大小:1.26MB
下载 相关 举报
实验三 模拟数字转换.docx_第1页
第1页 / 共21页
实验三 模拟数字转换.docx_第2页
第2页 / 共21页
实验三 模拟数字转换.docx_第3页
第3页 / 共21页
实验三 模拟数字转换.docx_第4页
第4页 / 共21页
实验三 模拟数字转换.docx_第5页
第5页 / 共21页
点击查看更多>>
下载资源
资源描述

实验三 模拟数字转换.docx

《实验三 模拟数字转换.docx》由会员分享,可在线阅读,更多相关《实验三 模拟数字转换.docx(21页珍藏版)》请在冰豆网上搜索。

实验三 模拟数字转换.docx

实验三模拟数字转换

实验三模拟-数字转换

一、实验预习:

1.概述

2.Huffman编码

3.量化

4.均匀PCM

平按已量化值的递增次序映射。

5.非均匀PCM

二、实验内容(题目解答):

1.编码

实验代码:

主函数:

clc;

p=[0.20.150.130.120.10.090.080.070.06];

[h,l]=huffman(p);

H=entropy(p);

求熵函数:

functionh=entropy(p)

iflength(find(p<0))~=0,

error('Notaprob.vector,negativecomponent(s)')

end

ifabs(sum(p)-1)>10e-10,

error('Notaprob.vector,componentsdonotaddupto1')

end

h=sum(-p.*log2(p));

Huffman编码函数:

function[h,l]=huffman(p);

iflength(find(p<0))~=0,

error('Notaprob.vector,negativecomponent(s)')

end

ifabs(sum(p)-1)>10e-10,

error('Notaprob.vector,componentsdonotaddupto1')

end

n=length(p);

q=p;

m=zeros(n-1,n);

fori=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];

end

fori=1:

n-1

c(i,:

)=blanks(n*n);

end

c(n-1,n)='0';

c(n-1,2*n)='1';

fori=2:

n-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';

forj=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));

end

end

fori=1:

n

h(i,1:

n)=c(1,n*(find(m(1,:

)==i)-1)+1:

find(m(1,:

)==i)*n);

l1(i)=length(find(abs(h(i,:

))~=32));

end

l=sum(p.*l1);

实验结果:

Huffman编码结果:

平均码长:

信源的熵:

2.量化

实验代码:

主函数:

echoon;

a=[-20,-5,-4,-3,-2,-1,0,1,2,3,4,5,20];

[y,dist]=mse_dist('normal',a,0.01,0,1);

fori=1:

length(a)-1

y(i)=centroid('normal',a(i),a(i+1),0.001,0,1);

echooff;

end

子函数:

functiondist=uq_mdpnt(funfcn,b,n,delta,tol,p1,p2,p3)

if(2*b

error('Toomanylevelsforthisrange.');return

end

args=[];

forj=1:

nargin-5

args=[args,',p',int2str(j)];

end

args=[args,')'];

a

(1)=-b;

a(n+1)=b;

a

(2)=-(n/2-1)*delta;

y

(1)=a

(2)-delta/2;

fori=3:

n

a(i)=a(i-1)+delta;

y(i-1)=a(i)-delta/2;

end

y(n)=a(n)+delta;

dist=0;

fori=1:

n

newfun='x_a2_fnct';

dist=dist+eval(['quad(newfun,a(i),a(i+1),tol,[],funfcn,',num2str(y(i)),args]);

end

 

function[y,dist]=uq_dist(funfcn,b,c,n,delta,s,tol,p1,p2,p3)

if(c-b

error('Toomanylevelsforthisrange.');return

end

if(s

error('Theleftmostboundarytoosmall.');return

end

if(s+(n-2)*delta>c)

error('Theleftmostboundarytoolarge.');return

end

args=[];

forj=1:

nargin-7

args=[args,',p',int2str(j)];

end

args=[args,')'];

a

(1)=b;

fori=2:

n

a(i)=s+(i-2)*delta;

end

a(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.45990.45991.38322.31583.26054.21685.0168

3.均匀PCM

实验代码:

主函数:

echoon

t=[0:

0.01:

10];

a=sin(t);

[sqnr8,aquan8,code8]=u_pcm(a,8);

[sqnr16,aquan16,code16]=u_pcm(a,16);

pause%PressakeytoseetheSQNRforN=8.

sqnr8

pause%PressakeytoseetheSQNRforN=16.

sqnr16

pause%Pressakeytoseethefirstfivequantizedvalues.

plot(t,a,'-',t,aquan8,'-',t,aquan16,'-',t,zeros(1,length(t)));

title('用8电平和16电平对一个正弦信号进行的均匀PCM');

子函数:

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;

fori=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))));

end

a_quan=a_quan*amax;

nu=ceil(log2(n));

code=zeros(length(a),nu);

fori=1:

length(a)

forj=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

end

end

sqnr=20*log10(norm(a)/norm(a-a_quan));

实验结果:

所得的SQNR是:

sqnr8=18.9023sqnr16=25.1272

4.非均匀PCM

实验代码:

主函数:

echoon

t=[0:

0.01:

10];

a=[20*randn(1,20),randn(1,480)];

n=64;

[sqnr,aquan,code]=u_pcm(a,64);

pause%PressakeytoseetheSQNR.

sqnr

pause

plot(a);

pause

plot(aquan,'-');

[sqnr1,aquan1,code1]=mula_pcm(a,64,255);

pause%PressakeytoseetheSQNR.

sqnr1

pause

plot(aquan1,'-');

子函数:

function[sqnr,a_quan,code]=mula_pcm(a,n,mu)

[y,maximum]=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;

fori=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))));

end

a_quan=a_quan*amax;

nu=ceil(log2(n));

code=zeros(length(a),nu);

fori=1:

length(a)

forj=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

end

end

sqnr=20*log10(norm(a)/norm(a-a_quan));

实验结果:

sqnr=19.7348

sqnr1=24.1075

三、实验分析与讨论

1.信号量化的目的是什么?

用有限的离散值近似模拟原始信号的振幅,在接收端由这些有限的离散值恢复原始信号。

2.量化信号有哪些优缺点?

缺点:

无论抽样值大小如何,量化噪声的均方根值都是固定不变的。

因此,当信号

较小时,则信号量化噪声功率比也比较小,这样,对于弱信号时的信号量噪比就难以达到给定的要求。

3.什么是A率压缩和

率压缩?

它们各自有什么特点?

A压缩律是指符合下式的对数压缩规律:

律压缩特性:

4.在PCM系统中,信号量噪比是指什么,它和信号带宽有什么关系?

信号功率与量化噪声之比简称信号量噪声比。

当低通信号最高频率

给定时,PCM系统的输出信号量噪比随系统的带宽B按指数规律增长。

四、思考题

1、实验1中Huffman码的效率是多少?

Huffman码唯一吗?

为什么?

答:

霍夫曼编码效率等于熵/平均码长,已知熵为3.0371,平均码长为3.1,所以霍夫曼编码效率为0.98。

霍夫曼码不唯一,因为在进行概率相加时,可能会出现上一次的和与某一个概率一样,此时有向上和向下两种编码方式,因此造成霍夫曼码不唯一。

2、

.

答:

3、

答:

代码:

%均匀PCM量化器

n=input('请输入量化级数:

');

endtime=2;%定义信号周期为2

dt=0.5;%定义抽样间隔为0.5

t=0:

dt:

endtime;%划分数组

a=zeros(size(t));

fortt=1:

1/dt

a(tt+[0:

endtime/2-1]*(2/dt))=t(tt);%当0<=t<1时,x(t)=t

end

fortt=1/dt+1:

2/dt

a(tt+[0:

endtime/2-1]*(2/dt))=2-t(tt);%当1<=t<2时,x(t)=-t+2

end

amax=max(abs(a));%max求最大值,abs求绝对值

a_quan=a/amax;%归一化

b_quan=a_quan;%赋初值

d=1/n;%求出量化间隔

q=d.*[1:

n];

q=q-d/2;%求出量化电平

%进行量化

fori=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))));

end

a_quan=a_quan*amax;%恢复原值(量化后)

%编码

nu=ceil(log2(n));%ceil返回大于或者等于指定表达式的最小整数

code=zeros(length(a),nu);

fori=1:

length(a)

forj=nu:

-1:

0

if(fix(b_quan(i)/(2^j))==1)%fix向最靠近0取整

code(i,(nu-j))=1;

b_quan(i)=b_quan(i)-2^j;

end

end

end

sqnr=20*log10(norm(a)/norm(a-a_quan));%求量化信噪比

disp('系统的量化信噪比:

')

disp(sqnr)

disp('系统的量化误差:

')

disp(a-a_quan)

disp('系统的量化编码结果:

')

disp(code)

plot(t,a,'r-')

holdon;

plot(t,a_quan,'b--')

8电平的结果截图:

16电平的结果截图:

 

五、实验心得

此次实验内容为模数转换,主要为将模拟信号转换成数字信号进行抽样量化编码等过程,通过本次实验,我了解了哈弗曼编码的原理及过程,以前学过哈弗曼编码理论原理,这次通过matlab仿真又加深了印象,还有计算编码效率,对比出来霍夫曼编码方式是最优的。

然后是量化,也就是有损数据压缩,抽样信号必须经过量化才能转化成数字信号。

然后分别使用了均匀PCM和非均匀PCM的原理,对信号进行变换

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 农学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1