- 1、本文档共16页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
实验三 模拟-数字转换
一、实验预习:
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(p0))~=0,
error(Not a prob. vector, negative component(s))
end
if abs(sum(p)-1)10e-10,
error(Not a prob. vector, components do not add up to 1)
end
h=sum(-p.*log2(p));
Huffman编码函数:
function [h,l]=huffman(p);
if length(find(p0))~=0,
error(Not a prob. vector, negative component(s))
end
if abs(sum(p)-1)10e-10,
error(Not a prob. vector, components do not add up to 1)
end
n=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];
end
for i=1:n-1
c(i,:)=blanks(n*n);
end
c(n-1,n)=0;
c(n-1,2*n)=1;
for i=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;
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));
end
end
for i=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. 量化
实验代码:
主函数:
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,p1,p2,p3)
if (2*bdelta*(n-1))
error(Too many levels for this range.); return
end
args=[];
for j=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;
for i=3:n
a(i)=a(i-1)+delta;
y(i-1)=a(i)-delta/2;
end
y(n)=a(n)+delta;
dist=0;
for i=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-
文档评论(0)