Сообщение от
Valery12
Демодулировать нам нужно исходный сигнал.
для обработки нужна квадратура.
Если у нас 2 АЦП которые оцифровывают выходы аналогового квадратурного детектора, то это одно - в этом случае у нас на входе сразу квадратура. Правда у аналогового детектора квадратуры будут проблемы с балансом.
А если у нас на входе один АЦП, то нужно вначале демодулировать квадратуру.
А квадратуру уже можно дальше обрабатывать.
Также как в обычных приемниках - переносить спектр, фильтровать, детектировать.
Например чтобы AM модуляцию из квадратуры детектировать нужно вычислить U = SQRT( I*I + Q*Q ).
U - это результирующий аудиосигнал. Только его еще желательно отфильтровать после этого.
Чтобы DSB модуляцию из квадратуры детектировать, просто берем U = I.
Чтобы CW, LSB и USB модуляцию детектировать нужно дополнительный BFO осциллятор использовать.
Например CW детектор: U = ([I;Q] * BFO).I,
где BFO - это вращающийся комплексный вектор осциллятора, частота которого задает смещение тона для CW, например 500 Гц.
FM модуляцию можно вот так детектировать:
Код:
var v = [I;Q];
if (v.I == 0 && v.Q == 0) v = [1;1];
var phase = atan2(v.Q, v.I);
var dphase = phase - last_phase;
last_phase = phase; // last_phase сохраняем между вызовами
if (dphase < -Math.PI) dphase += TWO_PI;
if (dphase > Math.PI) dphase -= TWO_PI;
dphase /= Math.PI;
U = dphase * gain;
этот алгоритм для FM мне на этом форуме подсказали, работает вроде неплохо