fixed.complexQlessQRMatrixSolveFixedpointTypes

Определите фиксированные точки для матричного решения A с комплексным знаком 'AX=B с помощью разложения QR

Описание

пример

T = fixed.complexQlessQRMatrixSolveFixedpointTypes(m,n,max_abs_A,max_abs_B,precisionBits) вычисляет фиксированные точки для матричного решения A с комплексным знаком 'AX=B с помощью разложения QR. T возвращен как struct с полями, которые задают фиксированные точки для A и B, которые гарантируют, что никакое переполнение не произойдет в QR-алгоритме, преобразовывающем A, оперативный в верхне-треугольный R, где Q, R =A является разложением QR X и X, таким образом, что существует низкая вероятность переполнения.

пример

T = fixed.complexQlessQRMatrixSolveFixedpointTypes(___,noiseStandardDeviation,p_s) задает стандартное отклонение аддитивного случайного шума в A и вероятности, что оценка нижней границы для самого маленького сингулярного значения A больше, чем фактическое самое маленькое сингулярное значение матрицы.

Примеры

свернуть все

В этом примере показано, как использовать fixed.complexQlessQRMatrixSolveFixedpointTypes функционируйте, чтобы аналитически определить фиксированные точки для решения комплексного матричного уравнения наименьших квадратов 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 создаются таким образом, что величина действительных и мнимых частей их элементов меньше чем или равна одному, таким образом, максимальное возможное абсолютное значение любого элемента |1+1i|=2. Ваши собственные системные требования зададут, каковы те значения. Если вы не знаете то, что они, и A и B входные параметры фиксированной точки к системе, затем можно использовать upperbound функция, чтобы определить верхние границы фиксированных точек A и B.

max_abs_A верхняя граница на максимальном элементе массива величины.

max_abs_A = sqrt(2);

max_abs_B верхняя граница на максимальном элементе величины B.

max_abs_B = sqrt(2);

Стандартное отклонение теплового шума является квадратным корнем из степени теплового шума, которая является системным параметром. Хорошо спроектированная система имеет уровень квантования ниже, чем тепловой шум. Здесь, установите thermalNoiseStandardDeviation к эквиваленту -50шумовая мощность дБ.

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

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

quantizationNoiseStandardDeviation = fixed.complexQuantizationNoiseStandardDeviation(precisionBits)
quantizationNoiseStandardDeviation = 2.4333e-08

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

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

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

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 тип, вычисленный для преобразования 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: 40
        FractionLength: 24

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

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

Входные параметры

свернуть все

Количество строк в A и B в виде положительного скаляра с целочисленным знаком.

Типы данных: double

Количество столбцов в A в виде положительного скаляра с целочисленным знаком.

Типы данных: double

Максимум абсолютного значения A в виде скаляра.

Пример: max(abs(A(:)))

Типы данных: double

Максимум абсолютного значения B в виде скаляра.

Пример: max(abs(B(:)))

Типы данных: double

Необходимое количество битов точности ввода и вывода в виде положительного скаляра с целочисленным знаком.

Типы данных: double

Стандартное отклонение аддитивного случайного шума в A в виде скаляра.

Если noiseStandardDeviation не задан, затем значением по умолчанию является стандартное отклонение шума квантования с комплексным знаком σq=(2precisionBits)/(6), который вычисляется fixed.complexQuantizationNoiseStandardDeviation.

Типы данных: double

Вероятность, что оценка нижней границы s больше, чем фактическое самое маленькое сингулярное значение матрицы в виде скаляра. Использование fixed.complexSingularValueLowerBound оценить самое маленькое сингулярное значение, s, A. Если p_s не задан, значение по умолчанию ps=(1/2)(1+erf(5/2))3107 который является 5 стандартными отклонениями ниже среднего значения, таким образом, вероятностью, что предполагаемое направляющееся в самое маленькое сингулярное значение меньше фактического самого маленького сингулярного значения, является 1-ps ≈ 0.9999997.

Типы данных: double

Выходные аргументы

свернуть все

Фиксированные точки для A, B, и X, возвратились как struct. Struct T имеет поля T.A, T.B, и T.X. Эти поля содержат fi объекты, которые задают фиксированные точки для

  • A и B, которые не гарантируют переполнения, произойдут в QR-алгоритме.

    QR-алгоритм преобразовывает A, оперативный в верхне-треугольный R, где Q R =A является разложением QR A.

  • X, таким образом, что существует низкая вероятность переполнения.

Советы

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

Алгоритмы

Фиксированная точка для A вычисляется с помощью fixed.qlessqrFixedpointTypes. Необходимое количество целочисленных битов, чтобы предотвратить переполнение выведено из следующего, привязал рост R [1]. Необходимое количество целочисленных битов добавляется к количеству битов точности, precisionBits, из входа, плюс один для знакового бита, плюс один бит для промежуточного усиления CORDIC приблизительно 1,6468 [2].

Элементы R ограничены в величине

max(|R(:)|)mmax(|A(:)|).

Матричный B не преобразовывается, таким образом, ему не нужны никакие дополнительные биты роста.

Элементы X =R \(R '\B) ограничены в величине

max(|X(:)|)nmax(|B(:)|)min(svd(A))2.

Вычисление сингулярного разложения, чтобы вывести вышеупомянутое привязало X, более в вычислительном отношении интенсивно, чем целая матрица решает, таким образом, fixed.complexSingularValueLowerBound функция используется, чтобы оценить привязанный min(svd(A)).

Ссылки

[2] Voler, Джек Э. "Тригонометрический вычислительный метод CORDIC". Транзакции IRE на электронно-вычислительных машинах EC-8 (1959): 330-334.

Введенный в R2021b