Categories

A sample text widget

Etiam pulvinar consectetur dolor sed malesuada. Ut convallis euismod dolor nec pretium. Nunc ut tristique massa.

Nam sodales mi vitae dolor ullamcorper et vulputate enim accumsan. Morbi orci magna, tincidunt vitae molestie nec, molestie at mi. Nulla nulla lorem, suscipit in posuere in, interdum non magna.

FFT-on-Chip: Cross — ambiguity function в реальном времени на GPU

В статье про кросс-компиляцию я рассказал о том, как подготовить удобный инструментарий для работы с Raspberry Pi. Напомню, что статья началась с новости о том, что Broadcom открыл спецификации своего чипа GPU, который используется в RPi, что открыло возможности по быстродействующим вычислениям преобразования Фурье: БПФ/FFT на этом чипе.

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

Три источника и три составные части FFT-on-Chip

Первое приложение — питоновская программа для формирования входной I/Q выборки. Для того чтобы обеспечить последующую визуализацию результатов работы, данные формируются блоками по принципу один блок — одна картинка. В результате все записывается в бинарный файл, который отдается приложению на RPi.

Для какого сигнала будем определять кросс — функцию неопределенности? Вначале я планировал сделать выборку близкой к реальному речевому/музыкальному сигналу, который транслируется ФМ станциями, что и нужно пассивному радару. Однако я обнаружил что закапываюсь в звуковых и ALSA модулях Питона и трачу много времени на то, чтобы распатронить mp3 запись с песней Тото Кутуньо в PCM формат, который уже можно преобразовать в I/Q последовательность. Поэтому я поступил просто: чтобы визуализация/анимация была наглядной, выбрал в качестве входного сигнала выборку М-последовательности, которые славятся хорошими автокорреляционными свойствами.

Алгоритм формирования этих последовательностей нетривиален. В старых добрых потрепаных книжках даются рекурсивные алгоритмы, реализуемые на сдвиговых регистрах с обратной связью. В одной радиолокационной конторе искали такие последовательности самостоятельно, чтобы получить большую длину и соответственно одновременно хорошее разрешение по скорости и дальности.

Мы пойдем простым путем. Помните, что каждый раз когда надо сделать просто, на помощь приходит Питон? Одна строчка и последовательность у нас в кармане, то есть в переменной m_seq:

Девятка — это длина последовательности как степень двойки. Дальше, самое время вспомнить что мы собираемся генерировать «кросс» функцию неопределенности, поэтому полученную выборку будем интерпретировать как опорную для пассивного радиолокатора, то есть полученную с базовой ФМ станции. Сам сигнал, отраженный от цели, должен получить доплеровский сдвиг по частоте (движение цели) и сдвиг по времени (задержка при отражении от цели). Опять таки, для наглядности будущей анимации сделаем эти параметры линейно меняющимися во времени. Сигнал и опору записываем в файл, и на этом генерация данных завершена.

Второе приложение на RPi: программа обработки данных и нахождения кросс — функции неопределенности. Здесь мы вовсю используем наработанный инструментарий. Приложение работает на ARM процессоре RPi и для вычисления FFT использует GPU модуль. Вне зависимости от того, какой из методов нахождения кросс — функции неопределенности мы используем, для входной выборки нужно выполнить серию FFT преобразований. И было бы обидно, если быстродействующую функцию БПФ нужно было вызывать каждый раз, теряя драгоценное время на вызов.

К счастью, разработчики спецификаций и библиотек дали возможность отправлять на разработку целый пакет выборок, возвращая пакет спектров БПФ. Пакетную обработку выполняет функция API gpu_fft_execute(fft). В результате, пакет комплексных переменных записывается в файл уже для последующей анимации.

С третьим приложением все просто. Питоновская программа получает файл с 2D блоками кросс — функций неопределенности и прокручивает его на экране. Поскольку в качестве входной выборки я задавал М — последовательности, хорошо видно пик диаграммы.

Естественно, пик перемещается, потому как мы задавали изменение доплеровской скорости и задержки во входных данных. Для наглядности я крутил функцию неопределенности в разные стороны, чтобы были видны ее сечения как по времени, так и по частоте.

Coming Soon

В основном приложении я не упомянул про важный модуль, который обеспечивает подавление опорного сигнала во входных данных. Этот метод основан на сложной математической процедуре и реализован адаптивным способом. Об этом я расскажу в другой статье; надеюсь к этому моменту можно будет использовать вместо М — последовательностей аудио — данные.

Приближенность к спектру реального сигнала позволит оценить эффективность подавления. Пока что в своих экспериментах я достигал величины 60 дБ, но нет предела совершенству.

Ответить

Вы можете использовать эти HTML теги

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">