|
Сравнение сигнала с эталонами |
|
|
|
Dec 18 2017, 17:12
|
Участник
Группа: Свой
Сообщений: 58
Регистрация: 6-07-12
Из: г.Нижний Новгород
Пользователь №: 72 651
|
Цитата(Sergey Krivonosov @ Dec 18 2017, 19:22) Подозреваю, что данная проблема решается с помощью преобразований Фурье, но как приступить я не знаю. Может кто то подскажет метод решения. Cуществуют конечно научный способы вычисления корреляции, но можно попробовать по типу разложения по квадратурам. Сдвинуть тестовый сигнал на 90гр. и сделать перемножение сигнала на две квадратуры тестового сигнала, а потом посчитать что то типа модуля. Ну либо если нужен научный метод, то искать алгоритмы вычисления корреляции.
|
|
|
|
|
Dec 19 2017, 06:37
|
Участник
Группа: Участник
Сообщений: 42
Регистрация: 2-08-17
Пользователь №: 98 600
|
Цитата(seniorandre @ Dec 18 2017, 18:12) Cуществуют конечно научный способы вычисления корреляции, но можно попробовать по типу разложения по квадратурам. Сдвинуть тестовый сигнал на 90гр. и сделать перемножение сигнала на две квадратуры тестового сигнала, а потом посчитать что то типа модуля. Ну либо если нужен научный метод, то искать алгоритмы вычисления корреляции. Это называется преобразование Гильберта. Только зачем оно здесь? Разве в описанном методе есть какое-то сравнение сигнала с эталоном? Что касается вопроса ТС. Да, можно применить преобразование Фурье. Для сравнения сигналов используют понятие корреляции. Вычисление корреляции двух сигналов = вычисление свёртки этих двух сигналов. БПФ можно использовать для вычисления так называемой быстрой свёртки. В спектральной области свёртка заменяется на простое умножение. То есть, схема примерно такая: есть принятый сигнал s(t) и набор эталонов Ai(t). Вычисляем БПФ[s(t)] и БПФ[Ai(t)]. Вычисляем x = БПФ[s(t)]*БПФ[Ai(t)]. В конце вычисляем ОБПФ[x].
|
|
|
|
|
Dec 19 2017, 09:42
|
Частый гость
Группа: Участник
Сообщений: 90
Регистрация: 10-07-08
Из: Днепропетровск
Пользователь №: 38 859
|
Цитата(seniorandre @ Dec 18 2017, 19:12) Cуществуют конечно научный способы вычисления корреляции, но можно попробовать по типу разложения по квадратурам. Сдвинуть тестовый сигнал на 90гр. и сделать перемножение сигнала на две квадратуры тестового сигнала, а потом посчитать что то типа модуля. Ну либо если нужен научный метод, то искать алгоритмы вычисления корреляции. Спасибо за подсказку, я не мог понять, где взять мнимую часть сигнала. Действительно сдвинув сигнал на 90 градусов я получаю мнимую часть сигнала. Для одной свертки я должен получить 4 массива: M1, M2, M3, M4, где M1 cos сигнала, M2 sin сигнала, M3 cos эталона, M4 sin эталона. Отдельно суммирую от n=0..127: M1(n)*M3(n) - M2(n)*M4(n) и M1(n)*M4(n)+M3(n)*M2(n). Затем эти суммы возвожу в квадрат и суммирую и извлекаю корень квадратный. Что мне даст эта свертка? Я так понимаю, что если сигналы совпадают я получу максимальное значение амплитуды? Цитата(el.d @ Dec 19 2017, 08:37) Это называется преобразование Гильберта.
Только зачем оно здесь? Разве в описанном методе есть какое-то сравнение сигнала с эталоном?
Что касается вопроса ТС. Да, можно применить преобразование Фурье.
Для сравнения сигналов используют понятие корреляции. Вычисление корреляции двух сигналов = вычисление свёртки этих двух сигналов.
БПФ можно использовать для вычисления так называемой быстрой свёртки. В спектральной области свёртка заменяется на простое умножение.
То есть, схема примерно такая: есть принятый сигнал s(t) и набор эталонов Ai(t). Вычисляем БПФ[s(t)] и БПФ[Ai(t)]. Вычисляем x = БПФ[s(t)]*БПФ[Ai(t)]. В конце вычисляем ОБПФ[x]. Предположим я вычислил БПФ и получил амплитуды разных частот. На какое количество частот разбить сигнал? Для каждой частоты нужно произвести свертку. Если частот много - это слишком затратно по вычислениям, даже если применить БПФ. Не пройдет ли одна свертка с эталоном сигнала, как я написал выше?
--------------------
|
|
|
|
|
Dec 19 2017, 10:37
|
Участник
Группа: Участник
Сообщений: 42
Регистрация: 2-08-17
Пользователь №: 98 600
|
Цитата(Sergey Krivonosov @ Dec 19 2017, 10:42) Спасибо за подсказку, я не мог понять, где взять мнимую часть сигнала. Действительно сдвинув сигнал на 90 градусов я получаю мнимую часть сигнала. Для одной свертки я должен получить 4 массива: M1, M2, M3, M4, где M1 cos сигнала, M2 sin сигнала, M3 cos эталона, M4 sin эталона. Отдельно суммирую от n=0..127: M1(n)*M3(n) - M2(n)*M4(n) и M1(n)*M4(n)+M3(n)*M2(n). Затем эти суммы возвожу в квадрат и суммирую и извлекаю корень квадратный. Что мне даст эта свертка? Я так понимаю, что если сигналы совпадают я получу максимальное значение амплитуды?
Предположим я вычислил БПФ и получил амплитуды разных частот. На какое количество частот разбить сигнал? Для каждой частоты нужно произвести свертку. Если частот много - это слишком затратно по вычислениям, даже если применить БПФ. Не пройдет ли одна свертка с эталоном сигнала, как я написал выше? Ну вы писали, что у вас сигнал из 128 отсчетов. Следовательно, БПФ тоже должен быть на 128 точек - получается, для сравнения сигнала с одним из эталонов надо 2 БПФ, 128 умножений и ОБПФ.
Сообщение отредактировал el.d - Dec 19 2017, 10:40
|
|
|
|
|
Dec 19 2017, 10:53
|
Участник
Группа: Участник
Сообщений: 42
Регистрация: 2-08-17
Пользователь №: 98 600
|
Цитата(_pv @ Dec 19 2017, 11:49) с учётом того, что БПФ на обычных МК вроде кортексов делаются за ~100 тактов на отсчёт, на таких коротких выборках делать 2 раза БПФ, туда и обратно, (для эталонов можно посчитать заранее) получается не быстрее чем тупо посчитать корреляцию за 128*128 умножений во временной области. Да, скорее всего выигрыш от вычисления свёртки через БПФ будет весомым для бОльшего количества точек. Правда, ТС ничего про МК не говорил.
Сообщение отредактировал el.d - Dec 19 2017, 10:53
|
|
|
|
|
Dec 19 2017, 11:12
|
Частый гость
Группа: Участник
Сообщений: 90
Регистрация: 10-07-08
Из: Днепропетровск
Пользователь №: 38 859
|
Цитата(el.d @ Dec 19 2017, 12:37) Ну вы писали, что у вас сигнал из 128 отсчетов. Следовательно, БПФ тоже должен быть на 128 точек - получается, для сравнения сигнала с одним из эталонов надо 2 БПФ, 128 умножений и ОБПФ. Не так, для построения БПФ на 128 частот потребуется применить 127 "бабочек". Каждая бабочка это 4 умножения и 4 суммирования. Следовательно, умножений нужно сделать 127*4=508. Для эталонов БПФ выполнять не нужно, его можно выполнить 1 раз и забить в память. После БПФ нам нужно рассчитать амплитуду сигнала для каждой из 128 частот. Т.е. возвести в квадрат действительную и мнимую часть, сложить и найти корень квадратный. И можно сравнивать с амплитудами эталонов забитыми в память. Зачем мне делать обратное преобразование Фурье?
--------------------
|
|
|
|
|
Dec 19 2017, 11:24
|
Участник
Группа: Участник
Сообщений: 42
Регистрация: 2-08-17
Пользователь №: 98 600
|
Цитата(Sergey Krivonosov @ Dec 19 2017, 12:12) Не так, для построения БПФ на 128 частот потребуется применить 127 "бабочек". Каждая бабочка это 4 умножения и 4 суммирования. Следовательно, умножений нужно сделать 127*4=508. Для эталонов БПФ выполнять не нужно, его можно выполнить 1 раз и забить в память. После БПФ нам нужно рассчитать амплитуду сигнала для каждой из 128 частот. Т.е. возвести в квадрат действительную и мнимую часть, сложить и найти корень квадратный. И можно сравнивать с амплитудами эталонов забитыми в память. Зачем мне делать обратное преобразование Фурье? Потому что корреляционная функция (результат свёртки принятого сигнала с эталоном) - это функция от времени. После применения БПФ к принятому сигналу или к эталону получается функция от частоты. Не надо никакие амплитуды считать. Тем более, что амплитуда у принятого сигнала очень вряд ли будет для всех наблюдений постоянной. Или в вашей системе если у принятого сигнала амплитуда меньше чем у эталона, но временная диаграмма один в один - то это уже не совпадение? Вам тут уже правильно подсказали почитать про согласованный фильтр.
Сообщение отредактировал el.d - Dec 19 2017, 11:27
|
|
|
|
|
Dec 19 2017, 11:36
|
Частый гость
Группа: Участник
Сообщений: 90
Регистрация: 10-07-08
Из: Днепропетровск
Пользователь №: 38 859
|
Цитата(el.d @ Dec 19 2017, 13:24) Потому что корреляционная функция (результат свёртки принятого сигнала с эталоном) - это функция от времени. После применения БПФ к принятому сигналу или к эталону получается функция от частоты.
Не надо никакие амплитуды считать. Тем более, что амплитуда у принятого сигнала очень вряд ли будет для всех наблюдений постоянной. Или в вашей системе если у принятого сигнала амплитуда меньше чем у эталона, но временная диаграмма один в один - то это уже не совпадение? Вам тут уже правильно подсказали почитать про согласованный фильтр. Вы правильно написали, что амплитуды будут разные. Но амплитуды можно нормировать. Амплитуда, как раз и отвечает за отклик на ту или иную частоту и сравнивать я могу только амплитуды (как иначе, что с чем я должен сравнивать. Только мне нужно не теоретически, а что с чем я должен сравнить?). После БПФ мы можем построить амплитудно-частотную характеристику, которую можно сравнить с эталоном.
--------------------
|
|
|
|
|
Dec 19 2017, 11:40
|
Участник
Группа: Участник
Сообщений: 42
Регистрация: 2-08-17
Пользователь №: 98 600
|
Цитата(Sergey Krivonosov @ Dec 19 2017, 12:36) Вы правильно написали, что амплитуды будут разные. Но амплитуды можно нормировать. Амплитуда, как раз и отвечает за отклик на ту или иную частоту и сравнивать я могу только амплитуды (как иначе, что с чем я должен сравнивать. Только мне нужно не теоретически, а что с чем я должен сравнить?). После БПФ мы можем построить амплитудно-частотную характеристику, которую можно сравнить с эталоном. Например, пик корреляционной функции сравнивать с неким порогом. Или сравнивать отклики корреляторов между собой и выбирать наибольший. Как выбрать порог - зависит от задачи. Вообще, то, что вам надо - это самая обычная задача различения сигналов. В любом учебнике по статистической радиотехнике написано, как это делать оптимально в том или ином смысле.
Сообщение отредактировал el.d - Dec 19 2017, 11:45
|
|
|
|
|
Dec 19 2017, 12:53
|
Частый гость
Группа: Участник
Сообщений: 90
Регистрация: 10-07-08
Из: Днепропетровск
Пользователь №: 38 859
|
Цитата(el.d @ Dec 19 2017, 13:40) Например, пик корреляционной функции сравнивать с неким порогом. Или сравнивать отклики корреляторов между собой и выбирать наибольший. Как выбрать порог - зависит от задачи. Вообще, то, что вам надо - это самая обычная задача различения сигналов. В любом учебнике по статистической радиотехнике написано, как это делать оптимально в том или ином смысле. Хотелось бы конкретную привязку. На вход БПФ я подаю сигнал, который представляет 128 выборок. Если бы я делал в аналоговом виде, то мне нужно было бы поставить 128 фильтров, каждый из которых пропускает только свою частоту (настроены на разные частоты). На выходе каждого фильтра я получаю синусоиду одной данной частоты. Поэтому мне надо поставить после каждого фильтра выпрямитель и мерить амплитуду после каждого фильтра. В цифровом виде в качестве выпрямителя и будет вычисление амплитуды. Цитата Вычисляем БПФ[s(t)] и БПФ[Ai(t)]. Вычисляем x = БПФ[s(t)]*БПФ[Ai(t)]. В конце вычисляем ОБПФ[x]. Зачем делать обратное преобразование Фурье (ОБПФ) и что с чем сравнивать я так и не понял? По поводу БПФ, я его рассматриваю, как запасной вариант. Прежде всего я хотел бы понять, можно ли делать сравнение по свертке входного сигнала с эталоном. Особенно, когда входной сигнал сдвинут по фазу относительно эталона. Т.к. это более простой быстрый метод.
--------------------
|
|
|
|
|
Dec 19 2017, 13:58
|
Участник
Группа: Участник
Сообщений: 42
Регистрация: 2-08-17
Пользователь №: 98 600
|
Цитата(Sergey Krivonosov @ Dec 19 2017, 13:53) Хотелось бы конкретную привязку. На вход БПФ я подаю сигнал, который представляет 128 выборок. Если бы я делал в аналоговом виде, то мне нужно было бы поставить 128 фильтров, каждый из которых пропускает только свою частоту (настроены на разные частоты). На выходе каждого фильтра я получаю синусоиду одной данной частоты. Поэтому мне надо поставить после каждого фильтра выпрямитель и мерить амплитуду после каждого фильтра. В цифровом виде в качестве выпрямителя и будет вычисление амплитуды.
Зачем делать обратное преобразование Фурье (ОБПФ) и что с чем сравнивать я так и не понял?
По поводу БПФ, я его рассматриваю, как запасной вариант. Прежде всего я хотел бы понять, можно ли делать сравнение по свертке входного сигнала с эталоном. Особенно, когда входной сигнал сдвинут по фазу относительно эталона. Т.к. это более простой быстрый метод. Вы видимо пропустили то сообщение, где я говорил, что БПФ как раз и используем для вычисления свёртки принятого сигнала с эталоном. Еще раз: свёртка[принятый сигнал,эталон] = ОБПФ[БПФ[принятый сигнал]*БПФ[эталон]]. Это так называемая быстрая свёртка, по результатам - ничем не хуже классической. Доказательство можно посмотреть в любом учебнике по ЦОС. Однако, данный метод точно дает ускорение в случае относительно большого числа точек БПФ (тысячи). Даст ли этот метод прирост в вашем случае - зависит от того, что и как делать.
|
|
|
|
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|