АЦП+DSP (не могу разобраться с отсчетами)

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Закрыто
Первый раз сказал Мяу!
Сообщения: 31
Зарегистрирован: Чт апр 22, 2010 05:36:56

Сообщение MaLoY22-ne »

вопрос такой: Входной сигнал частотно манипулированный некогерентный (12 и 16 кГц). Сигнал после ацп проходит детектирование:две ветки каждая из которых состоит из полосового фильтра и детоктора огибающей. После сигнал представлен набором отсчетов (частота дискретизации 96 кГц). Как из этих отсчетов детектировать сигнал, определить где единичный бит где нулевой, какой диапозон отсчетов анализировать,и вообще как с ними работать (с отсчетами). подскажите!
Контактная информация:
Реклама
Друг Кота
Аватара пользователя
Сообщения: 3961
Зарегистрирован: Пн июл 13, 2009 14:37:39
Откуда: Московская область, наукоград.....

Сообщение Meteor »

Видится один способ определения. Пусть например частоте 12 кГц будет соответствовать лог 0, а частоте 16 кГц - лог 1. На один период передачи лог 0 приходится 8 отсчетов, а на период передачи лог 1 - 6 отсчетов.
Т.к. передача будет вестись не один период, то рациональнее было бы организовать свертку из 24 отсчетов (если оперировать массивами одинаковой длины) или 8 и 6 отсчетов при "непрерывном" анализе соответственно. Далее оценка модулей, сравнение их между собой и принятие решения по максимальному модулю.
Вот как-то так
PS. Не надо так громко писать, мы не слепые :wink:
Загружая на вход компьютера "мусор", на выходе получим "мусор^32".
PS. Не работаю с: Proteus, Multisim, EWB, Micro-Cap... не спрашивайте даже
Контактная информация:
Реклама
Первый раз сказал Мяу!
Сообщения: 31
Зарегистрирован: Чт апр 22, 2010 05:36:56

Сообщение MaLoY22-ne »

ну вот передача каждого бита манчестера длиться в течении 500 мкс.
тогда если рассматривать отсчеты получиться что 12 кГц будет представлен 6-ю периодами по 8 отсчетов, а 16 кГц 8-ю периодами по 6 отсчетов, так как каждые 12 и 16 передаются по 500 мкс.я так понял анализировать нужно по периодам. получается, что нужно насчитывать количество проанализированных периодов и принять решение соответствует нулю или ед-це, так? и еще вопрос. как определить точку (отсчет). с которой начинается период.
Контактная информация:
Друг Кота
Аватара пользователя
Сообщения: 3961
Зарегистрирован: Пн июл 13, 2009 14:37:39
Откуда: Московская область, наукоград.....

Сообщение Meteor »

Не известно на чем вы обрабатывать будете.
Но лично я бы предпочел вариант в котором после поступления очередного отсчета с АЦП, запускались процессы анализа частот 12 и 16 кГц (8 и 6 отсчетов). Т.о. можно достаточно оперативно выявить границу перехода с частоты 12 на частоту 16 кГц и обратно. Далее реализовывается "триггер" который устанавливается в одно из устойчивых состояний.
Что касается анализа частей сигналов 12 и 16 кГц (например половина отсчетов 12 и половина отсчетов 16 кГц), то тут произойдет размытие спектра и снижение модуля и анализ даст возможность не перебрасывать триггер в новое состояние.
Загружая на вход компьютера "мусор", на выходе получим "мусор^32".
PS. Не работаю с: Proteus, Multisim, EWB, Micro-Cap... не спрашивайте даже
Контактная информация:
Реклама
Эиком - электронные компоненты и радиодетали
Первый раз сказал Мяу!
Сообщения: 31
Зарегистрирован: Чт апр 22, 2010 05:36:56

Сообщение MaLoY22-ne »

Отсчеты после АЦП хранятся в буфере, размер которого 1024 отсчета (в принципе, буфер можно сделать и больше). Процесс их цифровой обработки на DSP вижу следующим образом: две параллельные ветки, каждая состоит из полосового фильтра и детектора огибающей. На данную систему подается весь буфер. Далее каким-либо способом по уровням огибающих нужно определить нули и единицы, и слить две последовательности в одну - отражающую детектированный сигнал. Как оптимальней по огибающей определять наличие высокого уровня и низкого (может быть каждый отсчет сравнивать с некоторым порогом?). Могут ли в данном случае быть "подводные камни" и какие?
Контактная информация:
Реклама
Друг Кота
Аватара пользователя
Сообщения: 3961
Зарегистрирован: Пн июл 13, 2009 14:37:39
Откуда: Московская область, наукоград.....

Сообщение Meteor »

Нельзя сравнивать каждый отсчет.
Делаете свертку - преобразование Фурье для одной частоты, два раза. Первый раз с коэффициентами на ччастоту 12 а второй с коэффициентами на частоту 16 кГц.
Результатом будет два комплексных числа. Модуль каждого из них даст амплитуду. Амплитуды и сравните.
PS. Брать число отсчетов больше 48 - бессмыслица, т.к. при передачи последовательно нулей и единиц получите кашу.
Если брать число отсчетов больше чем укладывается в периоде то придется учитывать "уход" составляющей. Так что оптимум - 6 и 8 отсчетов
Загружая на вход компьютера "мусор", на выходе получим "мусор^32".
PS. Не работаю с: Proteus, Multisim, EWB, Micro-Cap... не спрашивайте даже
Контактная информация:
Реклама
Первый раз сказал Мяу!
Сообщения: 31
Зарегистрирован: Чт апр 22, 2010 05:36:56

Сообщение MaLoY22-ne »

может мы друг друга не допонемаем. Хорошо, вот делаем свертку как вы пишете сначала, 48 отсчетов, а дальше то как? следующие 48? где уверенность что в первых 48 период укладывается именно сначала?
Контактная информация:
Друг Кота
Аватара пользователя
Сообщения: 3961
Зарегистрирован: Пн июл 13, 2009 14:37:39
Откуда: Московская область, наукоград.....

Сообщение Meteor »

Уже писал еще раз напишу.
Допутим получили первые 48 отсчетов и сделали свертки. Ищем решение.
Поступил отсчет №49, делаем свертку из отсчетов с №2 по №49.
Поступил отсчет №50-свертка из отсчетов с №№ 3...50 и т.д.
Т.о. имеем окно фиксированной длины, в какой-то момент времени все 48 отсчетов будут соответствовать только частоте 12 или 16 кГц.
PS. Пока не поздно (нет еще ответов) уберите дубль из темы "Радиотехника...." тут не принято плодить одну и туже тему в разных местах
Загружая на вход компьютера "мусор", на выходе получим "мусор^32".
PS. Не работаю с: Proteus, Multisim, EWB, Micro-Cap... не спрашивайте даже
Контактная информация:
Первый раз сказал Мяу!
Сообщения: 31
Зарегистрирован: Чт апр 22, 2010 05:36:56

Сообщение MaLoY22-ne »

Ну так понятнее, спасибо!!
еще вот такой вопрос : Рассмотрим первую ветку. Вход:48 отсчетов, фильтр через прямое и обратное БПФ на 12 , построение огибающей также через прямое и обратное БПФ, после получили массив действительных составляющих и мнимых составляющих. как определим мгновенную амплитуду и как определить порог сравнения?
Контактная информация:
Друг Кота
Аватара пользователя
Сообщения: 3961
Зарегистрирован: Пн июл 13, 2009 14:37:39
Откуда: Московская область, наукоград.....

Сообщение Meteor »

Не знаю зачем вам в этой реализации обратное преобразование, ну да пес с ним.
О модуле.
В результате ДПФ или БПФ получили массив комплексных чисел.
Для получения модуля необходимо и достаточно домножить на комплексное сопряженное число, надеюсь где посмотреть знаете.
Об анализе.
Положим что анализируемое окно (48 отсчетов) содержит только частоту 12 кГц, тогда модуль сигнала 12 кГц будет отличен от нуля, в то время как модуль 16 кГц близок к нулю или равен ему.
С частотой 16 кГц произойдет то же самое.
Самая распространенная ситуёвина - часть отсчетов соответствует частоте 12 кГц, а другая часть частоте 16 кГц. Тогда модули будут одновременно отличны от нуля, соотношение заранее предсказать трудно ибо зависит от того с каким количеством входят отсчеты 12 и 16 кГц.
Вот эти 3 ситуации вам и надо анализировать с последующим принятием решения.
Загружая на вход компьютера "мусор", на выходе получим "мусор^32".
PS. Не работаю с: Proteus, Multisim, EWB, Micro-Cap... не спрашивайте даже
Контактная информация:
Держит паяльник хвостом
Аватара пользователя
Сообщения: 993
Зарегистрирован: Пн сен 18, 2006 11:16:05
Откуда: Тула

Сообщение Neekeetos »

MaLoY22-ne писал(а):Ну так понятнее, спасибо!!
еще вот такой вопрос : Рассмотрим первую ветку. Вход:48 отсчетов, фильтр через прямое и обратное БПФ на 12 , построение огибающей также через прямое и обратное БПФ, после получили массив действительных
Довольно необычный способ принимать ФМ, с самого начала надо было сделать комплексный ФАПЧ, выход которого и будет твоим демодулированным сигналом. Ессно надо сначала все отчеты отфильтровать так чтобы туда попадали обе несущих плюс полоса сигнала с обоих сторон.

ЗЫ А про огибающие идея конечно хорошая но фильтры несущих могут чисто случайно уничтожить полезные данные и создать ISI ака межсимвольную интерференцию.
Информация по RLC mini находится >тут<
Контактная информация:
Друг Кота
Аватара пользователя
Сообщения: 3961
Зарегистрирован: Пн июл 13, 2009 14:37:39
Откуда: Московская область, наукоград.....

Сообщение Meteor »

Neekeetos писал(а):Довольно необычный способ принимать ФМ...
Это ДЧТ- двойная частотная телеграфия, а не фазовая модуляция.
Загружая на вход компьютера "мусор", на выходе получим "мусор^32".
PS. Не работаю с: Proteus, Multisim, EWB, Micro-Cap... не спрашивайте даже
Контактная информация:
Первый раз сказал Мяу!
Сообщения: 31
Зарегистрирован: Чт апр 22, 2010 05:36:56

Сообщение MaLoY22-ne »

Это не ФМ, а ЧМ. В задании - непосредственно прога для DSP, ФАПЧ использовать нельзя.
Контактная информация:
Держит паяльник хвостом
Аватара пользователя
Сообщения: 993
Зарегистрирован: Пн сен 18, 2006 11:16:05
Откуда: Тула

Сообщение Neekeetos »

Meteor писал(а):
Neekeetos писал(а):Довольно необычный способ принимать ФМ...
Это ДЧТ- двойная частотная телеграфия, а не фазовая модуляция.
Да, имел в виду ЧМ, только русскими буквами FM нарисовал.
Информация по RLC mini находится >тут<
Контактная информация:
Держит паяльник хвостом
Аватара пользователя
Сообщения: 993
Зарегистрирован: Пн сен 18, 2006 11:16:05
Откуда: Тула

Сообщение Neekeetos »

MaLoY22-ne писал(а):Это не ФМ, а ЧМ. В задании - непосредственно прога для DSP, ФАПЧ использовать нельзя.
FM имел в виду, дурацкая привычка к обратному транслиту. Если структура как ты описал, то есть с фурье то тебе придется все равно восстанавливать символьную синхронизацию, так что без подстройки не обойтись, чем именно ты будешь отслеживать переходы 1-0 и 0-1 - фазовым детектором или фурье - не важно, но ФД удобнее тем что в нем не требуется искать символы, с фурье надо городить тот же АПЧ или DLL.
ЗЫ С другой стороны если взять сигналы после детекторов огибающей и вычесть их друг из друга и сравнить с нулем получится исходный сигнал, без всяких синхронизаций и АПЧ.
Информация по RLC mini находится >тут<
Контактная информация:
Первый раз сказал Мяу!
Сообщения: 31
Зарегистрирован: Чт апр 22, 2010 05:36:56

Сообщение MaLoY22-ne »

А вот такой вопрос: После двух прямых фурье, получаем комплексные числа. берем диапозон 48 чисел, домножаем каждое на комплексно-сопряженное, а потом находим среднее значение среди них, чтобы определить порог сравнения?
Контактная информация:
Друг Кота
Аватара пользователя
Сообщения: 3961
Зарегистрирован: Пн июл 13, 2009 14:37:39
Откуда: Московская область, наукоград.....

Сообщение Meteor »

Не забывайте что максимальная частотная составляющая которую можно получить в результате ПФ будет в 2 раза меньше числа отсчетов.
Если не секрет зачем ам делать 24 свертки (из 48 отсчетов) и поиск постоянной составляющей?
Ведь по условию задачи - нужны только 6 и 8 гармоники, а это только 2 свертки.
И сравнивать надо только эти гармоники.
Загружая на вход компьютера "мусор", на выходе получим "мусор^32".
PS. Не работаю с: Proteus, Multisim, EWB, Micro-Cap... не спрашивайте даже
Контактная информация:
Держит паяльник хвостом
Аватара пользователя
Сообщения: 993
Зарегистрирован: Пн сен 18, 2006 11:16:05
Откуда: Тула

Сообщение Neekeetos »

MaLoY22-ne писал(а):А вот такой вопрос: После двух прямых фурье, получаем комплексные числа. берем диапозон 48 чисел, домножаем каждое на комплексно-сопряженное, а потом находим среднее значение среди них, чтобы определить порог сравнения?
Ну зачем ты мудришь? Тебеж Метеор подсказал как делать. Надо свертку с небольшим количеством отсчетов и скользящим окном для обоих частот. Потом , когда получишь два комплексных числа , надо найти их модуль , он по теореме пифагора ищется, и затем уже сравнить их между собой. Таким образом ты каждый такт оцифровки будешь получать информацию о состоянии сигнала либо он 0 либо 1. Вот примерный алгоритм с формулами:
для 6ти семплов:
1) ДПФ
F16re = 1/6*СУММА(i = 0 ... 5) {X(N+i-5)*ОКНО(i)*SIN(W16k*i)};
F16im = 1/6*СУММА(i = 0 ... 5) {X(N+i-5)*ОКНО(i)*COS(W16k*i)};
F12re = 1/6*СУММА(i = 0 ... 5) {X(N+i-5)*ОКНО(i)*SIN(W12k*i)};
F12im = 1/6*СУММА(i = 0 ... 5) {X(N+i-5)*ОКНО(i)*COS(W12k*i)};
N это индекс текущего семпла в массиве, на следующей итерации он будет N+1
окно использовать обязательно иначе все будет плохо на таком количестве семплов
W16 и W12 угловые скорости соотв твоим частотам 12к и 16к. 6 семплов в общем то от балды взято, реально нужно брать порядка половины символьного периода+- иначе получишь проблемы с доставанием данных. Кстати какая у тебя символьная скорость?
2) модуль
M16 = sqrt(F16re*F16re + F16im*F16im)
M12 = sqrt(F12re*F12re + F12im*F12im)
3) получение массива данных
if(M16>M12){данные = 1;}else{данные = 0;}
4) натравливаешь алгоритм декодирования манчестера на то что получилось
Информация по RLC mini находится >тут<
Контактная информация:
Друг Кота
Аватара пользователя
Сообщения: 3961
Зарегистрирован: Пн июл 13, 2009 14:37:39
Откуда: Московская область, наукоград.....

Сообщение Meteor »

Neekeetos писал(а):Ну зачем ты мудришь?
Учится думать, пусть задает вопросы, видно хоть что в голове что-то шевелится :wink:
Neekeetos писал(а): Вот примерный алгоритм с формулами:
для 6ти семплов:
1) ДПФ
F16re = 1/6*СУММА(i = 0 ... 5) {X(N+i-5)*ОКНО(i)*SIN(W16k*i)};
F16im = 1/6*СУММА(i = 0 ... 5) {X(N+i-5)*ОКНО(i)*COS(W16k*i)};
F12re = 1/6*СУММА(i = 0 ... 5) {X(N+i-5)*ОКНО(i)*SIN(W12k*i)};
F12im = 1/6*СУММА(i = 0 ... 5) {X(N+i-5)*ОКНО(i)*COS(W12k*i)};
N это индекс текущего семпла в массиве, на следующей итерации он будет N+1
окно использовать обязательно иначе все будет плохо на таком количестве семплов
W16 и W12 угловые скорости соотв твоим частотам 12к и 16к. 6 семплов в общем то от балды взято, реально нужно брать порядка половины символьного периода+- иначе получишь проблемы с доставанием данных. Кстати какая у тебя символьная скорость?
Поправлю.
Для F12 надо брать 8 отсчетов на период. Т.к. 6 отсчетов это только 75% периода.
F12re = 1/8*СУММА(i = 0 ... 7) {X(N+i-7)*ОКНО(i)*COS(W12k*i)};
F12im = 1/8*СУММА(i = 0 ... 7) {X(N+i-7)*ОКНО(i)*SIN(W12k*i)};
И еще по моему синус - мнимая часть, а косинус - действительная.
Но на характере задачи это не отразится
Загружая на вход компьютера "мусор", на выходе получим "мусор^32".
PS. Не работаю с: Proteus, Multisim, EWB, Micro-Cap... не спрашивайте даже
Контактная информация:
Первый раз сказал Мяу!
Сообщения: 31
Зарегистрирован: Чт апр 22, 2010 05:36:56

Сообщение MaLoY22-ne »

Кстати какая у тебя символьная скорость?
500 мкс на символ.
Контактная информация:
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»