В этом примере показано, как использовать fixed.complexQlessQRMatrixSolveFixedpointTypes функционируйте, чтобы аналитически определить фиксированные точки для решения комплексного матричного уравнения наименьших квадратов , где - матрица с , -, и -.
Фиксированные точки для решения матричного уравнения хорошо ограничены если количество строк, , из очень больше количества столбцов, т.е. . ), и полный ранг. Если не по сути полный ранг, затем это может быть сделано так путем добавления случайного шума. Случайный шум естественно происходит в физических системах, таких как тепловой шум в радиолокационных системах или системах связи. Если , затем динамический диапазон системы может быть неограниченным, например, в скалярном уравнении и то может быть произвольно большим если близко к .
Задайте матричные атрибуты и системные параметры для этого примера.
m количество строк в матричном A. В проблеме, такой как beamforming или определение направления, m соответствует количеству отсчетов, которые интегрированы.
m = 300;
n количество столбцов в матричном A и строки в матрицах B и 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 = sqrt(2);
max_abs_B верхняя граница на максимальном элементе величины B.
max_abs_B = sqrt(2);
Стандартное отклонение теплового шума является квадратным корнем из степени теплового шума, которая является системным параметром. Хорошо спроектированная система имеет уровень квантования ниже, чем тепловой шум. Здесь, установите thermalNoiseStandardDeviation к эквиваленту шумовая мощность дБ.
thermalNoiseStandardDeviation = sqrt(10^(-50/10))
thermalNoiseStandardDeviation = 0.0032
Стандартное отклонение шума квантования является функцией необходимого количества битов точности. Используйте fixed.complexQuantizationNoiseStandardDeviation вычислить это. Смотрите, что это меньше thermalNoiseStandardDeviation.
quantizationNoiseStandardDeviation = fixed.complexQuantizationNoiseStandardDeviation(precisionBits)
quantizationNoiseStandardDeviation = 2.4333e-08
В этом примере примите что спроектированная системная матрица не имеет полного ранга (существует меньше сигналов интереса, чем количество столбцов матрицы ), и измеренная системная матрица имеет аддитивный тепловой шум, который больше, чем шум квантования. Аддитивный шум делает измеренную матрицу имейте полный ранг.
Набор .
noiseStandardDeviation = thermalNoiseStandardDeviation;
Используйте fixed.complexQlessQRMatrixSolveFixedpointTypes функция, чтобы вычислить фиксированные точки.
T = fixed.complexQlessQRMatrixSolveFixedpointTypes(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 тип, вычисленный для B так, чтобы это не переполнялось.
T.B
ans =
[]
DataTypeMode: Fixed-point: binary point scaling
Signedness: Signed
WordLength: 27
FractionLength: 24
T.X тип, вычисленный для решения так, чтобы была низкая вероятность, что это переполняется.
T.X
ans =
[]
DataTypeMode: Fixed-point: binary point scaling
Signedness: Signed
WordLength: 40
FractionLength: 24
Создайте случайные матрицы A и B таким образом, что rankA=rank(A). Добавьте случайный шум измерения в A который заставит его стать полным рангом.
rng('default');
[A,B] = fixed.example.complexRandomQlessQRMatrices(m,n,p,rankA);
A = A + fixed.example.complexNormalRandomArray(0,noiseStandardDeviation,m,n);Бросьте входные параметры к типам, определенным fixed.complexQlessQRMatrixSolveFixedpointTypes. Квантование к фиксированной точке эквивалентно добавлению случайного шума.
A = cast(A,'like',T.A); B = cast(B,'like',T.B);
Ускорьте fixed.qlessQRMatrixSolve функция при помощи fiaccel сгенерировать исполняемый файл MATLAB (MEX) функция.
fiaccel fixed.qlessQRMatrixSolve -args {A,B,T.X} -o qlessQRMatrixSolve_mex
Задайте выходной тип T.X и вычислите фиксированную точку использование метода QR.
X = qlessQRMatrixSolve_mex(A,B,T.X);
Вычислите относительную погрешность, чтобы проверить точность выхода.
relative_error = norm(double(A'*A*X - B))/norm(double(B))
relative_error = 0.1019
Подавите mlint предупреждения в этом файле.
%#ok<*NASGU> %#ok<*ASGLU>