我的信号具有复杂的正态分布,均值为0,方差为1.我想用均匀量化器将其量化为512级。我正在以下列方式在MATLAB中生成信号 -
s = sqrt(0.5).*(randn(1,numBits) + 1i*randn(1,numBits));
我通过以下方式量化范围(-1,1)中512级的信号:
min = -1;
max = 1;
q = (max-min)/2^9;
quantSignal = round(s/q)*q;
这是量化这种信号的正确方法吗?我将不胜感激任何意见。
答案 0 :(得分:1)
您正在使用的量化公式会将输入值映射到量化版本。但是,它不会将结果限制为仅512个级别,因为您的输入信号可能超过[-1,+1]
范围,并且您没有做任何限制量化器输出(或输入)的任何操作。
要限制值,您可以使用min
和max
内置函数。然而,由于它们与复数的模数一起使用,因此您必须首先将数字拆分为它们的实部和虚部。因此,使用实际和虚部对每个约束在[minValue,maxValue]
范围内的复数进行量化可以通过以下方式完成:
q = (maxValue-minValue)/(2^9-1);
realPart = min(max(real(s),minValue),maxValue);
realPart = minValue + round((realPart-minValue)/q)*q;
imagPart = min(max(imag(s),minValue),maxValue);
imagPart = minValue + round((imagPart-minValue)/q)*q;
quantSignal = realPart + j*imagPart;
我之前提到过,单位方差的正常信号通常不会局限于[-1,1]
范围(或任何范围)。因此,通常尝试最小化量化误差的量度,例如均方误差(未量化输入与对应量化输出之间的平方差的预期值)。
对于均匀量化器和给定的特定信号特征(在这种情况下是复高斯信号),该均方误差是量化级数和量化器输入范围的函数。对于512个级别,实部和虚部应理想地在大约+/- 4.2标准偏差内。由于实部和虚部的标准偏差为sqrt(0.5)
,因此可以使用
maxValue = 4.2*sqrt(0.5);
minValue = -maxValue;
如果您需要将量化输出的实部和虚部限制在特定范围内,那么您可以在量化器的输出处应用缩放因子(例如除以4.2*sqrt(0.5)
以得到实数和虚部被约束为[-1,+1]
)。