Нравится? Делимся информацией!

пятница, 12 октября 2012 г.

Concatenating (transforming) 1-D vector to a Cell Array in MatLAB / Преобразование 1-D массива в 2-D mxn матрицу в Матлаб

      Изучая Компьютерное Зрение, помимо саморазвития я убиваю еще одного зайца: по работе я связан с радиоприемниками (как в железе, так и в цифровой части), т.е. в наличии у меня хоть отбавляй 1-D-информации (сэмплов с АЦП оцифрованного радиосигнала).   За просмотром видеолекций ГрафиКона возникла идея, а что если мне скомпоновать 1-D информацию в 2-D-структуру и попробовать что-нибудь вкусненькое из Image Signal Processing? А конечную цель понимаю мутно, поэтому, ведомый интуицией, полез в Матлаб, чтобы в короткий срок опробовать идею: если да - то круто, +1 в карму; если нет - забыть и спать спокойно.
     В объяснении сути поможет рисунок в начале статьи.
     Итак, есть у нас сигнал с АЦП, мы его пофильтровали, понизили частоту дискретизации при помощи децимации, и вот мы находимся на одной из ступени децимации, т.е на пониженной частоте следования выборок. Идут сэмплы друг за другом с интервалом времени t1 (период дискретизации). Мы же хотим нарезать этот 1-D сигнал колбаской, но не тонкими "колечками" (самое тонкое "колечко" = одному сэмплу), а толстыми кусками колбасы, т.е. с формировать какое-то количество фреймов/кадров (пусть m), каждый из которых содержит по n сэмплов. Расположив фреймы друг под другом мы получам двумерный массив mxn, который интерпретируем, как картинку.
     Как выбрать фрейм (на картинке это время t2, синяя стрелка)?? Как душа пожелает, если нет строгого ТЗ. Я взял величину порядка нескольких десятков Герц.
    Естественно, что всю эту большую задачу разбиваю на подзадачи. Генерация нужного мне сигнала уже реализована в МатЛабе. Осталось реализовать способ преобразования 1-D вектора в 2-D массив. Пришлось попыхтеть. Но в итоге справился.
   Для чего вообще это делается? В моем приборчике необходимо выделить гармоники из модулирующего колебания и замерить амплитуду. Поэтому необходима будет некая статистическая обработка – усреднение.

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

  Реализация будет в виде видео отчета и сопутствующих материалов чуть позже.
  Все подготовил. Даю ссылки.
Ссылка на сопутствующие материалы 1D to 2D MatLAB files

Комментариев нет:

Отправить комментарий