реклама на сайте
подробности

 
 
3 страниц V   1 2 3 >  
Reply to this topicStart new topic
> Умножение теплицевых матриц
Виктор39
сообщение Apr 10 2015, 05:46
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 123
Регистрация: 8-02-13
Из: Минск
Пользователь №: 75 542



Требуется оптимизировать функцию ЦОС, в которой наиболее затратными являются функция умножения комплексных матриц и функция обратной матрицы.

Я заметил, что перемножаемые матрицы являются якобы теплицевыми, но не симметричными и не квадратными, т.е. примерно следующих форматов:

{ a+0, a+1, a+2, a+3;
a-1, a+0, a+1, a+2;
a-2, a-1, a+0, a+1 }

{ a+0, a+1, a+2;
a-1, a+0, a+1;
a-2, a-1, a+0;
a-3, a-2, a-1 }

Встречал алгоритмы, которые позволяют работать с теплицевыми матрицами размером [NxN].

Существуют ли оптимизированные алгоритмы, которые позволяют перемножать теплицевые не квадратные матрицы размером [NxM], где N != M ???
Может кто-нибудь встречал, подскажите, пожалуйста...

может быть теплицевыми являются только квадратные матрицы?
Go to the top of the page
 
+Quote Post
andyp
сообщение Apr 10 2015, 09:19
Сообщение #2


Местный
***

Группа: Участник
Сообщений: 453
Регистрация: 23-07-08
Пользователь №: 39 163



Квадратичный алгоритм описан здесь:
http://stackoverflow.com/questions/1588952...eplitz-matrices

Элементы на диагоналях получаются с помощью скользящего окна. Наверное, можно еще улучшить, считая, что умножается A * transpose(A)

Сообщение отредактировал andyp - Apr 10 2015, 09:28
Go to the top of the page
 
+Quote Post
serjj
сообщение Apr 10 2015, 09:32
Сообщение #3


Знающий
****

Группа: Участник
Сообщений: 527
Регистрация: 4-06-14
Из: Санкт-Петербург
Пользователь №: 81 866



Речь случайно не о методе наименьших квадратов или какой-то его разновидности? Если да, то полагаю у вас следующее: (A^H * A)^-1 * A^H. Ищется псевдоинверсия от матрицы данных А без прямого рассчета корреляционной матрицы Ф = А^H * A. В таком случае может вам лучше посмотреть в сторону svd реализации псевдоинверсии? Решение устойчивое и много где описано, например у Хайкина Adaptive filter theory. А насчет Теплица, корреляционная матрица уже не Теплицева, так что с инверсией (A^H * A)^-1 надо уже думать отдельно. Если ее оценивать по данным/матрице данных, она вроде как сходится к Эрмитовой со временем, т.к. по определению автокорреляционной матрицы она Эрмитова и состоит из элементов АКФ (но я тут уже не помню, нужно почитать-помоделировать, забыл). SVD хорошо описаны у Голуба и Лоана в книжке (есть на русском кстати, могу поделиться)

Сообщение отредактировал serjj - Apr 10 2015, 09:48
Go to the top of the page
 
+Quote Post
Виктор39
сообщение Apr 10 2015, 10:25
Сообщение #4


Частый гость
**

Группа: Участник
Сообщений: 123
Регистрация: 8-02-13
Из: Минск
Пользователь №: 75 542



Цитата
Квадратичный алгоритм описан здесь:
http://stackoverflow.com/questions/1588952...eplitz-matrices

спасибо, сейчас почитаю

Цитата
Речь случайно не о методе наименьших квадратов или какой-то его разновидности? Если да, то полагаю у вас следующее: (A^H * A)^-1 * A^H.

именно о методе наименьших квадратов и идет речь.

Цитата
SVD хорошо описаны у Голуба и Лоана в книжке (есть на русском кстати, могу поделиться)

буду весьма признательным, если поделитесь!
Go to the top of the page
 
+Quote Post
andyp
сообщение Apr 10 2015, 11:06
Сообщение #5


Местный
***

Группа: Участник
Сообщений: 453
Регистрация: 23-07-08
Пользователь №: 39 163



Цитата(serjj @ Apr 10 2015, 12:32) *
Речь случайно не о методе наименьших квадратов или какой-то его разновидности? Если да, то полагаю у вас следующее: (A^H * A)^-1 * A^H. Ищется псевдоинверсия от матрицы данных А без прямого рассчета корреляционной матрицы Ф = А^H * A. В таком случае может вам лучше посмотреть в сторону svd реализации псевдоинверсии?


Если дело касается выравнивания и DFE, то там часто LDU разложение произведения тёплицевых матриц используется, поэтому A^H * A надо искать.
Go to the top of the page
 
+Quote Post
serjj
сообщение Apr 10 2015, 11:34
Сообщение #6


Знающий
****

Группа: Участник
Сообщений: 527
Регистрация: 4-06-14
Из: Санкт-Петербург
Пользователь №: 81 866



Вот книга (11 МБ djvu, не пролазит как прикрепленная)

Цитата
именно о методе наименьших квадратов и идет речь.

Посмотрите у Хайкина главу про этот метод, если еще не читали. Там как раз описывается способ вычисления коэффициентов через псевдоинверсию матрицы данных. В отличие от некоторых "быстрых" методов инверсии обладает полной вычислительной устойчивостью и работает даже с сильно вырожденными матрицами (например в задачах с АФАР). Далее там есть глава про вычисления QR и SVD, но как раз у Голуба и Лоана более подробно это расписывается. Есть смысл покопать в гугле в сторону SVD Теплицовых матриц, наверняка есть какие то оптимизированные алгоритмы.

Цитата
Если дело касается выравнивания и DFE, то там часто LDU разложение произведения тёплицевых матриц используется, поэтому A^H * A надо искать.

Ну тогда можно еще проще сделать: Ф = 1/N * sum_N(а*а^H), где а - выборка данных в момент времени t. rolleyes.gif

Сообщение отредактировал serjj - Apr 10 2015, 11:35
Go to the top of the page
 
+Quote Post
Xenia
сообщение Apr 10 2015, 13:09
Сообщение #7


Гуру
******

Группа: Модератор FTP
Сообщений: 4 479
Регистрация: 20-02-08
Из: Москва
Пользователь №: 35 237



Не плохо было бы с помощью SVD посчитать собственные числа этих матриц, чтобы узнать, какие там числа получаются - реальные и комплексные. Потому что одна лишь принадлежность к теплицевым ответа на этот вопрос не дает.

Если эти матрицы из "реальной жизни" sm.gif, то есть шанс на то, что их собственные числа окажутся действительными. Оно так происходит с эрмитовыми. В таких случах может оказаться полезным метод Хаусхолдера, приводящий матрицу к тридиагональной форме. Он же, кстати, обычно является первой обязательной стадией QR/QL и SVD разложений, т.к. итерации делают не по плотной матрице, а по три- или дву- диагональным формам.

Есть задачи, в которых уже лишь приведение к 3- или 2-диагональным формам является вполне достаточным для получения эффективного (в смысле числа операций) решения, без необходимости доводить разложение до диагональной матрицы.
Go to the top of the page
 
+Quote Post
serjj
сообщение Apr 10 2015, 13:33
Сообщение #8


Знающий
****

Группа: Участник
Сообщений: 527
Регистрация: 4-06-14
Из: Санкт-Петербург
Пользователь №: 81 866



Цитата
Он же, кстати, обычно является первой обязательной стадией QR/QL и SVD разложений, т.к. итерации делают не по плотной матрице, а по три- или дву- диагональным формам.

Xenia, для QR/QL/SVD декомпозиций можно использовать только вращение Гивенса, без Хаусхолдера. Или можно комбинировать Хаусхолдера и Гивенса для ускорения вычисления? Можете поделиться какими нибудь статьями с примерами? rolleyes.gif

Как я понимаю, применяемый метод зависит от архитектуры, на которой все будет реализовываться. Например целочисленная QR декомпозиция легко разбивается на вычисление множества вращений Гивенса, которое суть поворот матрицы 2х2, параллелится и делается на обычном кордике.
Go to the top of the page
 
+Quote Post
andyp
сообщение Apr 10 2015, 13:47
Сообщение #9


Местный
***

Группа: Участник
Сообщений: 453
Регистрация: 23-07-08
Пользователь №: 39 163



Цитата(serjj @ Apr 10 2015, 14:34) *
Ну тогда можно еще проще сделать: Ф = 1/N * sum_N(а*а^H), где а - выборка данных в момент времени t. rolleyes.gif


Не прокатывает sm.gif Там при поиске MSE решения для рассчета весов требуется разложить R = 1/snr*I + H*conj(H), H - теплицева (построена из ИХ канала). Т.е. в оценке входной корр. матрицы нет смысла - она в каком-то смысле известна (так как известна ИХ канала)

Сообщение отредактировал andyp - Apr 10 2015, 13:52
Go to the top of the page
 
+Quote Post
serjj
сообщение Apr 10 2015, 13:55
Сообщение #10


Знающий
****

Группа: Участник
Сообщений: 527
Регистрация: 4-06-14
Из: Санкт-Петербург
Пользователь №: 81 866



Хы, да это же похоже на MMSE для OFDM/MIMO OFDM rolleyes.gif , слагаемое H*conj(H) может быть найдено двояко, т.к. по формулировке MMSE это аппроксимация Rxx автокорреляционной матрицы, а она может быть найдена по алгоритму sample matrix inversion (никогда не понимал почему он так называется), как 1/N * sum_N(h*h^H). А если нет, то почему? rolleyes.gif
Go to the top of the page
 
+Quote Post
andyp
сообщение Apr 10 2015, 14:06
Сообщение #11


Местный
***

Группа: Участник
Сообщений: 453
Регистрация: 23-07-08
Пользователь №: 39 163



Цитата(serjj @ Apr 10 2015, 16:55) *
Хы, да это же похоже на MMSE для OFDM/MIMO OFDM rolleyes.gif , слагаемое H*conj(H) может быть найдено двояко, т.к. по формулировке MMSE это аппроксимация Rxx автокорреляционной матрицы, а она может быть найдена по алгоритму sample matrix inversion (никогда не понимал почему он так называется), как 1/N * sum_N(h*h^H). А если нет, то почему? rolleyes.gif


Не совсем похоже. В OFDM матрицы циркулярные (там халява), собственно за тем и придумали OFDM sm.gif. Здесь они теплицевы - каждая H в формуле - это теплицева матрица.

PS всегда думал, что sample тут относится к тому, что корр матрица получена как оценка по входной выборке, типа из сэмплов.

Сообщение отредактировал andyp - Apr 10 2015, 14:07
Go to the top of the page
 
+Quote Post
serjj
сообщение Apr 10 2015, 14:23
Сообщение #12


Знающий
****

Группа: Участник
Сообщений: 527
Регистрация: 4-06-14
Из: Санкт-Петербург
Пользователь №: 81 866



Цитата
Не совсем похоже. В OFDM матрицы циркулярные (там халява)

Век живи, век учись). Я думал, что для OFDM Rxx = Rhh = E[h*h^H], где h - оценка канала в частотной области, полученная в пилотных точках. Вектор h мы берем на каждом OFDM символе. Далее w_MMSE = (Rxx + (1/SNR)*I)^-1 * Rxx, h_MMSE = h * w_MMSE^H. Ну вот как-то так. Мне не очень прозрачно как тут переписать матрицу Rhh через матрицу данных, т.к. в самом общем (и худшем) случае h произвольно дышит от блока к блоку.

А для MIMO получаем w_MMSE = (H*conj(H) + (1/SNR)*I)^-1 * conj(H), но тут H - матрица MIMO канала для данной поднесущей, которая в общем (и лучшем) случае произвольная комплексная матрица с линейно-независимыми строками.

ЗЫ: а про какой алгоритм вы говорите? Ниразу не попадалось инфы, чтобы MMSE применялся для SC систем.
Go to the top of the page
 
+Quote Post
andyp
сообщение Apr 10 2015, 14:32
Сообщение #13


Местный
***

Группа: Участник
Сообщений: 453
Регистрация: 23-07-08
Пользователь №: 39 163



Цитата(serjj @ Apr 10 2015, 17:23) *
Век живи, век учись). Я думал, что для OFDM Rxx = Rhh = E[h*h^H], где h - оценка канала в частотной области, полученная в пилотных точках. Вектор h мы берем на каждом OFDM символе. Далее w_MMSE = (Rxx + (1/SNR)*I)^-1 * Rxx, h_MMSE = h * w_MMSE^H. Ну вот как-то так. Мне не очень прозрачно как тут переписать матрицу Rhh через матрицу данных, т.к. в самом общем (и худшем) случае h произвольно дышит от блока к блоку.

А для MIMO получаем w_MMSE = (H*conj(H) + (1/SNR)*I)^-1 * conj(H), но тут H - матрица MIMO канала для данной поднесущей, которая в общем (и лучшем) случае произвольная комплексная матрица с линейно-независимыми строками.

ЗЫ: а про какой алгоритм вы говорите? Ниразу не попадалось инфы, чтобы MMSE применялся для SC систем.


Любую SC систему можно выравнивать эквалайзером в частотной области, если между блоками вставляется циклический префикс, нули или известная последовательность. В этом случае преобразование Фурье помогает в факторизации. Собственно поэтому это работает для OFDM. Я вобщем-то говорил про алгоритм оптимального формирования весов у DFE конечной длины. Познакомиться с ним можно у Al-Dhahir, например здесь и еще в куче статей

Прикрепленные файлы
Прикрепленный файл  00482098.pdf ( 1.03 мегабайт ) Кол-во скачиваний: 36
 
Go to the top of the page
 
+Quote Post
Xenia
сообщение Apr 10 2015, 14:48
Сообщение #14


Гуру
******

Группа: Модератор FTP
Сообщений: 4 479
Регистрация: 20-02-08
Из: Москва
Пользователь №: 35 237



Цитата(serjj @ Apr 10 2015, 16:33) *
Xenia, для QR/QL/SVD декомпозиций можно использовать только вращение Гивенса, без Хаусхолдера. Или можно комбинировать Хаусхолдера и Гивенса для ускорения вычисления? Можете поделиться какими нибудь статьями с примерами?


Насколько я знаю, метод Хаусхолдера применялся для этой цели еще со времен "Справочника" (Уилкинсон, Райнш). Оттуда же попал в большинство известных мне матпакетов, где для нахождения собственных значений и векторов приходилось вызывать не одну функцию, а последовательно три штуки: приведение к тридиагональной, QR-итерации и обратные итерации для восстановления соб.векторов. Но потом, когда в пакетах появилась для этих целей одна функция, стало сложно определить, как она внутри себя устроена. Например, MATLAB пишет, что qr() это его встроенная функция и кода не показывает. Тем не менее, подозреваю, что и там используется старый добрый Хаусхолдер. Вот и функция hess(), вычисляющая форму Гессенберга, использует все те же отражения Хаусхолдера, хотя его именем не называется.

По части применения в микроконтроллерах взгляните на это:
"Применение QR алгоритма для расчёта собственных структур корреляционных матриц на платформе ADSP-TS201 фирмы Analog Devices"
- там тоже Хаусхолдер.

И, наконец, цитата из "Алгебраическая проблема собственных значений – Часть 64":
Цитата
... метод Хаусхолдера требует вдвое меньше умножений, чем метод Гивенса.

Уилкинсон Дж.Х., Алгебраическая проблема собственных значений(1970):
Цитата
Число умножений, необходимое для выполнения процесса Шмидта, равно n3, тогда как триангуляризации Хаусхолдера и Гивенса требуют соответственно 2/3 n3 и 4/3 n3.
что, видимо, объясняет причину популярности метода отражений.
Go to the top of the page
 
+Quote Post
serjj
сообщение Apr 11 2015, 08:04
Сообщение #15


Знающий
****

Группа: Участник
Сообщений: 527
Регистрация: 4-06-14
Из: Санкт-Петербург
Пользователь №: 81 866



Всегда смотрел в сторону хардверной платформы rolleyes.gif . Для реализации на FPGA/ASIC большую популярность сыскал именно метод Гивенса, т.к. он позволяет гибко параллелить и масштабировать вычисления в виде систолического массива элементарных вычислитилей (поворотных матриц 2х2). При этом в целочисленной арифметике можно сделать разложение без умножителей только на кордике.

В принципе вычисление по Гивенсу также переносятся и на процессорную архитектуру, но тогда элементарные повороты придется делать в цикле, вот тогда видимо и получается
Цитата
Число умножений, необходимое для выполнения процесса Шмидта, равно n3, тогда как триангуляризации Хаусхолдера и Гивенса требуют соответственно 2/3 n3 и 4/3 n3.

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

ЗЫ:
Цитата
Например, MATLAB пишет, что qr() это его встроенная функция и кода не показывает. Тем не менее, подозреваю, что и там используется старый добрый Хаусхолдер.

Когда разбирался со всей этой кухней написал простенькую реализацию qr по Гивенсу с плавучкой для верификации реализации с фиксированной точкой. Оказалось, что встроенная матлабовская qr даёт несколько большую ошибку для аргументов типа single чем самописная реализация. Матрицы комплексные и близкие к вырожденным в обоих случаях.

andyp, Xenia, спасибо за ссылки! rolleyes.gif

Сообщение отредактировал serjj - Apr 11 2015, 08:08
Go to the top of the page
 
+Quote Post

3 страниц V   1 2 3 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 15th June 2025 - 18:28
Рейтинг@Mail.ru


Страница сгенерированна за 0.01492 секунд с 7
ELECTRONIX ©2004-2016