Используемая вами формула квантования преобразует входные значения в квантованную версию. Однако это не ограничит результат только 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]
).
person
SleuthEye
schedule
26.09.2015