phantom 0 17 ноября, 2008 Опубликовано 17 ноября, 2008 · Жалоба Допустим есть у нас трубопровод. На некотором расстоянии от одного конца установлен динамик излучающий импульсы. Около динамика, в трубе, установлен микрофон, который эти имульсы записывает. При попытке посылки импульса получаем резкое искажение формы сигнала записанного микрофоном от излучаемого динамиком (появляются хвосты). Происходит это от того, что во время формирования импульса на него накладываются отражения от ближайшего конца трубопровода. Вопрос: существуют ли адаптивные алгоритмы, способные сформировать заданную форму импульса вне зависимости от характера начальных отражений (поскольку динамик может устанавливаться в трубы разной начальной конфигурации)? Основной критерий формирователя - малая длина полученого импульса. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
alex_os 0 18 ноября, 2008 Опубликовано 18 ноября, 2008 · Жалоба Допустим есть у нас трубопровод. На некотором расстоянии от одного конца установлен динамик излучающий импульсы. Около динамика, в трубе, установлен микрофон, который эти имульсы записывает. При попытке посылки импульса получаем резкое искажение формы сигнала записанного микрофоном от излучаемого динамиком (появляются хвосты). Происходит это от того, что во время формирования импульса на него накладываются отражения от ближайшего конца трубопровода. Вопрос: существуют ли адаптивные алгоритмы, способные сформировать заданную форму импульса вне зависимости от характера начальных отражений (поскольку динамик может устанавливаться в трубы разной начальной конфигурации)? Основной критерий формирователя - малая длина полученого импульса. Проблема похожа на Echo cancellation (поиск Гуглом дает кучу ссылок). В двух словах сигнал, что подается на динамик взвешивается фильтром и вычитается с выхода микрофона. Коэффициенты фильтра подстраиваются адаптивно, например LMS методом. Для тренировки фильтра нужно излучать шумоподобную последовательность. Вот неплохая книжка. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
fontp 0 18 ноября, 2008 Опубликовано 18 ноября, 2008 · Жалоба Проблема похожа на Echo cancellation (поиск Гуглом дает кучу ссылок). В двух словах сигнал, что подается на динамик взвешивается фильтром и вычитается с выхода микрофона. Коэффициенты фильтра подстраиваются адаптивно, например LMS методом. Для тренировки фильтра нужно излучать шумоподобную последовательность. Вот неплохая книжка. Можно адаптивно, но можно и статически. Подаем дельта-функцию на динамик и запоминаем импульсный отклик системы - сигнал с микрофона h. Для борьбы с шумом можно периодически повторять этот щелчок и использовать накопление. Физическая система (без памяти) казуальна, поэтому в уравнение H - нижнетреугольная матрица из импульсных откликов H * X = Y X - сигнал на динамик Y - сигнал с микрофона h0 0 0 ... 0 0 0 h1 h0 0 ... 0 ........................... ........................... hn .............. h1 h0 где hn .............. h1 h0 - импульсный отклик системы Для y0 = { 1 0 0 0 0 0 0 }т, решить уравнение с нижнетреугольной матрицей легко прямой подстановкой. Если решение неудовлетворительное в смысле устойчивости, то используют решения по минимуму квадратов (Ht * H) * X = Ht * Y ЗЫ. Более того для решений статического типа (статический эквалайзер) существует методы решения даже в случае если Х нельзя задать произвольно (как я задал дельта-функцией) и оно задано заранее внешними условиями как некий произвольный широкополосный сигнал. И для случая когда система не казуальна, а с памятью, как это имеет обычно место при цифровой обработке (матрица отклика не треугольная, а полная). Если вектора длинные и можно перейти к статистическому усреднению то там получаются уравнения Левинсона-Дурбина с теплицевыми матрицами. Для коротких последовательностей стат-усреднение неадекватно. Для коротких последовательностей лучше использовать быстрый рекурсивный ковариационный метод (минимум квадратов без стат-усреднения), описаный в статье Марпла, работающая программа FIR system identification на С (для комплексных сигналов) прилагается вместе с оригинальной статьей (в статье приведен быстрый алгоритм решения ковариационных уравнений и соответствующая программа на Фортране, я перевел когда-то на С и проверил, что там нет ошибок и опечаток) Интересно, что все электроники знают или слышали о Левинсоне-Дурбине, но почти никто не знает о быстром алгоритме для ковариационных уравнений - этому не учат в школе. А вот геофизики во всю используют. Преимущества адаптивного решения задачи идентификации системы в его способности адаптироваться к медленным изменениям системы. Последовательными приближениями решается та же самая система нормальных уравнений. Понятно и адаптивные и статические методы работают только для ЛИНЕЙНЫХ систем. Поэтому самый важный вопрос - это адекватность математической модели "трубы" marple_covar.zip Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
phantom 0 18 ноября, 2008 Опубликовано 18 ноября, 2008 · Жалоба Спасибо за советы - буду пробовать. Смотрел еcho cancellation еще раньше - там все более по телефонии - известный сигнал от абонента воспроизводится динамиком и попадает в микрофон вместе с полезным сигналом, и мне как-то не приходило в голову модифицировать такие алгоритмы. В моем случае же сигнал искажается за счет отражений от неизвестной конфигурации трубы (она конечно известна, но не хотелось бы каждую трубу описывать аналитически). Задача практическая - надо чтобы в любую трубу можно было "запустить" хотя бы приблизительно одинаковые по форме импульсы. Система думаю линейная - поскольку импульсы при пролете сквозь трубу формы своей ощутимо не изменяют. (В трубе стоят два микрофона - один около динамика, другой - на другом конце. При "выстреле" импульса 1-й микрофон фиксирует его измененную форму - второй - то же через время пролета в трубе.) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
alex_os 0 19 ноября, 2008 Опубликовано 19 ноября, 2008 · Жалоба ... В моем случае же сигнал искажается за счет отражений от неизвестной конфигурации трубы (она конечно известна, но не хотелось бы каждую трубу описывать аналитически). Задача практическая - надо чтобы в любую трубу можно было "запустить" хотя бы приблизительно одинаковые по форме импульсы. Не надо, конечно, аналитически трубу описывать. Динамик же излучает известный сигнал. Вам предлагается измерить тем или иным способом импульсную характеристику(ИХ) системы вход динамика - выход микрофона. И далее тем или иным способом использовать эту оценку ИХ. Если требуется сформировать импульс заданной формы, то можно рассчитать корректирующий фильтр. И этот фильтр включить перед динамиком ( или после микрофона). ИХ пропущенная через этот фильтр должна давать сигнал нужной формы. Вообще это не эхо кацлер получается а корректор. Вот кстати как фильтр посчитать http://electronix.ru/forum/index.php?showtopic=54523# Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
fontp 0 19 ноября, 2008 Опубликовано 19 ноября, 2008 · Жалоба Спасибо за советы - буду пробовать. Смотрел еcho cancellation еще раньше - там все более по телефонии - известный сигнал от абонента воспроизводится динамиком и попадает в микрофон вместе с полезным сигналом, и мне как-то не приходило в голову модифицировать такие алгоритмы. В моем случае же сигнал искажается за счет отражений от неизвестной конфигурации трубы (она конечно известна, но не хотелось бы каждую трубу описывать аналитически). Задача практическая - надо чтобы в любую трубу можно было "запустить" хотя бы приблизительно одинаковые по форме импульсы. Система думаю линейная - поскольку импульсы при пролете сквозь трубу формы своей ощутимо не изменяют. (В трубе стоят два микрофона - один около динамика, другой - на другом конце. При "выстреле" импульса 1-й микрофон фиксирует его измененную форму - второй - то же через время пролета в трубе.) Это Вы предполагаете, что линейна. А что если жидкость вязкая? Есть и ещё один вопрос. У вас есть исполнительный элемент - поршень (формально описываемый вектор входного сигнала Х соответствует чему-то вроде ускорению или может координате этого поршня) и два микрофона (вектор выхода Y включает в себя сигнал от обоих и при естественной дискретизации в два раза длинней X по размерности) Вы сразу получаете переопределённую систему уравнений H*X = Y которую можно решить только в смысле минимума квадратов невязки Min (H*X-Y)*(H*X-Y) Откуда сразу получаются нормальные уравнения хоть для h, хоть для X, в зависимости от того что Вы считаете переменной, а что известно H или Х Хорошо, получили Х (если известно H или напротив получили h, если известно Х). Но вы скорее всего физически не сможете его реализовать, поскольку ускорение Х подчиняется уравнениям движения. Например идеальную дельта-функцию Вы не сможете реализовать никак, тем более её производные. Значит в исходную систему уравнений нужно дописывать ограничения на движение, например что на всех высоких частотах движение поршня равно нулю, как его не толкай. Хотя если поршень - это линейный исполнительный элемент - его отклик в жидкости на приложенное напряжение лучше сразу загнать в неизвестный отклик H (сделать Х напряжением, подаваемым на привод) и то что он плохо двигается будет сидеть в уравнениях, которые получаются в результате опыта. Нормальные уравнения (Ht*H) * X = Ht*Y cделаются некорректными и нужно будет делать им регуляризацию [(Ht*H) + e*I] * X = Ht*Y Вопрос адекватности и вменяемости модели как раз самый важный ;) Математику можно всяко навести Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
phantom 0 19 ноября, 2008 Опубликовано 19 ноября, 2008 · Жалоба угу, только предполагаю... поскольку пока у меня воздух в трубе а не жидкость. С жидкостью пока подождем. пробуем пока с маткадовским "систем идентификейшн тулбокс" - для 2х периодов Sin все ок - а чуть сложнее сигнал - все идет вразнос (неустойчивость типа). Поршень у меня... наверно динамик, и два микрофона имеются. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
phantom 0 20 ноября, 2008 Опубликовано 20 ноября, 2008 · Жалоба fontp Пробовали запихнуть в Вашу программу наши сигналы - тот, что подается на динамик, и записанный в начале трубы, причем в качестве входного пробовали шум, кусок синусоиды и еще несколько вариантов. Проблема в том, что отклик достаточно длинный - пару тысяч отсчетов, так что при небольшом количестве отсчетов ИХ фильтра естественно ничего не получается, а побольше его сделать проблематично - даже для тестовых данных (случайный сигнал на входе и свернутый со случайной ИХ) длиной 10200 и порядком фильтра 1000 fir_covar возвращает код ошибки (-1,-2), а коэффициенты считаются только до 544-го (остальные нули). Чтоб считались все коэффициенты и не было ошибки, нужно, чтобы количество отсчетов сигнала и отклика было раз в 100 больше порядка фильтра (для тестового сигнала, для наших так и не получилось ничего). В то же время из статьи можно понять, что вроде достаточно данных всего в 2 раза больше порядка. То ли есть какие-то нюансы в реализации алгоритма, то ли я идею неправильно понимаю? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
fontp 0 20 ноября, 2008 Опубликовано 20 ноября, 2008 · Жалоба fontp Пробовали запихнуть в Вашу программу наши сигналы - тот, что подается на динамик, и записанный в начале трубы, причем в качестве входного пробовали шум, кусок синусоиды и еще несколько вариантов. Проблема в том, что отклик достаточно длинный - пару тысяч отсчетов, так что при небольшом количестве отсчетов ИХ фильтра естественно ничего не получается, а побольше его сделать проблематично - даже для тестовых данных (случайный сигнал на входе и свернутый со случайной ИХ) длиной 10200 и порядком фильтра 1000 fir_covar возвращает код ошибки (-1,-2), а коэффициенты считаются только до 544-го (остальные нули). Куда Вам столько много? Это подгонка. Порядок нужно ограничивать в вызове функции. Обычно порядок увеличивают только до тех пор пока ошибка уменьшается резко. Обычно ошибка снижается сначала более резко, а потом менее резко. На перегибе останавливаются :-) Дальше - это всё подгонка под шум. Так моделируются FIR-системы, есть там специальная даже стат-наука по выбору порядка. "Моя программа" это всего лишь быстрый алгоритм решения ковариационных уравнений. Можете выписать нормальные уравнения и решать их любой другой программой для решения линейных систем уравнений. При обычной точности вычислений возможно решать системы порядка несколько десятков, особенно если они недостаточно хорошо обусловлены Это всё ещё без учета того, что вам вообще-то нужен скорее обратный фильтр, чем прямой. Т.е. Ваша задача больше похожа на эквалайзер, чем на эхоподавитель, причем не нужно стремиться к идеальной форме (дельта-функции), поскольку у Вас реакция запаздывающая и идеальную компенсацию получить нельзя. Мне кажется так Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
phantom 0 23 ноября, 2008 Опубликовано 23 ноября, 2008 · Жалоба А в каких пакетах кроме Матлаба есть нечто похожее на System Identification? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Grt 0 22 декабря, 2008 Опубликовано 22 декабря, 2008 · Жалоба А в каких пакетах кроме Матлаба есть нечто похожее на System Identification? Советую попробовать блочный FDAF Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться