В этом примере показано, как использовать fixed.realQRMatrixSolveFixedpointTypes
функционируйте, чтобы аналитически определить фиксированные точки для решения действительного матричного уравнения наименьших квадратов , где - матрица с , -, и -.
Фиксированные точки для решения матричного уравнения хорошо ограничены если количество строк, , из очень больше количества столбцов, т.е. . ), и полный ранг. Если не по сути полный ранг, затем это может быть сделано так путем добавления случайного шума. Случайный шум естественно происходит в физических системах, таких как тепловой шум в радиолокационных системах или системах связи. Если , затем динамический диапазон системы может быть неограниченным, например, в скалярном уравнении и то может быть произвольно большим если близко к .
Задайте матричные атрибуты и системные параметры для этого примера.
m
количество строк в матрицах A
и B
. В проблеме, такой как beamforming или определение направления, m
соответствует количеству отсчетов, которые интегрированы.
m = 300;
n
количество столбцов в матричном A
и строки в матричном X
. В задаче наименьших квадратов, m
больше n
, и обычно m
намного больше, чем n
. В проблеме, такой как beamforming или определение направления, n
соответствует количеству датчиков.
n = 10;
p
количество столбцов в матрицах B
и X
. Это соответствует одновременному решению системы с p
правые стороны.
p = 1;
В этом примере, набор ранг матричного A
быть меньше количества столбцов. В проблеме, такой как beamforming или определение направления, соответствует количеству сигналов, посягающих на сенсорную матрицу.
rankA = 3;
precisionBits
задает количество битов точности, требуемой для матрицы, решают. Установите это значение согласно системным требованиям.
precisionBits = 24;
В этом примере, матрицы с действительным знаком A
и B
создаются таким образом, что величина их элементов меньше чем или равна одному. Ваши собственные системные требования зададут, каковы те значения. Если вы не знаете то, что они, и A
и B
входные параметры фиксированной точки к системе, затем можно использовать upperbound
функция, чтобы определить верхние границы фиксированных точек A
и B
.
max_abs_A
верхняя граница на максимальном элементе массива величины.
max_abs_A = 1;
max_abs_B
верхняя граница на максимальном элементе величины B.
max_abs_B = 1;
Стандартное отклонение теплового шума является квадратным корнем из степени теплового шума, которая является системным параметром. Хорошо спроектированная система имеет уровень квантования ниже, чем тепловой шум. Здесь, установите thermalNoiseStandardDeviation
к эквиваленту шумовая мощность дБ.
thermalNoiseStandardDeviation = sqrt(10^(-50/10))
thermalNoiseStandardDeviation = 0.0032
Стандартное отклонение шума квантования является функцией необходимого количества битов точности. Используйте fixed.realQuantizationNoiseStandardDeviation
вычислить это. Смотрите, что это меньше thermalNoiseStandardDeviation
.
quantizationNoiseStandardDeviation = fixed.realQuantizationNoiseStandardDeviation(precisionBits)
quantizationNoiseStandardDeviation = 1.7206e-08
В этом примере примите что спроектированная системная матрица не имеет полного ранга (существует меньше сигналов интереса, чем количество столбцов матрицы ), и измеренная системная матрица имеет аддитивный тепловой шум, который больше, чем шум квантования. Аддитивный шум делает измеренную матрицу имейте полный ранг.
Набор .
noiseStandardDeviation = thermalNoiseStandardDeviation;
Используйте fixed.realQRMatrixSolveFixedpointTypes
вычислить фиксированные точки.
T = fixed.realQRMatrixSolveFixedpointTypes(m,n,max_abs_A,max_abs_B,...
precisionBits,noiseStandardDeviation)
T = struct with fields:
A: [0x0 embedded.fi]
B: [0x0 embedded.fi]
X: [0x0 embedded.fi]
T.A
тип, вычисленный для преобразования к оперативный так, чтобы это не переполнялось.
T.A
ans = [] DataTypeMode: Fixed-point: binary point scaling Signedness: Signed WordLength: 31 FractionLength: 24
T.B
тип, вычисленный для преобразования к оперативный так, чтобы это не переполнялось.
T.B
ans = [] DataTypeMode: Fixed-point: binary point scaling Signedness: Signed WordLength: 31 FractionLength: 24
T.X
тип, вычисленный для решения так, чтобы была низкая вероятность, что это переполняется.
T.X
ans = [] DataTypeMode: Fixed-point: binary point scaling Signedness: Signed WordLength: 35 FractionLength: 24
Создайте случайные матрицы A
и B
таким образом, что B
находится в области значений A
, и rankA=rank(A)
. Добавьте случайный шум измерения в A
который заставит его стать полным рангом, но это будет также влиять на решение так, чтобы B
только близко к области значений A
.
rng('default');
[A,B] = fixed.example.realRandomLeastSquaresMatrices(m,n,p,rankA);
A = A + fixed.example.realNormalRandomArray(0,noiseStandardDeviation,m,n);
Бросьте входные параметры к типам, определенным fixed.realQRMatrixSolveFixedpointTypes
. Квантование к фиксированной точке эквивалентно добавлению случайного шума [4,5].
A = cast(A,'like',T.A); B = cast(B,'like',T.B);
Ускорьте fixed.qrMatrixSolve
функция при помощи fiaccel
сгенерировать исполняемый файл MATLAB (MEX) функция.
fiaccel fixed.qrMatrixSolve -args {A,B,T.X} -o qrRealMatrixSolve_mex
Задайте выходной тип T.X
и вычислите фиксированную точку использование метода QR.
X = qrRealMatrixSolve_mex(A,B,T.X);
Вычислите относительную погрешность, чтобы проверить точность выхода.
relative_error = norm(double(A*X - B))/norm(double(B))
relative_error = 0.0063
Подавите mlint
предупреждения в этом файле.
%#ok<*NASGU> %#ok<*ASGLU>