Решите, что фиксированные точки для действительной матрицы Q-less QR решают A'AX=B

В этом примере показано, как использовать fixed.realQlessQRMatrixSolveFixedpointTypes функционируйте, чтобы аналитически определить фиксированные точки для решения действительного матричного уравнения наименьших квадратов AAX=B, где A m-n матрица с mn, B n-p, и X n-p.

Фиксированные точки для решения матричного уравнения AAX=B хорошо ограничены если количество строк, m, из A очень больше количества столбцов, n т.е. . mn), и A полный ранг. Если A не по сути полный ранг, затем это может быть сделано так путем добавления случайного шума. Случайный шум естественно происходит в физических системах, таких как тепловой шум в радиолокационных системах или системах связи. Если m=n, затем динамический диапазон системы может быть неограниченным, например, в скалярном уравнении x=a/b и a,b[-1,1]то x может быть произвольно большим если b близко к 0.

Задайте системные параметры

Задайте матричные атрибуты и системные параметры для этого примера.

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 или определение направления, rank(A) соответствует количеству сигналов, посягающих на сенсорную матрицу.

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 к эквиваленту -50шумовая мощность дБ.

thermalNoiseStandardDeviation = sqrt(10^(-50/10))
thermalNoiseStandardDeviation = 0.0032

Стандартное отклонение шума квантования является функцией необходимого количества битов точности. Используйте fixed.realQuantizationNoiseStandardDeviation вычислить это. Смотрите, что это меньше thermalNoiseStandardDeviation.

quantizationNoiseStandardDeviation = fixed.realQuantizationNoiseStandardDeviation(precisionBits)
quantizationNoiseStandardDeviation = 1.7206e-08

Вычислите фиксированные точки

В этом примере примите что спроектированная системная матрица A не имеет полного ранга (существует меньше сигналов интереса, чем количество столбцов матрицы A), и измеренная системная матрица A имеет аддитивный тепловой шум, который больше, чем шум квантования. Аддитивный шум делает измеренную матрицу A имейте полный ранг.

Набор σnoise=σthermal шум.

noiseStandardDeviation = thermalNoiseStandardDeviation;

Используйте fixed.realQlessQRMatrixSolveFixedpointTypes вычислить фиксированные точки.

T = fixed.realQlessQRMatrixSolveFixedpointTypes(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 тип, вычисленный для преобразования A к R=QA оперативный так, чтобы это не переполнялось.

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 тип, вычисленный для решения X=(AA)\B так, чтобы была низкая вероятность, что это переполняется.

T.X
ans = 

[]

          DataTypeMode: Fixed-point: binary point scaling
            Signedness: Signed
            WordLength: 39
        FractionLength: 24

Используйте заданные типы, чтобы решить матричное уравнение A'AX=B

Создайте случайные матрицы A и B, таким образом что rankA=rank (A). Добавьте случайный шум измерения в, который заставит его стать полным рангом.

rng('default');
[A,B] = fixed.example.realRandomQlessQRMatrices(m,n,p,rankA);
A = A + fixed.example.realNormalRandomArray(0,noiseStandardDeviation,m,n);

Бросьте входные параметры к типам, определенным fixed.realQlessQRMatrixSolveFixedpointTypes. Квантование к фиксированной точке эквивалентно добавлению случайного шума [4,5].

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 и вычислите фиксированную точку X=(AA)\B использование метода QR.

X = qlessQRMatrixSolve_mex(A,B,T.X);

Вычислите относительную погрешность, чтобы проверить точность ouput.

relative_error = norm(double(A'*A*X - B))/norm(double(B))
relative_error = 0.0561

Подавите mlint предупреждения в этом файле.

%#ok<*NASGU>
%#ok<*ASGLU>

Смотрите также

Функции

Блоки

Похожие темы

Для просмотра документации необходимо авторизоваться на сайте