在matlab中使用均匀量化器对复杂信号进行量化

时间:2015-09-25 08:32:12

标签: matlab signal-processing quantization

我的信号具有复杂的正态分布,均值为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;

这是量化这种信号的正确方法吗?我将不胜感激任何意见。

1 个答案:

答案 0 :(得分:1)

您正在使用的量化公式会将输入值映射到量化版本。但是,它不会将结果限制为仅512个级别,因为您的输入信号可能超过[-1,+1]范围,并且您没有做任何限制量化器输出(或输入)的任何操作。

要限制值,您可以使用minmax内置函数。然而,由于它们与复数的模数一起使用,因此您必须首先将数字拆分为它们的实部和虚部。因此,使用实际和虚部对每个约束在[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])。