您好,欢迎访问三七文档
信源→信源编码→信道编码→调制↓信道↓接收方←信源解码←信道解码←解调信源是一个产生通信信号的模块,它产生的信号可能是离散或连续的。模拟信源在通信之前必须进行模/数转换。信源编码的作用就是将模拟或数字信号转换为二进制数字序列,它的目的在于尽量减少信号的冗余。信道编码将在信息序列中添加适当的冗余性,使得通信系统能够纠正一定程序上的传输出错。一个数字通信系统的性能主要由传输速率和通信出错的概率衡量,信息传输速率用于衡量一个数字通信系统的有效性,通信系统的出错概率,它衡量的是通信系统的可靠性,抗干扰性能。数字通信系统的模型6.2信息的量度与编码离散信号的信息量信息的度量对于离散信源,设其概率分布为:x1x2x3……xnP(x1)P(x2)P(x3)……P(xn)平均信息量(熵)NiiibitxPxPXH12))((log)()(用于计算离散平均信息量的函数文件functionr=message(x,n)%参数x:概率分布,n:离散信源的分布值的数目r=0;fori=1:nr=r-x(i)*log(x(i))/log(2);enddisp('此离散信源的平均信息量为');disp(r);对于二元信源,作出平均信息量与概率P的关系图。a=[0];b=[0];forx=0.01:0.01:0.99;a=[a,x];y=message([x,1-x],2);b=[b,y];endplot(a,b)6.2.1无噪声信源编码Huffman编码对于无噪声信源编码,原始信号序列将被压缩以达到用尽可能少的比特数来表示它们的目的,并要求从压缩后的数据中能够完全无失真地恢复出原始数据。在Huffman编码方案中,为出现概率较小的信源输出分配较长的码字,而对那些出现可能性较大的信源分配较短的码字。考虑一个有8种可能符号x1,x2,…xn的信源,各种符号发生的概率分别为0.36、0.14、0.13、0.12、0.10、0.09、0.04、0.02。function[h,H,L]=huffman(p)%变量p为所有符号出现概率所组成的概率向量%返回值h为利用huffman编码算法最后得到的编码结果%返回值H为信源熵%返回值L为进行huffman编码后所得编码的码字长度iflength(find(p0))~=0error('notaprob.vector,negativecomponent(s)');endifsum(p)1error('notaprob.vector,componentsdonotaddupto1')endH=-sum(p.*log2(p));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];endfori=1:n-1c(i,:)=blanks(n*n);endc(n-1,n)='0';c(n-1,2*n)='1';fori=2:n-1c(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-1c(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));endendfori=1:nh(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))endL=sum(p.*L1)%计算平均码长p=[0.360.140.130.120.10.090.040.02][h,H,L]=huffman(p)L=2.7000h=1110110001101000100010000H=2.6209L=2.7000m=87654321123456702345160023415000231400002310000021000000MATLAB的信源函数1.randintout=randint%等概率产生随机标量信号out=randint(m)%产生一个m×m的矩阵out=randint(m,n)%产生一个m×n的矩阵out=randint(m,n,rg)%产生一个m×n的矩阵,如果rg=0,则产生全0矩阵,%rg0则产生随机数范围为[rg+1,0],%rg0则产生随机数范围为[0,rg-1],%如果rg=[min,max],则产生随机数范围为[min,max]。out=randint(3,5,[-4,7])out=71117-26-4343555-26.2.2MATLAB的信源编/译码方法out=randint(3,5,-4)out=-2-2-2-3-1000-3-20-3-3-3-32.randsrc函数out=randsrc%等概率产生随机标量信号-1或1out=randsrc(m)%产生一个m×m的矩阵out=randsrc(m,n)%产生一个m×n的矩阵out=randsrc(m,n,alphabet)%矩阵取值取决于alphabet向量out=randsrc(m,n,[alphabet;prob])%矩阵取值取决于alphabet向量,%每个值的取值概率则取决于prob。out=randsrc(2,10,[-3-113;.25.25.25.25])out=-3-1-13-33131-113-111-3-11-1-3数字通信中,信息是以数字形式进行传输的。信源编码主要内容之一就是模/数转换的问题,其中一个重要技术就是量化,尽可能少的比特来表示尽可能多的信息的问题。一般情况下,利用采样定理,模拟信源的输出可转化成一个等效的离散时间抽样序列,然后对样值幅度进行量化和编码,即完成A/D转换,成为数字通信可以传输且保持一定信息量的数字信号。模拟信号转化为数字信号的3个步骤:采样量化编码量化:分级取整,该过程表示每个采样值所需比特数减至一个有限数字,不可避免造成一定程序失真。数学上看,量化过程就是一个连续幅度的无限数集合映射成一个离散幅度的有限数集合。量化方案分:标量量化:每个信源输出都将加以量化向量量化:信源输出将分组加以量化标量量化分:均匀量化:量化区域是等长的非均匀量化:量化区域是不等长的1.标量量化对信源进行量化之后,不可避免地信源信号会有一定的失真,产生了量化误差。其中:fx(x)是信源随机变量的概率密度函数。信噪比也可衡量量化中量化误差的大小称为信号量化噪声比(SQNR)。LkxkdxxfyxD12)()(DXESQNR210log10量化的MATLAB实现在均匀量化中,除了第一个量化间隔和最后一个量化间隔之外,其他所有的量化间隔都是等长的。quantiz信源进行均匀量化函数(产生量化索引和量化输出值函数)[index,quants,distor]=quantiz(sig,partition,codebook)sig:需量化的原始矢量信号Partition:用于设定量化间隔codebook:用于设定量化的码书index:量化后sig元素落在partition所设的哪个间隔里quants:量化后sig元素对应的量化值distor:量化误差值。利用函数quntiz对信源序列[334844023]进行均匀量化,量化区间以10为间隔,小于等于10量化为10,大于10小于等于20取20….[index,quants,distor]=quantiz([334844023],10:10:90,10:10:100)index=03832quants=1040904030distor=34将模拟信源s=sint(0=t=2π)进行均匀量化,量化区间为0.2。t=[0:.1:2*pi];sig=sin(t);partition=[-1:.2:1]codebook=[-1.2:.2:1];[a,b,c]=quantiz(sig,partition,codebook);plot(t,sig,t,b,'.')将模拟信源s=sint(0=t=2π)进行均匀量化,量化区间为0.1。t=[0:.1:2*pi];sig=sin(t);partition=[-1:.1:1]codebook=[-1:.1:1.1];[a,b,c]=quantiz(sig,partition,codebook)plot(t,sig,t,b,'.')最佳量化器(采用训练序列和lloyd算法优化标量算法的函数lloyds)最佳量化器的设计目的就是期望量化过程中所取的量化间隔使得量化的噪声降低到最小,即将信号失真降低到最低程度。MATLAB提供一种迭代算法,以量化误差的均方值最小为原则使用一定的训练数据,从初始码书出发进行循环迭代,直到量化误差小于一个门限。格式:[partition,codebook]=lloyds(training_set,len)%len代表量化级数[partition,codebook]=lloyds(training_set,initcodebook)[partition,codebook]=lloyds(training_set,…,tol)%tol代表误差限将模拟信源s=sint(0=t=2π)进行均匀量化,量化区间为0.2。t=[0:.1:2*pi];sig=sin(t);partition=[-1:.2:1];codebook=[-1.2:.2:1];[index,quants,distor]=quantiz(sig,partition,codebook);[partition2,codebook2]=lloyds(sig,codebook);[index2,quants2,distor2]=quantiz(sig,partition2,codebook2);plot(t,sig,t,quants,'b.',t,quants2,'r.')[distor,distor2]ans=0.01480.0022量化程序functionh=junyun(f,V,L)%f是量化的信号序列,v是量化电平最大值.%L是量化电平级数n=length(f);t=2*V/L;p=zeros(1,L)fori=1:Lp(i)=-V+i*t;endfori=1:nflag=0;iff(i)=Vh(i)=V;flag=1;endforj=1:Lif(flag==0)if(f(i)=p(j))h(i)=p(j);flag=1;end;end;end;end;f=[-2-1-1.9-1.50.121.092]f=-2.0000-1.0000-1.9000-1.50000.12001.09002.0000m=junyun(f,2,32)m=-2.0000-1.0000-1.8750-1.50000.12501.12502.0000自然数线性编码functionco=exadc(m,vi)%m为线性编码码长;vi是欲编码的十进制数v=vi;code=zeros(1,m);forn=1:mr=rem(v,2);v=(v-r)/2;code(n)=r;%本程序从低位算起,能否从高位开始。endco=fliplr(code);exadc(4,12)v=12ans=1100exadc(6,19)v=19
本文标题:第六章13合
链接地址:https://www.777doc.com/doc-5580920 .html