Квантование сложного сигнала с помощью равномерного квантователя в 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]).

Другие вопросы по тегам