Квантование сложного сигнала с помощью равномерного квантователя в 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;
Это правильный способ квантования такого сигнала? Буду признателен за любой вклад по этому вопросу.
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]
).