数字信号的量化

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

基于MATLAB的数字信号量化的仿真
一 基本原理
1.量化原理
模拟信号抽样后变成在时间上离散的信号,但仍然是模拟信号。

这个抽样抽样信号必须经过量化才成为数字信号。

我们将在下面讨论模拟抽样信号的量化。

设模拟信号的抽样值为m(kT)其中T是抽样周期,k是整数。

此抽样值仍然是一个取值连续的变量,即它可以有无数个可能的连续取值。

若我们仅用N个二进制数字码元来代表此抽样值的大小,则N个二进制码元只能代表M等于2的N次方各不同的抽样值。

因此,必须将抽样值的范围划分为M个区间,每个区间用电平表示。

这样共有M个离散电平,它们称为量化电平。

用这M个量化电平表示连续抽样值的方法称为量化。

在图9—9中给出了一个量化过程的例子。

图中,m(kT)表示模拟信号抽样值,mq(kT)表示量化后的量化信号值,q1,q2,q3…….q6是量化后的6个可能输出电平,m1,m2,m3,。

m6,为量化区间的端点,这样,我们可以用公式mq(kT)=qi, 当m(i-1)<=m(kT)<m(i)按照式子做交换,就把模拟抽样信号m(kT)变换成了量化后的离散抽样信号,即是,量化信号。

在原理上,量化过程可以认为是在一个量化器中完成的。

量化器的输入信号为m(kT),输出信号为mq(kT),如图所示,量化过程常是和后续的编码过程结合在一起的,不一定存在独立的量化器。

二 设计过程
2.1 MATLAB编程简介
MATLAB作为一种应用最广泛的科学计算软件,它不仅可以在命令行中逐行输入命令,然后依次执行,而且还可以像C、FORTRAN等高级语言一样进行程序设计,然后利用断点等调试手段进行程序设计和调试。

MATLAB的程序设计就是进行M文件的设计。

MATLAB程序设计既有传统高级语言的特征,又有自己独特地特点。

在MATLAB程序设计中,
充分利用MATLAB数据结构的特点,可以使程序结构简单,提高编程效率。

2 M文件概述:
MATLAB不仅是一个功能强大的工具软件,而且可以被理解为一种编程语言。

MATLAB软件本
身就是MATLAB语言的编程环境。

MATLAB本身具有很多强大的函数,实际上M文件就是一个
命令集。

所谓M文件就是由MATLAB语句(命令或函数)构成的ASCII码文本文件,文件名必须以“.m”
为扩展名。

主要有两种形式:命令文件(Script File)和函数文件(Function File)。

命令文件与批处理文件相似,它是MATLAB命令或函数的组合,没有输入输出参数,执行时只需在命令中键入文件名回车即可;而函数文件是以一条function语句作为引导。

即文件的第一行为:function[返回参数1,返回参数2,。

]=函数名(输入参数1,输入参数2,。

)这一行的有无是区分命令文件和函数文件的重要标志。

函数文件可以接受输入变量,还可以返回输出变量,执行时需在命令窗口中以固定格式调用函数方可。

其主要用处是利用MATLAB 语句构造一个新的函数。

2.2 设计思路与流程图
2.2.1设计思路
根据量化原理,了解均匀量化和非均匀量化的定义后设计编写均匀量化程序和非均匀量化的程序流程图。

Array
2.2.2均匀量化流程图
2.2.3非均匀量化流程图
2.3仿真程序
2.3.1均匀量化仿真程序
对一个正弦信号进行均匀量化,在图上同时显示出原始信号和量化后信号
t=[0:0.1:2*pi];%在[0,2*pi]之间按0.1间隔取值
>> sig=sin(t); %原始信号,一个正弦波
>> partition=[-1:.2:1]; %在[-1,1]之间按0.2间隔取值
>> codebook=[-1,-0.9,-0.7,-0.5,-0.3,-0.1,0.1,0.3,0.5,0.7,0.9,1]; %长度12,每隔一个条目
>> [index,quants,distor1]=quantiz(sig,partition,codebook); %量化
>> plot(t,sig,'x',t,quants,'.') %绘图
>>axis([0 .2 7 -1.2 1.2])
>> [distor1] %显示平均平方扭曲
dstor1 =
0.0039
2.3.2非均匀量化仿真程序
用B折线近似A律压缩特性曲线的方法如下,对于归一化输入x[-1,1],归一化输出y[-1,1],压缩特性关于原点成奇对称,以下仅考虑第一象限情况,y平均分成8区间,x的区间划分为[0,1/128]、[1/128,1/64]、[1/64,1/32]、[1/32,1/16]、[1/16,1/8]、[1/8,2/8]、[2/8,3/8]、[3/8,4/8]、[4/8,5/8]、[5/8,6/8]、[6/8,7/8]、[7/8,1],各区间端点相连,即构成A律13折线近似压缩特性曲线。

1画出上述A律折线近似的压缩特性曲线
2画出A压缩律的A=87.6对应的压缩特性曲线,并与1中的曲线比较
解:程序流程图如图6-18所示,程序如下
%demo for A law for quantize, filename: A_law.m
%A=87.6 y=Ax/(C1+LnA) (0<x<1/A) y=(1+LnAx)/(1+LnA)
clear all; close all;
dx=0.01;
x=0:dx:1; %在[0,1]之间按0.01间隔取点
A=87.6;
%A Law
for i=1:length(x)
if abs(x(i))<1/A%abs是绝对值函数
ya(i)=A*x(i)/(1+log(A));
else
ya(i)=sign(x(i))*(1+log(A*abs(x(i))))/(1+log(A)); %sign是符号函数
end
end%计算y的值
figure(1) %打开图形窗口
>> plot(x,ya,'k.:'); %以x,ya绘图(k代表黑色,.代表圆点,:代表点线)
>> title('A Law') %为图取名为A Law
>> xlabel('x'); %横轴标注为x
>> ylabel('y'); %纵轴标注为y
>> grid on%绘制网格线
>> hold on%保持当前图形
>> xx=[0,1/128,1/64,1/32,1/16,1/8,1/4,1/2,1];
>> yy=[0,1/8,2/8,3/8,4/8,5/8,6/8,7/8,1];
>> plot(xx,yy); %以xx,yy绘图
>> stem(xx,yy); %针状图
>>;
三 仿真结果
3.1调试
根据系统的原理结构检查各流程图是否正确,再根据流程图来检查程序是将所有程序组织起来,在软件环境下运行,检查程序是否正确。

通过对MATLAB系统的认真检查,反复测试,如果没有出现问题即可把源程序进行仿真。

3.2均匀量化仿真图
01234567 3.3非均匀量化仿真图
A Law
x
四 结果分析
4.1均匀量化结果分析
在均匀量化中,每个量化区间的量化值均取在各区间的中点。

其量化间隔取决于样值取值的变化范围和量化级。

在一定的取值范围内,均匀量化的量化误差只与量化间隔有关。

一旦量化间隔确定,无论抽样值大小,均匀量化噪声功率都是相同的。

增大量化级,减小量化间隔,则量化误差会减小。

但在实际中,过多的量化级将使系统的复杂性大大增加。

量化级应根据量化信噪比的要求确定。

4.2非均匀量化结果分析
非均匀量化是一种在整个动态范围内量化间隔不相等的量化,换言之,非均匀量化是根据输入信号的概率密度函数来分布量化电平,以改善量化性能。

其特点是,输入小时,量阶也小,输入大时,量阶也大。

程序开始时,先清除内存变量,然后设置变量x的值,根据x 计算y值,最后画出A律图形与折线图。

4.3误差分析
在均匀量化中,量化级级越大,量化误差越小,量化后信号越逼近原信号。

我们希望减小误差,又不希望过多增加量化级。

在均匀量化中信号幅值大的信号(打信号)与信号幅值小的信号(小信号)的绝对量化误差是相同的,同样大的噪声对大信号影响可能不大,但是对小信号可能造成严重后果,小信号的量化信噪比就难以达到给定的要求。

因此采用非均匀量化的方法提高小信号的信噪比,又不过多增加量化级。

相关文档
最新文档