Как осуществить очистку синусоиды сигнала после приема?

Излучатель генерирует постоянный синусовый сигнал с частотой 100 герц, без модуляции по амплитуде.
Приемник принимает этот сигнал, на входе получается синус с разной амплитудой для каждого пика. Появляется, грубо говоря, амплитудная модуляция у сигнала. Появляется такой эффект из-за среды, по которой проходит сигнал. Цель - как раз измерить параметры среды по изменениям амплитуды.

АЦП 10 бит сливает данные сразу на компьютер по com порту. Обработка - на компе, на языке с++. За входящий сигнал в каждый отсчет времени принимаю S(t). Период измерений АЦП - 100 микросекунд, получается АЦП проводит считывание с частотой 10khz, делая на один период синусоиды 100 измерений.

После прочтения некоторой литературы, у меня сложилось в голове две схемы:
Путь "а":
1) Провести квадратурное разложение на I и Q, грубо говоря: I(t) = cos(f(t))*S(t), Q(t) = -sin(f(t))*S(t). Где f(t) за те-же самые 1 мс проходит от 0 до 2*PI, или, по-другому, гетеродин при разложении работает с частотой несущей
2) Производим выборку одновременно из I и Q, уменьшая частоту сигнала в 4 раза, до 2500 герц, используя CIC фильтр в режиме выборки.
3) Используем FIR фильтр к получившимся из пункта 2 сигналам I и Q, обрезая ненужные частоты.
4) Считаем результирующий сигнал, используя формулу R(t') = sqrt(I(t')^2+Q(t')^2).
4) Для измерения амплитуды, ищем разность максимума и минимума результирующего набора данных. Грубо говоря, этот набор - значения той-же синусоиды из передатчика с измененной амплитудой, но только точек измерения больше и они точнее, так?

Путь "б":
1) Провести квадратурное разложение на I и Q, но генератор угла при разложении работает с частотой несущей * 10, например - 100khz.
2) Производим выборку одновременно из I и Q, уменьшая частоту сигнала в 4 раза, до 25khz, используя CIC фильтр в режиме выборки.
3) Используем FIR фильтр к получившимся из пункта 2 сигналам I и Q, обрезая ненужные частоты.
4) Считаем результирующий сигнал, используя формулу R(t') = sqrt(I(t')^2+Q(t')^2).
4) Аналогично ищем нужную амплитуду по скорректированному сигналу.

Или я вообще ничего не понял и действовать необходимо по-другому?
  • Вопрос задан
  • 284 просмотра
Пригласить эксперта
Ответы на вопрос 2
gashopper
@gashopper
За Ваши деньги - хоть луноход.
Не вполне понял цель задачи и условия.
Как я понял условия:
есть некий генератор гармонического сигнала,
есть некий детектор (на каком принципе построен?),
есть набор отсчетов с АЦП после детектора (Fд = 100Fmax),
есть паразитная АМ сигнала, обусловленная динамическим изменением параметров среды.
Как я понял цель:
требуется косвенно оценить параметры среды передачи по изменению амплитуды принятого сигнала.
Чего не хватает в условиях:
- имеются ли сведения об амплитуде исходного сигнала при детектировании,
- с какой частотой происходят изменения среды передачи (накопление да/нет),
- имеется ли возможность калибровки детектора по приему при некоторых известных параметрах среды.
Как-то так...
Ответ написан
@koronabora Автор вопроса
Человек
В общем, как я делал.
Т.к. железо везде слабое, то в Arduino использую скользящую среднюю по 3 для результатов пиков, а на входе использовал простой lowpass фильтр. Для ускорения писал на Atmel библиотеках, а не на Arduino. Так объем кода вырос, но итоговый файл сократился и стал быстрее работать.
uint16_t lowpass(uint16_t prev, uint16_t cur, float a)
{
	return prev + a * (cur*1.0 - prev*1.0);
}


Т.к. при частоте 100 герц, на один пик приходилось 4-5 измерений, то не было нужды искать пики сложно, искал просто как минимум - максимум из 3.

Получившуюся амплитуду фильтровал также sma по 3. И отправлял в COM порт сразу 3 значения.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы