Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Выделение сигнала на фоне помех
Форум разработчиков электроники ELECTRONIX.ru > Цифровая обработка сигналов - ЦОС (DSP) > Алгоритмы ЦОС (DSP)
Страницы: 1, 2
Марк_Я
Господа! Рискну сформулировать вопрос в основной теме, поскольку начинающие могут его проигнорировать..
Имеем периодический импульсный сигнал. Медленно меняющий форму и расположение самого импульса в периоде, но с очень стабильным периодом. Назовем семплом оцифрованный один период. Всего семплов анализируем восемь штук. Помеха выглядит как хаотично появляющийся в любом месте периода импульс с формой подобной сигналу.
Анализ провожу, дифференцируя семпл на отсчеты АЦП, и рассматривая одноименные отсчеты АЦП всех 8 семплов сигнала.
Далее строю гистограмму по каждой точке внутри семпла и нахожу весовой центр распределения этой гистограммы.
Извините за вольную терминологию...
Вопрос в следующем.
Я никак не могу найти или придумать компактный алгоритм нахождения этого весового центра.
То, что в лоб имеет следующий алгоритм:
Берем нулевой массив из 256 ячеек для 8-разрядного преобразования АЦП (у меня такое). Инкрементируем элемент массива с адресом равным отсчету АЦП. Получаем гистограмму этих 8 одноименных (в периоде) отсчетов.
Затем двигаемся воротами анализа от 0 до 255 и, как только в воротах анализа окажется не менее, скажем 5 единиц (сумма значений элементов массива в воротах анализа), так центр ворот и будет весовым центром гистограммы. Если нигде не будет обнаружено пика, значит помеха слишком велика и детектирования сигнала не произойдет.
Поругайте мой "деревянный велосипед с квадратными колесами"и направьте на путь истинный... smile.gif
Спасибо.
SFx
сам я тоже особо не в теме, но в теории вроде для определения начала этих восьми семплов нужно заиметь фапч и некоторую схему подстройки го. как только находите начало и конец символа - можно его и усреднять, и детектировать. кроме того можно пропустить через FIR, если вам известна ачх помехи. пусть старшие по этой теме поправят. rolleyes.gif
Марк_Я
Это не символы. Определять начало не требуется, поскольку оно инициируется аппаратурой. Сам сигнал есть отклик на индуктивное возбуждение.
alexkok
Цитата(Марк_Я @ Oct 28 2009, 17:27) *
Берем нулевой массив из 256 ячеек для 8-разрядного преобразования АЦП (у меня такое). Инкрементируем элемент массива с адресом равным отсчету АЦП.

Здесь ошибка.
Реально такой алгоритм означает что Вы селектируете по равной амплитуде, а не по времени.
Лучше попробуйте перемножать отсчёты с одинаковыми индексами в разных "сэмплах".
А если сигнал короткий, то перемножать среднее значение двух-трех соседних отсчетов в разных "сэмплах".
Марк_Я
Не понял. Я ничего не селектирую. Я пытаюсь найти наиболее вероятное значение сигнала в выбранном сечении. Т.е. имеем при заполнении массива фактически график плотности вероятности текущего сечения сигнала.
А что даст произведение? Мне нужно получить мгновенное значение напряжения, которое потом будет использовано при расчете амплитуды (квадратурным методом). На самом деле анализ проводится дважды (для 0 град и 90 град семплов).
rezident
Раз период стабильный и фаза импульса медленно изменяется, то может корреляционный фильтр применить ?
Марк_Я
Я специально выделил в названии слово ПОМЕХА. Задача - не допустить в конце концов ложного срабатывания устройства в целом по помехе. Сигнал при этом достаточно сильный и детектировать его в отсутствии помехи вообще элементарно. Так вот засада в том, что помеха имеет практически идентичную форму и отличается лишь некогерентностью с частотой следования семплов, т.е. может возникать внутри отсчета случайным образом.
Корреляционный фильтр не отличит сигнал от помехи, поскольку есть вероятность (и она очень большая), что на этом месте (на месте помехи) может быть и сигнал.
ЗЫ. Уже достаточно давно в этой разработке пытались "привинтить" корреляционный фильтр... без успеха... На фоне шумов - прекрасно, но в существующих помехах (спектры помехи и сигнала полностью пересекаются) он беспомощен полностью. Мало того, еще и страшно медленный... недопустимо медленный даже при реализации на Техасском Пикколо. А приведенная идея прекрасно справляется с задачей, но нужно уместить алгоритм во временную диаграмму скользящего анализа, вот тут и требуется конкретный испрошаемый мною алгоритм.
alexkok
Цитата(Марк_Я @ Oct 28 2009, 23:57) *
Не понял. Я ничего не селектирую. Я пытаюсь найти наиболее вероятное значение сигнала в выбранном сечении. Т.е. имеем при заполнении массива фактически график плотности вероятности текущего сечения сигнала.
А что даст произведение? Мне нужно получить мгновенное значение напряжения, которое потом будет использовано при расчете амплитуды (квадратурным методом). На самом деле анализ проводится дважды (для 0 град и 90 град семплов).

То что Вы описали - это сортировка (если Вам слово селекция не нравится rolleyes.gif ) по одинаковой амплитуде, а она с наибольшей вероятностью будет у шумов, т. е. в произвольном месте.
После того как Вы определите местоположение сигнала, можно определять амплитуду, но не раньше.
des00
Цитата(Марк_Я @ Oct 28 2009, 22:18) *
Я специально выделил в названии слово ПОМЕХА. Задача - не допустить в конце концов ложного срабатывания устройства в целом по помехе. Сигнал при этом достаточно сильный и детектировать его в отсутствии помехи вообще элементарно. Так вот засада в том, что помеха имеет практически идентичную форму и отличается лишь некогерентностью с частотой следования семплов, т.е. может возникать внутри отсчета случайным образом.


плохо разбираюсь в DSP но что если свернуть ваш сигнал с эталонной последовательностью из 8 ми символов и определить точку начала вашего сигнала. А определив это уже работать с сигналом. Правда для этого придеться сделать бОльший буфер и работать не в реалтайме.
sup-sup
Допустим, отбрасывать по два максимальных и минимальных значения из восьми, а остальные четыре усреднить.
Марк_Я
Ни максимальные ни минимальные значения не являются признаком помехи. Сигнал может находится в любом месте интервала времени и в любом интервале напряжений, поскольку он комплексный (векторный) и обрабатывается по квадратурным составляющим.

Еще раз. Речь идет о статистической обработке семплов ДИФФЕРЕНЦИАЛЬНО по точкам преобразования АЦП. Суперпозиция статобработки точек и даст наиболее вероятный (очищенный от помех) результирующий семпл.

Вопрос выбора метода и не стоит. Метод работает как часы. Вопрос о минимизации алгоритма через аналитическое выражение метода. Аналитическоее выражение и даст оптимальный алгоритм...
анатолий
Это типичная задача когерентного накопления или автокорреляции.
После 8 накоплений сигнал - шум усиливается в sqrt(8) раз.
Можно и статистику - мажоритарно выбирать из 5 или 7 одноименных отсчетов правильный.
Марк_Я
По слогам: ТАМ ШУМА НЕТ... Совсем... Как класса... Боремся с помехой. Помеха и шум совершенно разные вещи. Помеха рождена параллельно работающим ТОЧНО ТАКИМ ЖЕ устройством, но с другим периодом(немного другим). Коррелятор спокойно пропускает помеху, поскольку она тот же сигнал и есть, только не когерентный. Чуть улучшается отношение, но в условии ОТСУТСТВИЯ сигнала(это один из режимов устройства) помеха становится доминирующей и происходят ложные срабатывания...
mdmitry
На основе фазовой автоподстройки: подстраивается под Ваш период (пределы должны быть определены) и далее строб, выделяющий сигнал. Попали при старте на помеху- сдвигаем строб. За разумное время система в синхронизм войдет. Все в цифре можно сделать.
sup-sup
Цитата(Марк_Я @ Oct 29 2009, 12:09) *
Ни максимальные ни минимальные значения не являются признаком помехи. Сигнал может находится в любом месте интервала времени и в любом интервале напряжений, поскольку он комплексный (векторный) и обрабатывается по квадратурным составляющим.

Еще раз. Речь идет о статистической обработке семплов ДИФФЕРЕНЦИАЛЬНО по точкам преобразования АЦП. Суперпозиция статобработки точек и даст наиболее вероятный (очищенный от помех) результирующий семпл.

Вопрос выбора метода и не стоит. Метод работает как часы. Вопрос о минимизации алгоритма через аналитическое выражение метода. Аналитическоее выражение и даст оптимальный алгоритм...

Возможно, Вы не поняли предложения.
Предлагается отбрасывать по два минимальных и по два максимальных значения, остальные усреднять. Это делать для каждой точки (то есть, для восьми одноименных точек из восьми выборок). Так как сигнал повторяющийся, а помеха разовая, то помеха с очень большой вероятностью выпадет. Можно и по три точки отбрасывать. В результате Вы получаете одну очищенную выборку и спокойно отлавливаете свой сигнал, расположенный в произвольном, но повторяющемся от выборки к выборке месте.
SFx
почитал топик, может вам нейронную сеть обучить?
rezident
Что-то я не понял, почему корреляционный способ не поможет? Достаточно посчитать свертку с предыдущей последовательностью выборок для одного периода, чтобы найти, где ложный сигнал (импульс помехи).
AndeyP
Цитата(Марк_Я @ Oct 28 2009, 17:27) *
Берем нулевой массив из 256 ячеек для 8-разрядного преобразования АЦП (у меня такое). Инкрементируем элемент массива с адресом равным отсчету АЦП. Получаем гистограмму этих 8 одноименных (в периоде) отсчетов.
Затем двигаемся воротами анализа от 0 до 255 и, как только в воротах анализа окажется не менее, скажем 5 единиц (сумма значений элементов массива в воротах анализа), так центр ворот и будет весовым центром гистограммы. Если нигде не будет обнаружено пика, значит помеха слишком велика и детектирования сигнала не произойдет.


Это можно упростить примерно так

// сортируем 8 отсчетов a[8] по возрастанию
sort(a);

// ищем группу из 5 отсчетов с близкими значениями
for (i = 0; i < 8-4; i++)
{
if (a[i+4] - a[i] <= GATE_WIDTH)
{
return a[i] + GATE_WIDTH/2; // нашли группу, возвращаем центр окна
// или
return a[i+2]; // нашли группу, возвращаем медиану
}
}
return error; // не нашли группу => сигнал испорчен помехой


Только в этом коде "центр окна" может оказаться больше 255, поэтому лучше использовать медиану. К тому же использование "центра окна" вносит систематическую погрешность, если все отсчеты одинаковые.
DRUID3
Цитата(Марк_Я @ Oct 29 2009, 06:18) *
Я специально выделил в названии слово ПОМЕХА. Задача - не допустить в конце концов ложного срабатывания устройства в целом по помехе. Сигнал при этом достаточно сильный и детектировать его в отсутствии помехи вообще элементарно. Так вот засада в том, что помеха имеет практически идентичную форму и отличается лишь некогерентностью с частотой следования семплов, т.е. может возникать внутри отсчета случайным образом.
Корреляционный фильтр не отличит сигнал от помехи, поскольку есть вероятность (и она очень большая), что на этом месте (на месте помехи) может быть и сигнал.
ЗЫ. Уже достаточно давно в этой разработке пытались "привинтить" корреляционный фильтр... без успеха... На фоне шумов - прекрасно, но в существующих помехах (спектры помехи и сигнала полностью пересекаются) он беспомощен полностью. Мало того, еще и страшно медленный... недопустимо медленный даже при реализации на Техасском Пикколо. А приведенная идея прекрасно справляется с задачей, но нужно уместить алгоритм во временную диаграмму скользящего анализа, вот тут и требуется конкретный испрошаемый мною алгоритм.

Есть предположение, что Вы не совсем понимаете, что есть корреляция (вообще-то это селекция по форме сигнала, если так можно сказать). Помеха на то и помеха, что "в каком-то месте" она не сигнал - другая амплитуда, фаза и т.д. . Вот и делаете на своем пиккало какую-то ерунду. Ану ка выкладки в студию...

Цитата(SFx @ Oct 29 2009, 21:32) *
почитал топик, может вам нейронную сеть обучить?

biggrin.gif Т.е. внутри нейронных сетей таится неведомая Вам и нам математика которую, этим самым обучением, можно задействовать, так?
bahurin
Цитата(DRUID3 @ Oct 30 2009, 06:33) *
Т.е. внутри нейронных сетей таится неведомая Вам и нам математика которую, этим самым обучением, можно задействовать, так?

Ну что-то в этом роде. Вы задает стурктуру устройства со многими связями прямыми и обратными, причем не можете существующим аппаратом проанализировать характеристики этой структуры. Это можно охрактеризовать как несколько фильтров высокого порядка с прямой и обратной связью. В эту структуру дополнительно вводят нелинейности для взрыва мозга. Потом просто начинают обучать подавая на вход известные данные и добиваясь на выходе того что надо путем подстройки коэффициентов. Потом подают на вход боевые данные и сеть их обрабатывает. Что творится внутри никто не знает (это главный недостаток). Поскольку внутри сети может творится четр знает что, то это может привести к большым проблемам (я их из-за этого не люблю). Но несолько раз доводилось наблюдать как сети распознают образы куда лучше любой математики. Если правильно обучить, то можно получить практически оптимальный корреляционный приемник.
Марк_Я
Цитата(DRUID3 @ Oct 30 2009, 06:33) *
Есть предположение, что Вы не совсем понимаете, что есть корреляция ....



А у меня есть предположение, что Вы не прочли внимательно мои спичи в теме...
Про Ваше предположение спешу разочаровать... (на ушко, лично Вам..., как радиоинженер радиоинженеру). Что есть корреляция мне ведомо уже лет так 30...
Я уже устал повторять. Помеха есть точно такой же сигнал, только ЧУЖОЙ. Если своего сигнала нет, то коррелятор (автокоррелятор) тупо принимает помеху за сигнал, пусть и ослабленный.
Собственно вся моя нынешняя работа - это есть ОТКАЗ от корреляционной обработки, поскольку она никак не работает в условиях применения прибора. Что касается "в студию", не порадую Вас, брать чужую работу и публиковать не имею ни прав ни желания. Одно могу сказать. Алгоритм писал человек, который почти 40 лет пишет подобные вещи для бортовых РЛС...
анатолий
Не надо нервничать. Товарищ предлагает делать корреляцию не как согласованный с сигналом фильтр,
а как корреляцию с задержкой, равной периоду сигнала.
Известно, что корреляция чудно усиливает периодические сигналы и подавляет случайные.
fontp
Цитата(анатолий @ Oct 30 2009, 12:23) *
Не надо нервничать. Товарищ предлагает делать корреляцию не как согласованный с сигналом фильтр,
а как корреляцию с задержкой, равной периоду сигнала.
Известно, что корреляция чудно усиливает периодические сигналы и подавляет случайные.


Да-да-да. Можно даже создать эталонный сигнал накоплением "правильно обнаруженых" "фреймов".
А неправильно расположеный во времени "фрейм" (сэмпл по местной терминологии, но это уже ни в какие ворота, язык не поворачивается назвать цуг сигнала - сэмплом) даст корреляционный максимум в "неправильном месте", со смещением.
Что-то такое проделывают при изучении "вызваных потенциалов" на энцефалограммах/кардиограммах. Хотя изменчивость эталона может всё убить.

Если же самое стабильное, что есть - это не форма сигнала, а период, можно попробовать строить линейный предсказатель со сдвигом на известный период. По результату предсказания следующего периода по предыдущему делать вывод о том сигнал это или помеха
Марк_Я
Цитата(анатолий @ Oct 30 2009, 12:23) *
Не надо нервничать. Товарищ предлагает делать корреляцию не как согласованный с сигналом фильтр,
а как корреляцию с задержкой, равной периоду сигнала.
Известно, что корреляция чудно усиливает периодические сигналы и подавляет случайные.


Нее, я не нервничаю... smile.gif
Предложенное и использовалось. Только при слабом (регулярном, своем) сигнале и при импульсной, но сильной помехе на выходе такого анализатора имеем практически идентичные сигналы. А при отсутствии своего, помеха подавляется, но остается очень высокая вероятность ложных срабатываний (что и наблюдается в периодическом, правда не частом, "попискивании" аларма изделия в присутствии помехи)...

Господа. Статистический дифференциальный анализ в данном приложении решил проблему ложных срабатываний радикально. Единственная проблема, относительно большое (хотя и допустимое) время реакции системы. Хотелось поменьше. Дискретизация по периоду анализа - 64 точки. Потому все расчеты будут повторятся 128 раз (квадратурные сигналы). Вот отсюда и вопрос. Сейчас сделано раздельно - копим 2х8 семплов, затем обрабатываем и принимаем решение. А хочется после приема каждого семпла пересчитывать 8 последних (скользящее окно).
fontp
Цитата(Марк_Я @ Oct 30 2009, 13:26) *
Господа. Статистический дифференциальный анализ в данном приложении решил проблему ложных срабатываний радикально. Единственная проблема, относительно большое (хотя и допустимое) время реакции системы. Хотелось поменьше. Дискретизация по периоду анализа - 64 точки. Потому все расчеты будут повторятся 128 раз (квадратурные сигналы). Вот отсюда и вопрос. Сейчас сделано раздельно - копим 2х8 семплов, затем обрабатываем и принимаем решение. А хочется после приема каждого семпла пересчитывать 8 последних (скользящее окно).


Хорошо. Не понятно, но алгоритм у Вас уже есть.

А что Вы называете гистограммой? Если сэмпл - это отрезок сигнала biggrin.gif

Если то же что все (число отсчетов с данной интенсивностью), то гистограмму пересчитывать скользящим окном не получится. Гистограмма вещь примитивная p(S) = p(S) + 1
Тем более дифференциальная.
))
Марк_Я
Цитата(fontp @ Oct 30 2009, 12:42) *
Да-да-да. Можно даже создать эталонный сигнал накоплением "правильно обнаруженых" "фреймов".
А неправильно расположеный во времени "фрейм" (сэмпл по местной терминологии, но это уже ни в какие ворота, язык не поворачивается назвать цуг сигнала - сэмплом) даст корреляционный максимум в "неправильном месте", со смещением.


Нет там "неправильного места". Все правильные. Только помеха вылезает как сигнал в любом месте случайно (точнее в виде стробоскопических биений), а сигнал все 8 периодов стоит на одном месте в периоде. Но это место ЛЮБОЕ. Они вообще могут оказаться в одной точке (сигнал и помеха)...
fontp
Цитата(Марк_Я @ Oct 30 2009, 13:34) *
Они вообще могут оказаться в одной точке (сигнал и помеха)...


И как Вы их отличаете? Если они одинаковы по форме и позиционированы в одном месте в периоде ))

Цитата(Марк_Я @ Oct 30 2009, 13:34) *
Нет там "неправильного места". Все правильные. Только помеха вылезает как сигнал в любом месте случайно (точнее в виде стробоскопических биений), а сигнал все 8 периодов стоит на одном месте в периоде. Но это место ЛЮБОЕ. Они вообще могут оказаться в одной точке (сигнал и помеха)...


Вас трудно понять. Мы все и говорим, что для сигнала это место ЛЮБОЕ, но расстояние между этими импульсами одинаковые равные периоду. А для помехи это не так. Поэтому, мы все говорим, дескать в функции корреляции на периоде Ф(Т) будет пик для сигнала, а для помехи будет в другом месте, а на периоде Ф(Т) = 0.
Ладно, забудьте, алгоритм у Вас уже есть
Марк_Я
Цитата(fontp @ Oct 30 2009, 13:32) *
Хорошо. Не понятно, но алгоритм у Вас уже есть.

А что Вы называете гистограммой? Если сэмпл - это отрезок сигнала biggrin.gif

Если то же что все (число отсчетов с данной интенсивностью), то гистограмму пересчитывать скользящим окном не получится. Гистограмма вещь примитивная p(S) = p(S) + 1
Тем более дифференциальная.
))


Гистограмма в данном случае - это распределение одноименного в периоде отсчета АЦП по шкале АЦП.
Т.е. скажем на 25-ый отсчет АЦП в разных фреймах (семплах, как угодно обзови...) было 8 разных значений: A3, A2, A0, A0, A1, A0, 1F, 9F.
Таким образом гистограмма будет иметь 6 столбиков: А0 - высотой в 3 единицы, остальные по 1. Ежу понятно, что сигнал равен А0 (точнее наиболее вероятен!)...

Цитата(fontp @ Oct 30 2009, 13:36) *
И как Вы их отличаете? Если они одинаковы по форме и позиционированы в одном месте в периоде ))



Вас трудно понять. Мы все и говорим, что для сигнала это место ЛЮБОЕ, но расстояние между этими импульсами одинаковые равные периоду. А для помехи это не так. Поэтому, мы все говорим, дескать в функции корреляции на периоде Ф(Т) будет пик для сигнала, а для помехи будет в другом месте, а на периоде Ф(Т) = 0.
Ладно, забудьте, алгоритм у Вас уже есть


Если представить весь фрейм как суперпозицию отдельных независимых отсчетов АЦП, то статистический анализ каждого линейного массива отдноименных в периоде отсчетов и даст наиболее вероятный суммарный сигнал. Я уже это объяснял...
ЗЫ. By the way, форма сигнала и помехи достаточно неопределенна - это могут быть импульсы разной формы, экспоненциально падающий синус и т.п....
fontp
Цитата(Марк_Я @ Oct 30 2009, 13:46) *
Гистограмма в данном случае - это распределение одноименного в периоде отсчета АЦП по шкале АЦП.
Т.е. скажем на 25-ый отсчет АЦП в разных фреймах (семплах, как угодно обзови...) было 8 разных значений: A3, A2, A0, A0, A1, A0, 1F, 9F.
Таким образом гистограмма будет иметь 6 столбиков: А0 - высотой в 3 единицы, остальные по 1. Ежу понятно, что сигнал равен А0 (точнее наиболее вероятен!)...
Если представить весь фрейм как суперпозицию отдельных независимых отсчетов АЦП, то статистический анализ каждого линейного массива отдноименных в периоде отсчетов и даст наиболее вероятный суммарный сигнал. Я уже это объяснял...


Понятно, Вы как бы секёте сечением. Наверное, у Вас очень малоразрядный АЦП.
Иначе шум сделает так, что все восемь значений будут различны и в гистограмме будут только единицы и нули.
Цитата(Марк_Я @ Oct 28 2009, 16:27) *
Поругайте мой "деревянный велосипед с квадратными колесами"и направьте на путь истинный... smile.gif
Спасибо.

Впрочем, 8-разрядный.
Наверное, у Вас нет шума ))
Можно загрубить, конечно

Кажется единственное, что можно хорошего сразу сделать с гистограммой - это не хранить её в виде массива S[n], n=0, 255 а сделать её типа списка пар (n, count) и наращивать count при совпадении n при проходе по списку. Иначе можно замучиться с инициализацией S[n]=0, n=0, 255
А этих элементов максимум 8
Марк_Я
Вооо! Это уже по теме... Смысл моего вопроса в том, какие аналитические (а не табличные) соотношения позволят достаточно быстро обработать такие массивы по 8 элементов.
АЦП действительно 8 разрядный. Шума действительно практически нет, он лежит ниже дискрета преобразования по амплитуде. Шум квантования не мешает...
В гистограмме могут быть и одни единицы и нули, но если все 8 единиц подряд, то серединка и есть сигнал...

Цитирование меня про дер.велосипед оценил... smile.gif , это я так скромничаю... smile.gif вдруг какую нибудь хню ляпну, а так народ снисхождение какое никакое проявит... smile.gif
fontp
Если это всё скользит во времени, скользящее окно Вы сделать, конечно, можете.
Нужно завести только линии задержки для всех 64 отсчетов х 8 задержек и наладить учёт, тех точек что уходят из окна анализа. Тогда лучше гистограмму хранить всё-таки массивом S[n] и делать для входящих S[n]+=1, а для уходящих S[k]-=1; n входящее в окно значение АЦП, к - задержанное на 8 значение, соответствующего отсчета; никакая инициализация в риал-тайме тогда не нужна.

Что касается анализа гарантированого статистического определения "центра" по 8 реализациям, то это мне кажется примерно относится к "Статистической теории одноразовых событий" ))

ЗЫ. Одно время в 90-е была потрясающе модной новая теория дискретизации. Для целых функций (с точностью до константы типа мощности) доказано что сигнал можно не квантовать на дискретной сетке, а достаточно определить моменты его пересечения с 0 и их оцифровать. В том числе для тех самых сигналов с ограниченым спектором, для которых Котельников. Такой "перпендикулярной" теории дискретизации было посвящено в своё время огромное количество научных статей в IEEE и даже спецвыпуск. Однако практического применения теория, кажется, совсем не нашла, поскольку всё сгубил шум, пусть даже и бесконечно малый
Марк_Я
Ну скользящее окно на последние 2х8х64 это просто и вообщем уже есть. Просто пишем в буфер такого объема последовательно по кругу и все. Какая разница для такой обработки кто первый, а кто последний... Анализируем сечение. Я бы хотел не прибегать к расписыванию гистограммы как буфера анализа. Я немного осторожно намекну... Решение в районе анализа матожидания с контролем дисперсии, только вот аналитические выражения для такого случая с подводными камнями хотелось бы услышать от спецов...
Помимо всего, есть амбиции реализовать всю задачу на 18-м пике за 70 рублей... Поэтому очень важна лаконичность и адаптивность под RISC изыскиваемого алгоритма (аналитических соотношений).
анатолий
Цитата(Марк_Я @ Oct 30 2009, 14:36) *
Вооо! Это уже по теме... Смысл моего вопроса в том, какие аналитические (а не табличные) соотношения позволят достаточно быстро обработать такие массивы по 8 элементов.

Аналитические отношения - это линейные или гладкие функции. Вы убедились, что линейным способом задача не решается. Нужно очень нелинейное решение. Так как с линейной точки зрения информации не хватает. Это ранговая фильтрация и что-то около, эвристический алгоритм, замешанный на логике.
Например, среди задержанных 8 кадров выбирать мажоритарно достоверные однономерные отсчеты и принимать решение.
fontp
Цитата(Марк_Я @ Oct 30 2009, 15:07) *
Ну скользящее окно на последние 2х8х64 это просто и вообщем уже есть. Просто пишем в буфер такого объема последовательно по кругу и все. Какая разница для такой обработки кто первый, а кто последний... Анализируем сечение.


Ну так Вы делаете это инкрементально или пересчитываете гистограмму по всем 8?
Инкрементально - это значит что новые входят, а последние уходят.
Приходит новое X и имеем линию задержки X[0][], X[1][]..., X[7][]- это самый последний
тогда
S[n]+=1;
S[X[7][]]-=1;

for (i=7; i>0; i--)
X[i][] = X[i-1][];
X[0][] = X

Хрен редьки не слаще и линию задержки выходит, что нужно крутить тоже на 8.
Но если в процессоре есть аппаратная циклическая адресация, то последний цикл исчезает
Это уже 2операции , а не 8

Не-е за 70 рублей так не пойдёт... Забудьте

Цитата(Марк_Я @ Oct 30 2009, 15:07) *
Я немного осторожно намекну... Решение в районе анализа матожидания с контролем дисперсии, только вот аналитические выражения для такого случая с подводными камнями хотелось бы услышать от спецов...


Я и говорю, что для аналитического решения этой задачи нужны спецы по матстатистике гипотез примерно одноразовых событий. Здесь таких наверное нет ))
Марк_Я
"аппаратная циклическая" есть - это называется автоинкрементная. В мнемонике ассемблера 18-х микрочипов это выглядит как виртуальный регистр POSTINC, с указателем FSR. Читаем/пишем по адресу указанному в FSR через окно POSTINC и аппаратно сразу просле операции указатель FSR инкрементируется.
ЗЫ. Пишу на асме... smile.gif Но это к делу отношения не имеет, можно приводить и си-реализации.
fontp
Цитата(Марк_Я @ Oct 30 2009, 15:29) *
"аппаратная циклическая" есть - это называется автоинкрементная. В мнемонике ассемблера 18-х микрочипов это выглядит как виртуальный регистр POSTINC, с указателем FSR. Читаем/пишем по адресу указанному в FSR через окно POSTINC и аппаратно сразу просле операции указатель FSR инкрементируется.


POSTINC мало. Нужно, чтобы ещё указатель сам зацикливался при инкременте - 0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7, 0... Это назвается циклической адрсацией. Вы конечно можете сделать
i+=1
i = (i & 0x7)

но это уже не так эффективно. Но можно. Благодаря тому, что 8=2**3 не 7 и не 9
Марк_Я
Цитата(fontp @ Oct 30 2009, 15:13) *
Не-е за 70 рублей так не пойдёт... Забудьте


Трудно забыть работающую на рабочем столе конструкцию... (только окно не скользящее)... smile.gif

Цитата(fontp @ Oct 30 2009, 15:32) *
POSTINC мало. Нужно, чтобы ещё указатель сам зацикливался при инкременте - 0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7, 0... Это назвается циклической адрсацией. Вы конечно можете сделать
i+=1
i = (i & 0x7)

но это уже не так эффективно. Но можно.


точно! в асме маска накладывается в две строки:

movlw 0x07
andwf FSRx, f

итого 130 наносекунд

smile.gif
fontp
Цитата(Марк_Я @ Oct 30 2009, 15:36) *
Трудно забыть работающую на рабочем столе конструкцию... (только окно не скользящее)... smile.gif

точно! в асме маска накладывается в две строки:

movlw 0x07
andwf FSRx, f

smile.gif


Я не про процессор, а про циклическую адресацию и инкрементальный пересчет гистограммы.
С адресом будет труднее. Ну придумайте сами что-нибудь как адрес выровнять на границу чего то кратного 8 и потом маскировать при инкременте. Обычно всё-таки косвенная адресация с инкрементом эффективней индексной

ЗЫ. Сам алгоритм может быть работоспособен и даже устойчив. Но мне всё же очень не нравится статвывод по 8-и реализациям. Хотя дело Ваше хозяйское, не буду мешать ))
Марк_Я
Так думаю... всю голову уже сломал. Вот сюда обратился, вдруг кто чего предложит супер-пупер быстрое...
pokos
Чото я не пойму метаний. Как уже отметил анатолий, задача существенно нелинейная.
Давайте разделим линейную и нелинейную части.
Что линейное у нас? Только то, что сигнал от помехи можно отличить по периоду повторения, ни по чему больше. Понятно, период с некоторыми отклонениями от среднего. Амплитуду и верхнюю частоту отклонений можно замерить предварительно на натуре или вычислить.
что нелинейное? То, что сигнал может быть с помехой, быть помеха без сигнала и вообще ничего на входе.
Думается, выглядит логично сделать алгоритм тоже нелинейным, а именно, ввести режим поиска своего сигнала. После обнаружения - адаптивное стробирование с ограниченной скоростью изменения сдвига строба по времени.
Потом уже можно и статистику, и всё, что угодно накладывать.
Марк_Я
Специально для отстающих... smile.gif
Сов.секретно.
Есть детектор частотных меток. Несколько детекторов. Рядом. Каждый зондирует отдельно. Метки разные. Их технологически не сделать одинаковыми. Каждая зондирующая посылка и есть фрейм.
Все зонды друг другу мешают и устранить это НЕВОЗМОЖНО в принципе. Потому немного разводят периоды зондирования (частоты повторения). Все.
Во фрейме на осциллографе сплошная каша.
Только свое стоит как влитое на месте (произвольном внутри фрейма). Все.
Накопление, коррелятор только уменьшают помехи но не устраняют их. Кроме того, в случае слишком больших помех нужно блокировать прием (сбрасывать принятые массивы/ игнорировать их и выводить на индикацию эту ситуацию - светодиод поджигать smile.gif )...
sup-sup
Цитата(Марк_Я @ Oct 30 2009, 17:24) *
Специально для отстающих... smile.gif
Сов.секретно.
Есть детектор частотных меток. Несколько детекторов. Рядом. Каждый зондирует отдельно. Метки разные. Их технологически не сделать одинаковыми. Каждая зондирующая посылка и есть фрейм.
Все зонды друг другу мешают и устранить это НЕВОЗМОЖНО в принципе. Потому немного разводят периоды зондирования (частоты повторения). Все.
Во фрейме на осциллографе сплошная каша.
Только свое стоит как влитое на месте (произвольном внутри фрейма). Все.
Накопление, коррелятор только уменьшают помехи но не устраняют их. Кроме того, в случае слишком больших помех нужно блокировать прием (сбрасывать принятые массивы/ игнорировать их и выводить на индикацию эту ситуацию - светодиод поджигать smile.gif )...

Понятно. Коррелятор у Вас не коррелятор, а что-то другое. Коррелятор просто обязан работать и давать максимальный эффект. Нужно его правильно сделать. Подозреваю, что Ваш алгоритм и есть алгоритм коррелятора, но Вы его выражаете в привычных вам терминах. biggrin.gif
Марк_Я
Даже и не знаю что сказать... Если коррелятор можно сделать без единого умножения, то пусть это будет "коррелятор"... Видно слово красивое... понравилось очень.
Если серьезно, то корреляторы работают и дают эффект, когда применяются по назначению. А когда его никаким боком сюда не приткнуть, поскольку нет детерминированной формы сигнала, нет внятного позиционирования сигнала внутри фрейма, наконец когда взаимокорреляционная функция сигнала и помехи практически равна автокорреляционной сигнала, о какой корреляции можно вообще говорить? Чего с чем?
sup-sup
Цитата(Марк_Я @ Oct 30 2009, 22:17) *
Даже и не знаю что сказать... Если коррелятор можно сделать без единого умножения, то пусть это будет "коррелятор"... Видно слово красивое... понравилось очень.
Если серьезно, то корреляторы работают и дают эффект, когда применяются по назначению. А когда его никаким боком сюда не приткнуть, поскольку нет детерминированной формы сигнала, нет внятного позиционирования сигнала внутри фрейма, наконец когда взаимокорреляционная функция сигнала и помехи практически равна автокорреляционной сигнала, о какой корреляции можно вообще говорить? Чего с чем?

Сигнал имеет очень стабильную частоту повторения. Такая же частота должна быть выбрана у сэмплов для приема именно этого сигнала. При поточечном перемножении всех восьми сэмплов между собой только в месте расположения сигнала (в произвольном, но в одном и том же месте для всех восьми сэмплов) будет пик. В остальных местах будут нули, так как случайно расположенные чужие сигналы не совпадут восемь раз подряд из-за отличающейся частоты (тоже, как я понял, стабильной, но другой). Првктически, совпадение должно быть восемь раз подряд. Если хоть в одном случае в сэмпле на этом месте будет "ноль", пик сигнала не выделяется.
Таким образом, в корреляции обязательно участвует период повторения принимаемого сигнала.
alexkok
Цитата(sup-sup @ Oct 31 2009, 02:12) *
Сигнал имеет очень стабильную частоту повторения. Такая же частота должна быть выбрана у сэмплов для приема именно этого сигнала. При поточечном перемножении всех восьми сэмплов между собой только в месте расположения сигнала (в произвольном, но в одном и том же месте для всех восьми сэмплов) будет пик. В остальных местах будут нули, так как случайно расположенные чужие сигналы не совпадут восемь раз подряд из-за отличающейся частоты (тоже, как я понял, стабильной, но другой). Првктически, совпадение должно быть восемь раз подряд. Если хоть в одном случае в сэмпле на этом месте будет "ноль", пик сигнала не выделяется.
Таким образом, в корреляции обязательно участвует период повторения принимаемого сигнала.

Я это же самое предлагал ещё в посте 4, но автор, видимо, 30 лет знает только слово корреляция, но не понимает что оно означает.
sup-sup
Цитата(alexkok @ Oct 31 2009, 01:26) *
Я это же самое предлагал ещё в посте 4, но автор, видимо, 30 лет знает только слово корреляция, но не понимает что оно означает.

Такое бывает. Да, это и было предложено Вами
Раз влез, добавлю, что так как "шума нет", переводим сразу все выборки в цифру и умножение делаем логическое. Хуже не будет, только менее затратно.
Марк_Я
Господа! Я уже практически рассказал больше, чем имел право. Из сказанного очевидно, что весь фрейм чаше всего нуля нет вообще. Нигде. Только есть места, где потенциал болтается как попало, а есть где вокруг конкретного значения. Поточечное перемножение ничего не дает, поскольку интенсивность помех очень значительна и вероятность НЕ НУЛЯ (а даже и всех 8 отсчетов больших чем сигнал, да еще и с разной полярностью) не просто велика, а практически 100%. Только дисперсия у этих точек будет огромна.
В результате перемножения точек на мониторе массива имеем стабильный сигнал и скачущие повсюду пики... Проверено... Уже делали...
Кроме того, необходим не факт наличия сигнала в точке, а его ЗНАЧЕНИЕ. Мне потом амплитуду считать из квадратур, где брать потенциал точки из результата перемножения? Попадание помехи на сигнал изменяет амплитуду самого сигнала, а это никуда не годится, устройство срабатывает раньше времени и исполнительный механизм девайса не попадает в цель...
Я просто в недоумении относительно намеков на мою осведомленность в этом вопросе (мне может диплом и портфолио своих разработок предъявлять?), чушь какая то...

ЗЫ. В догон. Сигнал приходит с индуктора (катушка в свободном эфире). На ней и помехи с соседних таких же зондов и от развертки ближайших мониторов и с ШИМ блоков питания и черт знает с чего еще. Это не шум, поскольку спектр этих помех даже аддитивно не непрерывный и неравномерный, да и в каждом конкретном расположении прибора источники помех могут отличаться. Нивняк по поводу стерильности обстановки на входе АЦП (вот сигнал, а вот помеха) имеет место быть в последних постах уважаемых оппонентов. Сигнал занимает от 20 до 30 процентов фрейма. Сами понимаете, что помехи от соседних зондов перехлестнуты с сигналом и гарантированно заполняют остаток фрейма. Я уже не говорю о наводках от разверток ЭЛТ... те вообще бегущим синусом заполняют весь фрейм...
fontp
Я вот чтот подумал: А зачем Вам гистограмма, Марк?

Считайте сразу медиану. Всё равно ничего умней, что сделать с разрежённой гистограммой не придумаете.
Медиана - это центральное в статистическом смысле значение набора ваших 8 отсчётов. Даже если ничего нельзя статистически оправдать, медианное значение будет то, которое доминирует. Для того, чтобы считать медиану не нужно иметь гистограмму, достаточно проводить сортировку восьми значений интенсивности и брать 4-е по величине (или даже полусумму 4-го и 5-го). Более того для медианы в скользящем окне тоже есть алгоритм обновления. Только он посложнее и на малом числе выборок, может оказаться не очень во много раз выгоден.
Чувак по имени Oldring как-то раз его даже приводил на форуме.

То что Вы говорили Вам надо, в интерпретируемых случаях медиана даст автоматически. А в тех случаях, единиц и нулей, которые Вы даже интерпретировать не сможете, медиана тоже что-то даст не самое плохое.

Цитата(sup-sup @ Oct 31 2009, 01:56) *
Раз влез, добавлю, что так как "шума нет", переводим сразу все выборки в цифру и умножение делаем логическое. Хуже не будет, только менее затратно.


Ну не хочет он корреляции. Что Вы к человеку пристали?
Бывают случаи,можно придумать модель, когда медианная фильтрация даст результат, а линейные методы (в том числе корреляция) не работают.
Из восьми реализаций несколько повторяются детерминировано, а один два кривые.

Шума нет, там сидит какая-то очень хитрая помеха))
alexkok
Цитата(fontp @ Oct 31 2009, 14:40) *
Ну не хочет он корреляции. Что Вы к человеку пристали?

Если человека интересует процесс, а не результат, это его личное дело, пусть себе трахается на здоровье.
Но надо же и окружающих предупредить, что б зря не напрягались. rolleyes.gif
Цитата
Бывают случаи,можно придумать модель, когда медианная фильтрация даст результат, а линейные методы (в том числе корреляция) не работают.

Пример в студию, плз.
Цитата
Из восьми реализаций несколько повторяются детерминировано, а один два кривые.

Чтобы это обойти, достаточно ко всем модулям отсчётов добавить по единичке, чтобы не обнулить произведение восьми отсчетов разных фреймов.
Это если фаза сигналов во фреймах случайна и корреляция вычисляется по модулям.
alexkok
Цитата(Марк_Я @ Oct 31 2009, 12:43) *
Господа! Я уже практически рассказал больше, чем имел право. Из сказанного очевидно, что весь фрейм чаше всего нуля нет вообще. Нигде. Только есть места, где потенциал болтается как попало, а есть где вокруг конкретного значения. Поточечное перемножение ничего не дает, поскольку интенсивность помех очень значительна и вероятность НЕ НУЛЯ (а даже и всех 8 отсчетов больших чем сигнал, да еще и с разной полярностью) не просто велика, а практически 100%. Только дисперсия у этих точек будет огромна.
В результате перемножения точек на мониторе массива имеем стабильный сигнал и скачущие повсюду пики... Проверено... Уже делали...

А Вы бы конкретные "сэмплы" привели, может что-то и прояснилось бы.
Всё равно главную тайну, что у Вас 8-ми битный АЦП, Вы уже разболтали.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.