[an error occurred while processing this directive]
Ответ:
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)
миниатюрный аудио-видеорекордер mAVR

Отправлено ВН 27 июня 2002 г. 14:34
В ответ на: Помогите решить задачку по эффектному приёму заранее известной последовательности с помощью АЦП в условиях сильного шума. отправлено Sergey Smirnow 27 июня 2002 г. 10:08

Если сигнал-шум ы Вас плохой, то самым правильным решением будет все-таки вычисление взаимной корреляции между принимаемым сигналом и опорой. Либо в лоб, либо через Фурье. Один из Фурье способов.
1. Организуете циклический буфер, размером L=k*N+M-1.
M - длина опоры, N - желаемое число точек КФ, получаемое за один цикл вычислений, минимум 1, коэффициент k зависит от возможностей процессора, минимум 1. Вообще говоря k не обязательно целое, тоже процессором определяется.
2. Дополняете опору 0 до длины N+M-1. Берете Фурье. Если опора действительная - обнуляете частоты выше ((N+M-1)/2)-1. Если опора комплексная - обнуление не нужно.
3. Ждете, когда буфер заполнится первыми N+M-1 отсчетами. Переписываете их в некий рабочий буфер. Циклический буфер продолжает заполняться.
4. Над данными в рабочем буфере берете Фурье длиной N+M-1.
Полученный спектр сигнала умножаете на комплексно-сопряженный спектр опоры.
5. Над результатом обратное Фурье. Получаете N+M-1 точек КФ. Полученная корреляция - циклическая. Истинны в ней только первые N точек. Их и анализируете на предмет превышения порога. Порог превышен - нашли последовательность. Не превышен - к пункту 3. Но из циклического буфера берете N+M-1 точек, начиная с N. После п.5 получаете следующие N точек КФ. И т.д. На каждом новом цикле из цикл. буфера берется кусок данных длиной N+M-1 с адреса i*N по модулю L.
i - номер цикла. После обратного Фурье корреляция комлексная, соответственно нужен квадрат модуля.
Теперь по затратам. Из Ваших цифр - длина искомой последовательности порядка миллисекунд 50, а то и больше. Взяв частоту дискретизации кГц 10, получим длину опоры 500 точек. "Округлим" до 512. Возьмем N=513. Т.о. длина Фурье =1024 точкам. Основные временные затраты на Фурье.
И за ~50 мс их нужно вычислить 2 - прямое и обратное. Для более-менее современных DSP весьма слабые требования. Для лобового вычисления КФ потребуется 512*2 умножений-накоплений за ~100 mks. Или ~0.1 mks на одно умножение-накопление. Тоже не бог весть что.
Можно попробовать вычислять битовую корреляцию, но она, во-первых,
проигрывает обычной, а во-вторых- подсчитывать биты довольно утомительно. Можно релейную корреляцию - опора битовая, сигнал обычный, т.е. с АЦП, умножений нет. Но тоже проигрывает обычной КФ.
Поэтому совет - возьмите практически любой DSP, ничего в них особенного нет, и задача будет решена. А м.б. и не DSP, а какой-нибудь 16 битник с аппаратным умножителем и МГц на 20-30. Требования ведь не ахти.
По аналоговому фильтру на входе - он нужен, хотя бы ФНЧ, обрезающий частоты выше 1.8 с чем-нибудь килогерца. Кстати, при наличии хорошего вычислителя требования к фильтру м.б. ослаблены, можно просто поднять частоту дискретизации.


Составить ответ  |||  Конференция  |||  Архив

Ответы



Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru