在现在数字控制中,组件间通常是通过通信信道进行信息传输。信号量化源于实际信号传输的带宽限制。为了保证能在有限的带宽内进行正常信息传输,需要使用量化技术来降低通信速率。现在的量化包括均匀量化,对数量化,磁滞量化等。有兴趣的朋友可以去网上或论文中查找详细资料,我不是专门研究这个的,也不是很了解。只是刚好用到了对数量化器,就和大家分享一下。
截了一张图,对数量化器,当然现在还有一些改进的,效果更好的,但不在这里讨论研究。
对于上面的公式,简要说明一下,其中 q 是量化值。是量化密度,量化密度越大,量化越精确。是量化器的精确参数,也是对数量化器的扇区边界。0是初始量化参数,i可以看作量化级数。当确定了,扇区边界也就确定了,量化值被限定在斜率为1+和1-的两条线界范围内。
接下来就是上代码
首先根据你需要量化的信息的大致范围来预先定义量化级数 i 和初始量化参数 0 的范围:即量化器的输入信号 最大也不会超过设定的最大值 ^i*0,合适的参数可以让量化效果更精确一些。然后每个量化级数对应一个量化值,验证每个量化判断条件,开始循环直至找出满足条件的量化级别和量化值,break跳出循环,减少语句执行次数。
a=input('输入一个数x:');
zeta0=5;delta=0.11;rho=0.8;
for i=20:-1:-20
zeta=rho^i*zeta0;
if a>0 && a>rho^i*zeta0/(1+delta) && a<=rho^i*zeta0/(1-delta)
Q=zeta;
break
end
if a<0 && -a>rho^i*zeta0/(1+delta) && -a<=rho^i*zeta0/(1-delta)
Q=-zeta;
break
end
if a==0
zeta=0;
Q=zeta;
break
end
end
fprintf('%f',Q)
这是单个的测试,如果想有更直观的对比,可以选择用一个函数来量化,常用的就是正弦余弦函数了,这里我选用一个正弦函数 y=3*sin(2*t)。
zeta0=1;delta=0.11;rho=0.8;
step_size=0.01; %步长
simulationtime=3; %仿真总时长
n=simulationtime/step_size; %循环次数
t=zeros(1,n); %仿真时间点矩阵
Qy=zeros(1,n); %存放量化的y值
for i=1:n
t(i)=t(1)+(i-1)*step_size;
y(i)=3*sin(2*t(i));
for num=20:-1:-20 %量化级数20~-20,逐个循环找到适应量化值
zeta=rho^num*zeta0;%量化值
if y(i)>0 & y(i)>rho^num*zeta0/(1+delta) & y(i)<=rho^num*zeta0/(1-delta)
Q=zeta;
break
end
if y(i)<0 & -y(i)>rho^num*zeta0/(1+delta) & -y(i)<=rho^num*zeta0/(1-delta)
Q=-zeta;
break
end
if y(i)==0
zeta=0;
Q=zeta;
break
end
end
Qy(i)=Q;
end
set(0,'defaultfigurecolor','w')%设置白色背景
plot(t,y)
hold on
plot(t,Qy)
下面是仿真结果
量化密度越大,选取合适的初始量化参数0,可以发现量化效果还是不错的。
本文到这里就结束了,量化器也是刚接触,如有错误,欢迎指出,或者有更好的见解(包括代码)也可以评论区留言。