Введение.
При использовании АЦП, пользователь может столкнуться с такой проблемой как ошибка преобразования. Ошибки подобного рода возникают, когда компаратор в АЦП не успевает сравнить два напряжения и на выходе у него оказывается единица, вместо нуля или нуль, вместо единицы. Предположим, имеется некоторое АЦП. По документации АЦП способен работать на максимальной частоте и на минимальной частоте . При, относительно высоких частотах тактирования, близких к , на записи шума, полученного с АЦП можно наблюдать наличие множественных выбросов. Выглядеть это будет как на рисунке 1.
Приблизив рисунок можно наблюдать одинокий выброс в потоке шума (рисунок 2).
Одиночный выброс в потоке шума -- это, можно сказать, дельта функция, которая в частотной области будет образовывать шумовую полку во всей полосе, тем самым снижая чувствительность приёмного тракта (рисунок 3).
Классическая фильтрация по типу сглаживания: среднее арифметическое, медианный фильтр, бегущее среднее и т.д. может избавить от выбросов, однако придётся пожертвовать частотой дискретизации, чего хотелось бы избежать.
Возникает вопрос: как избавится от выбросов не снижая частоту дискретизации? Тут к нам на помощь приходит CFAR детектор.
CFAR детектор.
Изначально, CFAR - это адаптивный алгоритм, используемый в радиолокации для обнаружения цели в условиях шума, помех и интерференции сигналов. В радиолокации сигнал РЛС априорно известен, поэтому для обнаружения отраженных от целей сигналов применяют согласованную фильтрацию. В результате такой фильтрации сигнал как бы "сжимается", повышается пик-фактор. Затем, с помощью CFAR детектора осуществляется обнаружение сигналов на фоне шумов. Важно, что алгоритм CFAR заточен под обнаружение сигналов конкретной длительности, равной длительности сигнала после "сжатия". Схематично алгоритм CFAR представлен на рисунке 4.
По сути алгоритм сводится к тому, чтобы сравнить одну ячейку с другими и принять решение: обнаружен сигнал или не обнаружен. Более подробное описание алгоритма можно легко найти на просторах интернета, поэтому детально останавливаться на нём мы не будем.
Фильтрация выбросов.
Если применить алгоритм CFAR для детектирования выбросов в шумах, вызванных ошибками преобразования, то их можно будет отфильтровать, перезаписав значение отсчёта выброса средним значением с которым производилось сравнение в детекторе. При этом, сигналы, длительность которых отлична от одного отсчёта не будут детектироваться, а значит не будут отфильтрованы. На рисунке 5 представлен результат работы детектора при наличии выброса.
При этом, если отсчётов выше порога более одного, то порог просто огибает сигнал и детектирования не происходит (рисунок 6).
Теперь отфильтруем выбросы с помощью CFAR детектора. Для этого произведём детектирование выбросов и заменим отсчёты на средние. Результат фильтрации представлен на рисунке 7.
Сравнивая рисунки 1 и 7 видно, что фильтр прекрасно справляется с одиночными выбросами.
Таким образом, применение алгоритма фильтрации шумов преобразования на основе CFAR позволяет отфильтровать шумы преобразования с сохранением частоты дискретизации.
Комментарии (6)
nv13
21.08.2024 17:29+1Не очень понятна сфера применения данного подхода.
Если дискретизация ведётся на очень высокой частоте по сравнению с полосой сигнала, то чтобы избежать всего этого достаточно понизить частоту или заменить АЦП на нормальный.
Если это и вправду радиолокационное приложение, то тогда по приведённой структурной схеме подобную "отбраковку" надо делать перед согласованным фильтром, иначе эта импульсная помеха в нём размножится. Да и вообще непонятно, почему АЦП стоит в квадратурном канале, а не в тракте ПЧ.
Ну и, наконец, непонятна природа этих выбросов - может они вызваны разводкой платы или сбоями интерфейса ввода с АЦП?
В радиолокации подавление импульсной помехи осуществляется устройствами межпериодной обработки. Единственный раз, когда нечто подобное я применял, это когда надо было оцифровывать угол со старого искрящего потенциометрического датчика отбраковкой измерений и интерполяцией по соседним отсчётам. Но там никаких проблем с АЦП и частотой дискретизации не было.
Aelentux Автор
21.08.2024 17:29Спасибо за вопросы. Отвечаю, но не по порядку)
1.Выбросы связаны с ошибками преобразования в АЦП. Видимо компараторы не справляются. Почему они возникают - вопрос к производителю АЦП.
2.Иногда понизить ЧД никак нельзя.
3.Замена АЦП тоже может быть проблемой, да и зачем, если как оказалось можно не менять.
4. Приложение не радиолокационное, просто алгоритм CFAR из радиолокации.
5. АЦП стоит в тракте ПЧ и с него получаем квадратурные составляющие.
Ну и как заметил автор выше, подобные методы применяются и в других сферах.
nv13
21.08.2024 17:29+1Могу лишь сказать, что эээ... около 15 лет работал в гидро и радиолокации, в том числе с советскими и импортными АЦП и никогда такого не видел. Не подскажете, что за АЦП, чтобы не применять?)
Aelentux Автор
21.08.2024 17:29К сожалению не могу вам подсказать, поскольку это комерческая тайна. Справедливости ради, хочу заметить, что на относительно низких частотах тактирования таких проблем на этом АЦП нет.
adeshere
Классическая фильтрация по типу сглаживания: среднее арифметическое, медианный фильтр, бегущее среднее и т.д. может избавить от выбросов, однако придётся пожертвовать частотой дискретизации, чего хотелось бы избежать.
Не понял, как фильтрация может испортить частоту дискретизации? Берем скользящее окно шириной 3-5 точек (для строго единичных выбросов хватит трех, для двойных - пяти и т.д.), включаем в окне детектор выбросов, затем продетектированные выбросы выбраковываем и подставляем туда текущую медиану (ре-оцененную уже после выбраковки выброса) или что-то подобное. Частота не меняется. Все значения, кроме выбросов, не меняются. В чем проблема-то?
Если нас не пугает небольшое запаздывание, то окно можно взять симметричное (т.е. на каждом шаге работаем с центральной точкой окна). Ели запаздывание недопустимо - то берем причинное (это немного ухудшит качество фильтра, плюс придется подкрутить алгоритм для обработки резких вступлений, когда уровень полезного сигнала изменяется скачком).
Пример того, как это работает с реальными данными, можно найти вот в этой статье (полный текст лежит вот здесь и на RG). Например,
на рисунке 3 из этой статьи
показан исходный сигнал, зашумленный многомасштабными выбросами. Если просто сгладить его медианой, то получится ряд номер 2 - действительно с потерей ВЧ-информации. Но это же не итог фильтрации, а лишь промежуточный шаг. Дальше мы берем отклонения от текущей медианы (ряд N3), ищем и выбраковываем там выбросы, после чего получается
сигнал без выбросов
В процитированной статье использован многопроходный алгоритм, как более гибкий (на каждом шаге можно подкручивать немеряную кучу настроек - например, менять ширину окна, брать текущую дисперсию для повышения адаптивности или глобальную, и т.д, и т.п.). Но в тривиальных случаях наподобие вашего все делается за один проход без проблем
В этом сигнале вместо выбросов - Nan-ы. Далее их надо заполнить, для чего есть
тьма методов
Мы обычно заполняем пропуски в скользящем окне (полный текст этой статьи можно взять тут или на RG) либо с помощью т.н. рядов-заполнителей (подробнее см. в справке к программе ABD), но количество вариантов тут даже больше, чем при обнаружении выбросов
В общем, статья полезная... но вот не надо писать, что стандартные методы скользящего окна чем-то хуже. Не хуже. Они могут сделать все то же самое и даже гораздо больше просто в силу
своего обилия и разнообразия
Для примера, вот в этом chm-файле (это справка к одной программе) можно посмотреть описание метода 3.4.1... Не потому, что он чем-то особенно хорош, а просто чтобы оценить буйство способов детектирования и коррекции выбросов, основанных только на одном критерии стандартного отклонения (см. подраздел 3.4.1.1). А еще можно опираться не на дисперсию, а на медиану, и т.д. и т.п.
Фактически CFAR детектор можно рассматривать как один из специализированных методов скользящего окна. Если он хорош для ваших задач - прекрасно, но зачем же другие аналогичные методы обижать?
--------
UPD. Что-то у меня редактор Хабра глючит: названия всех спойлеров при сохранении отредактированного сообщения пропадают (заменяются на "Скрытый текст"). Если я не смогу с этим справиться за отведенные полчаса, продублирую тут на всякий случай названия спойлеров 1-4 (вдруг кто-то заинтересуется узнать, что там было ;-):
на рисунке 3 из этой статьи
сигнал без выбросов
тьма методов
своего обилия и разнообразия
Aelentux Автор
Спасибо за подробный комментарий. Действительно, полезная информация и полезные ссылки. Возможно я немного неверно выразился. Словом "классическая" хотелось подчеркнуть использование фильтров в их изначальном представлении, не как средство детекции с последующей заменой, а именно как фильтр который вырезает "ненужные" частоты. Так же хотелось обратить внимание, что CFAR детектор можно использовать не только как детектор, но и как фильтр.
Не понял, как фильтрация может испортить частоту дискретизации? Берем скользящее окно шириной 3-5 точек (для строго единичных выбросов хватит трех, для двойных - пяти и т.д.), включаем в окне детектор выбросов, затем продетектированные выбросы выбраковываем и подставляем туда текущую медиану (ре-оцененную уже после выбраковки выброса) или что-то подобное. Частота не меняется. Все значения, кроме выбросов, не меняются. В чем проблема-то?
По сути то что вы описали выше и есть CFAR детектор и, как вы верно заметили:
Фактически CFAR детектор можно рассматривать как один из специализированных методов скользящего окна.
В нашем конкретном случае такой метод позволил в режиме реального времени (конечно внося небольшую задержку) обеспечить фильтрацию выбросов и получить чистый спектр без скачков шумовой полки.