void ModemQPSK::demodulate(ModemKit *kit, ModemIQData *input, AudioThreadInput *audioOut) { ModemKitDigital *dkit = (ModemKitDigital *)kit; digitalStart(dkit, demodQPSK, input); for (size_t i = 0, bufSize = input->data.size(); i < bufSize; i++) { modem_demodulate(demodQPSK, input->data[i], &demodOutputDataDigital[i]); } updateDemodulatorLock(demodQPSK, 0.8f); digitalFinish(dkit, demodQPSK); }
void ModemFSK::demodulate(ModemKit *kit, ModemIQData *input, AudioThreadInput *audioOut) { ModemKitFSK *dkit = (ModemKitFSK *)kit; digitalStart(dkit, nullptr, input); dkit->inputBuffer.insert(dkit->inputBuffer.end(),input->data.begin(),input->data.end()); while (dkit->inputBuffer.size() >= dkit->k) { outStream << fskdem_demodulate(dkit->demodFSK, &dkit->inputBuffer[0]); // float err = fskdem_get_frequency_error(dkit->demodFSK); dkit->inputBuffer.erase(dkit->inputBuffer.begin(),dkit->inputBuffer.begin()+dkit->k); } digitalFinish(dkit, nullptr); }
void ModemGMSK::demodulate(ModemKit *kit, ModemIQData *input, AudioThreadInput *audioOut) { ModemKitGMSK *dkit = (ModemKitGMSK *)kit; unsigned int sym_out; digitalStart(dkit, nullptr, input); dkit->inputBuffer.insert(dkit->inputBuffer.end(),input->data.begin(),input->data.end()); int numProcessed = 0; for (int i = 0, iMax = dkit->inputBuffer.size()/dkit->sps; i < iMax; i+= dkit->sps) { gmskdem_demodulate(dkit->demodGMSK, &input->data[i],&sym_out); outStream << sym_out; numProcessed += dkit->sps; } dkit->inputBuffer.erase(dkit->inputBuffer.begin(),dkit->inputBuffer.begin()+numProcessed); digitalFinish(dkit, nullptr); }