K
K
Konstantin Stepanov2016-10-15 03:58:42
Radio communication
Konstantin Stepanov, 2016-10-15 03:58:42

How to clean up the sine wave of the signal after receiving?

Излучатель генерирует постоянный синусовый сигнал с частотой 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) Аналогично ищем нужную амплитуду по скорректированному сигналу.
Или я вообще ничего не понял и действовать необходимо по-другому?

Answer the question

In order to leave comments, you need to log in

2 answer(s)
Дмитрий, 2016-10-25
@gashopper

Не вполне понял цель задачи и условия.
Как я понял условия:
есть некий генератор гармонического сигнала,
есть некий детектор (на каком принципе построен?),
есть набор отсчетов с АЦП после детектора (Fд = 100Fmax),
есть паразитная АМ сигнала, обусловленная динамическим изменением параметров среды.
Как я понял цель:
требуется косвенно оценить параметры среды передачи по изменению амплитуды принятого сигнала.
Чего не хватает в условиях:
- имеются ли сведения об амплитуде исходного сигнала при детектировании,
- с какой частотой происходят изменения среды передачи (накопление да/нет),
- имеется ли возможность калибровки детектора по приему при некоторых известных параметрах среды.
Как-то так...

Константин Степанов, 2017-01-11
@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 значения.

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question