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

Quantizing a complex signal with uniform quantizer in matlab

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

这种信号的量化方式是否正确?如果对此有任何意见,我将不胜感激。

您使用的量化公式会将输入值映射到量化版本。但是,它不会将结果限制为仅 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])。