Ну вот, глянул, а у меня, оказывается до линий задержки с перемножителями всё готово было. Вот код функции демодулятора: /* Process raw signal and returns DBPSK demodulation result at Signal[2] */
void DBPSKdemod(int16_t Signal[32]) {
static int16_t Idly[IQsamplesPerBit] = {0}; // Delay memory
static int16_t Qdly[IQsamplesPerBit] = {0}; //
static int Idx = 0; //Delay index
int32_t ProductI, ProductQ; //Intermediate delayed and current component
//signal products
LPFandConvertIQ(Signal); //Low pass filtering, decimation and quadrature
//conversion
BitIQintegrator(Signal); //Integrating filter
ProductI = (int32_t) Signal[0] * Idly[Idx]; //Compute current and
//delayed I component product
Idly[Idx] = Signal[0]; //Replace oldest I value with newest one
ProductQ = (int32_t) Signal[1] * Qdly[Idx]; //Compute current and
//delayed Q component product
Qdly[Idx] = Signal[1]; //Replace oldest Q value with newest one
Signal[2] = (ProductI + ProductQ) / PSKscale; //Return demodulator output
if (++Idx >= IQsamplesPerBit) { //Loop delay index
Idx = 0;
}
return;
}
Вот картинка с квадратурными компонентами до интегрирующего фильтра и выходом детектора (снизу).