MATLAB编码实现均匀PCM与非均匀PCM.doc

上传人:b**** 文档编号:14662097 上传时间:2023-06-25 格式:DOC 页数:8 大小:154KB
下载 相关 举报
MATLAB编码实现均匀PCM与非均匀PCM.doc_第1页
第1页 / 共8页
MATLAB编码实现均匀PCM与非均匀PCM.doc_第2页
第2页 / 共8页
MATLAB编码实现均匀PCM与非均匀PCM.doc_第3页
第3页 / 共8页
MATLAB编码实现均匀PCM与非均匀PCM.doc_第4页
第4页 / 共8页
MATLAB编码实现均匀PCM与非均匀PCM.doc_第5页
第5页 / 共8页
MATLAB编码实现均匀PCM与非均匀PCM.doc_第6页
第6页 / 共8页
MATLAB编码实现均匀PCM与非均匀PCM.doc_第7页
第7页 / 共8页
MATLAB编码实现均匀PCM与非均匀PCM.doc_第8页
第8页 / 共8页
亲,该文档总共8页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

MATLAB编码实现均匀PCM与非均匀PCM.doc

《MATLAB编码实现均匀PCM与非均匀PCM.doc》由会员分享,可在线阅读,更多相关《MATLAB编码实现均匀PCM与非均匀PCM.doc(8页珍藏版)》请在冰点文库上搜索。

MATLAB编码实现均匀PCM与非均匀PCM.doc

均匀PCM与非均匀PCM

实验目的

1.掌握MATLAB语言的函数调用,提高编程编程能力。

2.掌握量化信噪比的基本概念。

3.学习均匀量化和非均匀量化的基本原理,加深对非均匀量化的理解。

实验原理

均匀量化的基本原理

在脉冲编码调制中,模拟信号首先以高于奈奎斯特的速率采样,然后将所的样本量化。

假设模拟信号是以[-Ⅹmax,Ⅹmax]表示的区间内分布的,而量化电平数很大。

量化电平可以是相等的或是不相等的;前者就属于均匀PCM,而后者就是非均匀PCM。

关于量化的几个基本概念,量化间隔;量化误差;量化信噪比。

(1)相邻量化电平间距离称量化间隔,用“Δ”表示。

(2)设抽样值为,量化后的值为,xq(kTs)与x(kTs)的误差称为量化误差,又称为量化噪声;量化误差不超过±Δ/2,而量化级数目越多,Δ值越小,量化误差也越小。

(3)衡量量化的性能好坏最常用指标是量化信噪比(Sq/Nq),其中Sq表示量化信号值xq(kTs)产生的功率,Nq表示量化误差功率,量化信噪比越大,则量化性能越好。

在均匀PCM中,长度为2Xmax的区间[-Ⅹmax,Ⅹmax]被划分为N个相等的子区间,每一子区间长度为△=2Xmax/N。

如果N足够大,那么在每一子区间内输入的密度函数就能认为是均匀的,产生的失真为D=△2/12。

如果N是2的幂次方即,那么就要求用比特来表示每个量化电平。

这就意味着,如果模拟信号的带宽是,采样又是在奈奎斯特率下完成的,那么传输PCM信号所要求的带宽至少是(实际上1.5比较接近于实际)。

这时失真由下式给出,

(1-1)

如果模拟信号的功率用表示,则信号/量化噪声的比(SQNR)由下式给出

(1-2)

式中表示归一化输入,定义为

(1-3)

以分贝(dB)计的SQNR为

(1-4)

量化以后,这些已量化的电平用比特对每个已量化电平进行编码.编码通常使用自然二进制码(NBC),即最低电平映射为全0序列,最高电平映射为全1序列,全部其余的电平按已量化值的递增次序映射。

非均匀量化的基本原理

正变换:

,其中是归一化输入(),是一个参数,在标准律的非线性中它等于255。

反变换:

在非均匀量化PCM中,输入信号首先通过一非线性环节以减小输入的动态范围,再将输出加到某一均匀PCM系统上。

在接收端,输出再通过另一非线形环节,该环节是在发送端所用的非线性环节的逆特征。

这样,总的效果就等效于一个在量化电平之间具有非均匀间隔的PCM系统。

非均匀量化时,量化器随着输入信号的大小采用不同的量化间隔,大信号时采用大的量化间隔,小信号时采用小的量化间隔,可以以较少的量化电平数达到输入动态范围的要求

一般对语音信号传输来说,所使用的非线性可以是律的非线性,或是A律的非线性,中国和欧洲采用A率压缩特性(A=87.56),北美和日本采用律压缩特性(=255),压缩特性分别如下:

μ律:

(1-5)

A律:

(1-6)

式中,x为归一化输入,y为归一化输出,A、为压缩系数,式(3-1)也可以表示为,

(1-7)

本实验主要仿真律的有关特性。

如图1-1所示为不同值对应的输入输出关系曲线.

图1-1不同值对应的输入输出关系

律的非线性的逆为

量化信噪比的基本概念

实验内容:

(1)均匀量化产生一个幅度为1和的正弦信号,用均匀量化方法分别用8电平和16电平进行量化,在同一个坐标轴上画出原信号和已量化信号,比较这两种情况下的SQNR。

(2)均匀量化产生长度为500的零均值、单位方差的高斯随机变量序列,利用u_pcm.m求当量化电平数为64时所得的SQNR。

求出该序列的前5个值、相应的量化值和相应的码字。

(3)非均匀量化产生一个长度为500,按分布的随机变量序列。

用16、64和128量化电平数和的律非线性,并求SQNR。

(4)Matlab代码:

(1)下面给出的M文件u-pcm.m用采样值序列和要求的量化电平数作输入,求得已量化序列、编码序列和产生的SQNR(以dB计)。

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

%U_PCM uniformPCMencodingofasequence

% [SQNR,A_QUAN,CODE]=U_PCM(A,N)

% a=inputsequence.

% n=numberofquantizationlevels(even).

% sqnr=outputSQNR(indB).

% a_quan=quantizedoutputbeforeencoding.

% code=theencodedoutput.

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

PCM.M

%SQNR_8=sqnr8

%SQNR_16=sqnr16

x=0:

0.1*pi:

4*pi;

y=sin(x);

[sqnr8,a_quan8,code8]=u_pcm(y,8);

[sqnr16,a_quan16,code16]=u_pcm(y,16);

plot(x,y,x,a_quan8,x,a_quan16);

(2)PCM2.M

x=1:

500;

y=randn(1,500);

[sqnr64,a_quan64,code64]=u_pcm(y,64);

%SQNR64=squnr64

a_quan64_result=[a_quan64

(1),a_quan64

(2),...

a_quan64(3),a_quan64(4),a_quan64(5)]%Ç°5¸öÁ¿»¯Öµ

code64_result=[code64(1,1:

6),code64(2,1:

6),...

code64(3,1:

6),code64(4,1:

6),code64(5,1:

6)]%Ç°5¸öÂë×Ö

(3)可能用到的子程序:

mulaw.m和invmulaw.m用于实现律的非线性和它的逆.

mulaw.m

function[y,a]=mulaw(x,mu)

%MULAW mu-lawnonlinearityfornonuniformPCM

% Y=MULAW(X,MU).

% X=inputvector.

a=max(abs(x));

y=(log(1+mu*abs(x/a))./log(1+mu)).*signum(x);

invmulaw.m

functionx=invmulaw(y,mu)

%INVMULAW theinverseofmu-lawnonlinearity

%X=INVMULAW(Y,MU) Y=normalizedoutputofthemu-lawnonlinearity.

x=(((1+mu).^(abs(y))-1)./mu).*signum(y);

signum.m

functiony=signum(x)

%SIGNUM findsthesignumofavector.

% Y=SIGNUM(X)

% X=inputvector

y=x;

y(find(x>0))=ones(size(find(x>0)));

y(find(x<0))=-ones(size(find(x<0)));

y(find(x==0))=zeros(size(find(x==0)));

mula_pcm.m

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

%MULA_PCM mu-lawPCMencodingofasequence

% [SQNR,A_QUAN,CODE]=MULA_PCM(A,N,MU).

% a=inputsequence.

% n=numberofquantizationlevels(even).

% sqnr=outputSQNR(indB).

% a_quan=quantizedoutputbeforeencoding.

% code=theencodedoutput.

[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));

主程序:

令向量a是按N(0,1)产生的长度为500的向量,即

a=randn(1,500)

pcm3.m

a=randn(1,500);

[sqnr16,a_quan16,code16]=mula_pcm(a,16,255);

[sqnr64,a_quan64,code64]=mula_pcm(a,64,255);

[sqnr128,a_quan128,code128]=mula_pcm(a,128,255);

[Y,I]=sort(a);

sqnr16

sqnr64

sqnr128

实验分析:

(1)

(2)

a_quan64_result=

-0.4331-1.69310.11810.2756-1.1419

code64_result=

Columns1through17

01101000101010000

Columns18through30

1100011010001

(3)

sqnr16=

13.5210

sqnr64=

25.4650

sqnr128=

31.7463

每次实验结果有差异!

随机产生

实验总结:

量化误差与量化比特数成正比,每增加一个比特,即每增加两倍的量化电平,误差约增加6db.

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

当前位置:首页 > 初中教育 > 语文

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2