updateDemodulatorCons() cleanup

This commit is contained in:
Charles J. Cliffe 2015-11-18 22:57:31 -05:00
parent 94f94fa7dc
commit f43abdddaf
22 changed files with 368 additions and 235 deletions

View File

@ -2,8 +2,9 @@
ModemDigital::ModemDigital() { ModemDigital::ModemDigital() {
demodulatorCons.store(2); demodulatorCons.store(2);
currentDemodCons = 0; // Reset demodulator Constellations & Lock
currentDemodLock = false; updateDemodulatorCons(0);
currentDemodLock.store(false);
} }
ModemKit *ModemDigital::buildKit(long long sampleRate, int audioSampleRate) { ModemKit *ModemDigital::buildKit(long long sampleRate, int audioSampleRate) {
@ -23,11 +24,11 @@ void ModemDigital::disposeKit(ModemKit *kit) {
void ModemDigital::setDemodulatorLock(bool demod_lock_in) { void ModemDigital::setDemodulatorLock(bool demod_lock_in) {
demod_lock_in ? currentDemodLock = true : currentDemodLock = false; currentDemodLock.store(demod_lock_in);
} }
int ModemDigital::getDemodulatorLock() { int ModemDigital::getDemodulatorLock() {
return currentDemodLock; return currentDemodLock.load();
} }
void ModemDigital::setDemodulatorCons(int demod_cons_in) { void ModemDigital::setDemodulatorCons(int demod_cons_in) {
@ -35,36 +36,36 @@ void ModemDigital::setDemodulatorCons(int demod_cons_in) {
} }
int ModemDigital::getDemodulatorCons() { int ModemDigital::getDemodulatorCons() {
return currentDemodCons; return currentDemodCons.load();
} }
void ModemDigital::updateDemodulatorLock(modem demod, float sensitivity) { void ModemDigital::updateDemodulatorLock(modem mod, float sensitivity) {
modem_get_demodulator_evm(demod) <= sensitivity ? setDemodulatorLock(true) : setDemodulatorLock(false); modem_get_demodulator_evm(mod) <= sensitivity ? setDemodulatorLock(true) : setDemodulatorLock(false);
} }
void ModemDigital::updateDemodulatorCons(int Cons) { void ModemDigital::updateDemodulatorCons(int cons) {
if (currentDemodCons != Cons) { if (currentDemodCons.load() != cons) {
currentDemodCons = Cons; currentDemodCons = cons;
} }
} }
void ModemDigital::digitalStart(ModemKitDigital *kit, modem mod, ModemIQData *input) {
// Demodulate int bufSize = input->data.size();
/*
// Reset demodulator Constellations & Lock if (demodOutputDataDigital.size() != bufSize) {
// updateDemodulatorCons(0); if (demodOutputDataDigital.capacity() < bufSize) {
demodOutputDataDigital.reserve(bufSize);
{ }
switch (demodulatorType.load()) { demodOutputDataDigital.resize(bufSize);
// advanced demodulators }
} if (demodulatorCons.load() != currentDemodCons.load()) {
updateDemodulatorCons(demodulatorCons.load());
currentDemodLock.store(false);
}
} }
void ModemDigital::digitalFinish(ModemKitDigital *kit, modem mod) {
demodOutputDataDigital.empty();
} }
// demodOutputDataDigital.empty();
*/

View File

@ -14,21 +14,23 @@ public:
ModemDigital(); ModemDigital();
ModemKit *buildKit(long long sampleRate, int audioSampleRate); ModemKit *buildKit(long long sampleRate, int audioSampleRate);
void disposeKit(ModemKit *kit); void disposeKit(ModemKit *kit);
void digitalStart(ModemKitDigital *kit, modem mod, ModemIQData *input);
void digitalFinish(ModemKitDigital *kit, modem mod);
void setDemodulatorLock(bool demod_lock_in); virtual void setDemodulatorLock(bool demod_lock_in);
int getDemodulatorLock(); virtual int getDemodulatorLock();
void setDemodulatorCons(int demod_cons_in); virtual void setDemodulatorCons(int demod_cons_in);
int getDemodulatorCons(); virtual int getDemodulatorCons();
void updateDemodulatorCons(int Cons); virtual void updateDemodulatorCons(int cons);
void updateDemodulatorLock(modem demod, float sensitivity); virtual void updateDemodulatorLock(modem mod, float sensitivity);
protected: protected:
std::vector<unsigned int> demodOutputDataDigital; std::vector<unsigned int> demodOutputDataDigital;
std::atomic_int demodulatorCons; std::atomic_int demodulatorCons;
bool currentDemodLock; std::atomic_bool currentDemodLock;
int currentDemodCons; std::atomic_int currentDemodCons;
// std::vector<unsigned int> demodOutputDataDigitalTest; // std::vector<unsigned int> demodOutputDataDigitalTest;
// std::vector<unsigned char> demodOutputSoftbits; // std::vector<unsigned char> demodOutputSoftbits;

View File

@ -8,7 +8,9 @@ ModemAPSK::ModemAPSK() {
demodAPSK64 = modem_create(LIQUID_MODEM_APSK64); demodAPSK64 = modem_create(LIQUID_MODEM_APSK64);
demodAPSK128 = modem_create(LIQUID_MODEM_APSK128); demodAPSK128 = modem_create(LIQUID_MODEM_APSK128);
demodAPSK256 = modem_create(LIQUID_MODEM_APSK256); demodAPSK256 = modem_create(LIQUID_MODEM_APSK256);
demodAPSK = demodAPSK4; demodulatorCons.store(4);
currentDemodCons.store(0);
updateDemodulatorCons(4);
} }
Modem *ModemAPSK::factory() { Modem *ModemAPSK::factory() {
@ -25,47 +27,59 @@ ModemAPSK::~ModemAPSK() {
modem_destroy(demodAPSK256); modem_destroy(demodAPSK256);
} }
void ModemAPSK::demodulate(ModemKit *kit, ModemIQData *input, AudioThreadInput *audioOut) { void ModemAPSK::updateDemodulatorCons(int cons) {
switch (demodulatorCons.load()) { if (currentDemodCons.load() != cons) {
case 2: currentDemodCons = cons;
demodAPSK = demodAPSK4; switch (demodulatorCons.load()) {
updateDemodulatorCons(4); case 2:
break; demodAPSK = demodAPSK4;
case 4: updateDemodulatorCons(4);
demodAPSK = demodAPSK4; break;
updateDemodulatorCons(4); case 4:
break; demodAPSK = demodAPSK4;
case 8: updateDemodulatorCons(4);
demodAPSK = demodAPSK8; break;
updateDemodulatorCons(8); case 8:
break; demodAPSK = demodAPSK8;
case 16: updateDemodulatorCons(8);
demodAPSK = demodAPSK16; break;
updateDemodulatorCons(16); case 16:
break; demodAPSK = demodAPSK16;
case 32: updateDemodulatorCons(16);
demodAPSK = demodAPSK32; break;
updateDemodulatorCons(32); case 32:
break; demodAPSK = demodAPSK32;
case 64: updateDemodulatorCons(32);
demodAPSK = demodAPSK64; break;
updateDemodulatorCons(64); case 64:
break; demodAPSK = demodAPSK64;
case 128: updateDemodulatorCons(64);
demodAPSK = demodAPSK128; break;
updateDemodulatorCons(128); case 128:
break; demodAPSK = demodAPSK128;
case 256: updateDemodulatorCons(128);
demodAPSK = demodAPSK256; break;
updateDemodulatorCons(256); case 256:
break; demodAPSK = demodAPSK256;
default: updateDemodulatorCons(256);
demodAPSK = demodAPSK4; break;
break; default:
demodAPSK = demodAPSK4;
break;
}
} }
}
void ModemAPSK::demodulate(ModemKit *kit, ModemIQData *input, AudioThreadInput *audioOut) {
ModemKitDigital *dkit = (ModemKitDigital *)kit;
digitalStart(dkit, demodAPSK, input);
for (int i = 0, bufSize = input->data.size(); i < bufSize; i++) { for (int i = 0, bufSize = input->data.size(); i < bufSize; i++) {
modem_demodulate(demodAPSK, input->data[i], &demodOutputDataDigital[i]); modem_demodulate(demodAPSK, input->data[i], &demodOutputDataDigital[i]);
} }
updateDemodulatorLock(demodAPSK, 0.005f); updateDemodulatorLock(demodAPSK, 0.005f);
digitalFinish(dkit, demodAPSK);
} }

View File

@ -6,6 +6,7 @@ public:
ModemAPSK(); ModemAPSK();
~ModemAPSK(); ~ModemAPSK();
Modem *factory(); Modem *factory();
void updateDemodulatorCons(int cons);
void demodulate(ModemKit *kit, ModemIQData *input, AudioThreadInput *audioOut); void demodulate(ModemKit *kit, ModemIQData *input, AudioThreadInput *audioOut);
private: private:

View File

@ -10,6 +10,9 @@ ModemASK::ModemASK() {
demodASK128 = modem_create(LIQUID_MODEM_ASK128); demodASK128 = modem_create(LIQUID_MODEM_ASK128);
demodASK256 = modem_create(LIQUID_MODEM_ASK256); demodASK256 = modem_create(LIQUID_MODEM_ASK256);
demodASK = demodASK2; demodASK = demodASK2;
demodulatorCons.store(2);
currentDemodCons.store(0);
updateDemodulatorCons(2);
} }
Modem *ModemASK::factory() { Modem *ModemASK::factory() {
@ -26,7 +29,15 @@ ModemASK::~ModemASK() {
modem_destroy(demodASK256); modem_destroy(demodASK256);
} }
void ModemASK::updateDemodulatorCons(int cons) {
if (currentDemodCons.load() != cons) {
currentDemodCons = cons;
}
}
void ModemASK::demodulate(ModemKit *kit, ModemIQData *input, AudioThreadInput *audioOut) { void ModemASK::demodulate(ModemKit *kit, ModemIQData *input, AudioThreadInput *audioOut) {
ModemKitDigital *dkit = (ModemKitDigital *)kit;
switch (demodulatorCons.load()) { switch (demodulatorCons.load()) {
case 2: case 2:
@ -66,8 +77,12 @@ void ModemASK::demodulate(ModemKit *kit, ModemIQData *input, AudioThreadInput *a
break; break;
} }
digitalStart(dkit, demodASK, input);
for (int i = 0, bufSize = input->data.size(); i < bufSize; i++) { for (int i = 0, bufSize = input->data.size(); i < bufSize; i++) {
modem_demodulate(demodASK, input->data[i], &demodOutputDataDigital[i]); modem_demodulate(demodASK, input->data[i], &demodOutputDataDigital[i]);
} }
updateDemodulatorLock(demodASK, 0.005f); updateDemodulatorLock(demodASK, 0.005f);
digitalFinish(dkit, demodASK);
} }

View File

@ -6,6 +6,7 @@ public:
ModemASK(); ModemASK();
~ModemASK(); ~ModemASK();
Modem *factory(); Modem *factory();
void updateDemodulatorCons(int cons);
void demodulate(ModemKit *kit, ModemIQData *input, AudioThreadInput *audioOut); void demodulate(ModemKit *kit, ModemIQData *input, AudioThreadInput *audioOut);
private: private:

View File

@ -2,7 +2,6 @@
ModemBPSK::ModemBPSK() { ModemBPSK::ModemBPSK() {
demodBPSK = modem_create(LIQUID_MODEM_BPSK); demodBPSK = modem_create(LIQUID_MODEM_BPSK);
} }
Modem *ModemBPSK::factory() { Modem *ModemBPSK::factory() {
@ -13,9 +12,20 @@ ModemBPSK::~ModemBPSK() {
modem_destroy(demodBPSK); modem_destroy(demodBPSK);
} }
void ModemBPSK::updateDemodulatorCons(int cons) {
if (currentDemodCons.load() != cons) {
currentDemodCons = cons;
}
}
void ModemBPSK::demodulate(ModemKit *kit, ModemIQData *input, AudioThreadInput *audioOut) { void ModemBPSK::demodulate(ModemKit *kit, ModemIQData *input, AudioThreadInput *audioOut) {
ModemKitDigital *dkit = (ModemKitDigital *)kit;
digitalStart(dkit, demodBPSK, input);
for (int i = 0, bufSize=input->data.size(); i < bufSize; i++) { for (int i = 0, bufSize=input->data.size(); i < bufSize; i++) {
modem_demodulate(demodBPSK, input->data[i], &demodOutputDataDigital[i]); modem_demodulate(demodBPSK, input->data[i], &demodOutputDataDigital[i]);
} }
updateDemodulatorLock(demodBPSK, 0.005f); updateDemodulatorLock(demodBPSK, 0.005f);
digitalFinish(dkit, demodBPSK);
} }

View File

@ -6,6 +6,7 @@ public:
ModemBPSK(); ModemBPSK();
~ModemBPSK(); ~ModemBPSK();
Modem *factory(); Modem *factory();
void updateDemodulatorCons(int cons);
void demodulate(ModemKit *kit, ModemIQData *input, AudioThreadInput *audioOut); void demodulate(ModemKit *kit, ModemIQData *input, AudioThreadInput *audioOut);
private: private:

View File

@ -9,7 +9,9 @@ ModemDPSK::ModemDPSK() {
demodDPSK64 = modem_create(LIQUID_MODEM_DPSK64); demodDPSK64 = modem_create(LIQUID_MODEM_DPSK64);
demodDPSK128 = modem_create(LIQUID_MODEM_DPSK128); demodDPSK128 = modem_create(LIQUID_MODEM_DPSK128);
demodDPSK256 = modem_create(LIQUID_MODEM_DPSK256); demodDPSK256 = modem_create(LIQUID_MODEM_DPSK256);
demodDPSK = demodDPSK2; demodulatorCons.store(2);
currentDemodCons.store(0);
updateDemodulatorCons(2);
} }
Modem *ModemDPSK::factory() { Modem *ModemDPSK::factory() {
@ -27,48 +29,59 @@ ModemDPSK::~ModemDPSK() {
modem_destroy(demodDPSK256); modem_destroy(demodDPSK256);
} }
void ModemDPSK::demodulate(ModemKit *kit, ModemIQData *input, AudioThreadInput *audioOut) { void ModemDPSK::updateDemodulatorCons(int cons) {
if (currentDemodCons.load() != cons) {
switch (demodulatorCons.load()) { currentDemodCons = cons;
case 2:
demodDPSK = demodDPSK2; switch (demodulatorCons.load()) {
updateDemodulatorCons(2); case 2:
break; demodDPSK = demodDPSK2;
case 4: updateDemodulatorCons(2);
demodDPSK = demodDPSK4; break;
updateDemodulatorCons(4); case 4:
break; demodDPSK = demodDPSK4;
case 8: updateDemodulatorCons(4);
demodDPSK = demodDPSK8; break;
updateDemodulatorCons(8); case 8:
break; demodDPSK = demodDPSK8;
case 16: updateDemodulatorCons(8);
demodDPSK = demodDPSK16; break;
updateDemodulatorCons(16); case 16:
break; demodDPSK = demodDPSK16;
case 32: updateDemodulatorCons(16);
demodDPSK = demodDPSK32; break;
updateDemodulatorCons(32); case 32:
break; demodDPSK = demodDPSK32;
case 64: updateDemodulatorCons(32);
demodDPSK = demodDPSK64; break;
updateDemodulatorCons(64); case 64:
break; demodDPSK = demodDPSK64;
case 128: updateDemodulatorCons(64);
demodDPSK = demodDPSK128; break;
updateDemodulatorCons(128); case 128:
break; demodDPSK = demodDPSK128;
case 256: updateDemodulatorCons(128);
demodDPSK = demodDPSK256; break;
updateDemodulatorCons(256); case 256:
break; demodDPSK = demodDPSK256;
default: updateDemodulatorCons(256);
demodDPSK = demodDPSK2; break;
break; default:
demodDPSK = demodDPSK2;
break;
}
} }
}
void ModemDPSK::demodulate(ModemKit *kit, ModemIQData *input, AudioThreadInput *audioOut) {
ModemKitDigital *dkit = (ModemKitDigital *)kit;
digitalStart(dkit, demodDPSK, input);
for (int i = 0, bufSize = input->data.size(); i < bufSize; i++) { for (int i = 0, bufSize = input->data.size(); i < bufSize; i++) {
modem_demodulate(demodDPSK, input->data[i], &demodOutputDataDigital[i]); modem_demodulate(demodDPSK, input->data[i], &demodOutputDataDigital[i]);
} }
updateDemodulatorLock(demodDPSK, 0.005f); updateDemodulatorLock(demodDPSK, 0.005f);
digitalFinish(dkit, demodDPSK);
} }

View File

@ -6,6 +6,7 @@ public:
ModemDPSK(); ModemDPSK();
~ModemDPSK(); ~ModemDPSK();
Modem *factory(); Modem *factory();
void updateDemodulatorCons(int cons);
void demodulate(ModemKit *kit, ModemIQData *input, AudioThreadInput *audioOut); void demodulate(ModemKit *kit, ModemIQData *input, AudioThreadInput *audioOut);
private: private:

View File

@ -12,10 +12,21 @@ ModemOOK::~ModemOOK() {
modem_destroy(demodOOK); modem_destroy(demodOOK);
} }
void ModemOOK::updateDemodulatorCons(int cons) {
if (currentDemodCons.load() != cons) {
currentDemodCons = cons;
}
}
void ModemOOK::demodulate(ModemKit *kit, ModemIQData *input, AudioThreadInput *audioOut) { void ModemOOK::demodulate(ModemKit *kit, ModemIQData *input, AudioThreadInput *audioOut) {
ModemKitDigital *dkit = (ModemKitDigital *)kit;
digitalStart(dkit, demodOOK, input);
for (int i = 0, bufSize=input->data.size(); i < bufSize; i++) { for (int i = 0, bufSize=input->data.size(); i < bufSize; i++) {
modem_demodulate(demodOOK, input->data[i], &demodOutputDataDigital[i]); modem_demodulate(demodOOK, input->data[i], &demodOutputDataDigital[i]);
} }
updateDemodulatorLock(demodOOK, 0.005f); updateDemodulatorLock(demodOOK, 0.005f);
digitalFinish(dkit, demodOOK);
} }

View File

@ -6,6 +6,7 @@ public:
ModemOOK(); ModemOOK();
~ModemOOK(); ~ModemOOK();
Modem *factory(); Modem *factory();
void updateDemodulatorCons(int cons);
void demodulate(ModemKit *kit, ModemIQData *input, AudioThreadInput *audioOut); void demodulate(ModemKit *kit, ModemIQData *input, AudioThreadInput *audioOut);
private: private:

View File

@ -9,7 +9,9 @@ ModemPSK::ModemPSK() {
demodPSK64 = modem_create(LIQUID_MODEM_PSK64); demodPSK64 = modem_create(LIQUID_MODEM_PSK64);
demodPSK128 = modem_create(LIQUID_MODEM_PSK128); demodPSK128 = modem_create(LIQUID_MODEM_PSK128);
demodPSK256 = modem_create(LIQUID_MODEM_PSK256); demodPSK256 = modem_create(LIQUID_MODEM_PSK256);
demodPSK = demodPSK2; demodulatorCons.store(2);
currentDemodCons.store(0);
updateDemodulatorCons(2);
} }
Modem *ModemPSK::factory() { Modem *ModemPSK::factory() {
@ -27,48 +29,59 @@ ModemPSK::~ModemPSK() {
modem_destroy(demodPSK256); modem_destroy(demodPSK256);
} }
void ModemPSK::demodulate(ModemKit *kit, ModemIQData *input, AudioThreadInput *audioOut) { void ModemPSK::updateDemodulatorCons(int cons) {
if (currentDemodCons.load() != cons) {
switch (demodulatorCons.load()) { currentDemodCons = cons;
case 2:
demodPSK = demodPSK2; switch (demodulatorCons.load()) {
updateDemodulatorCons(2); case 2:
break; demodPSK = demodPSK2;
case 4: updateDemodulatorCons(2);
demodPSK = demodPSK4; break;
updateDemodulatorCons(4); case 4:
break; demodPSK = demodPSK4;
case 8: updateDemodulatorCons(4);
demodPSK = demodPSK8; break;
updateDemodulatorCons(8); case 8:
break; demodPSK = demodPSK8;
case 16: updateDemodulatorCons(8);
demodPSK = demodPSK16; break;
updateDemodulatorCons(16); case 16:
break; demodPSK = demodPSK16;
case 32: updateDemodulatorCons(16);
demodPSK = demodPSK32; break;
updateDemodulatorCons(32); case 32:
break; demodPSK = demodPSK32;
case 64: updateDemodulatorCons(32);
demodPSK = demodPSK64; break;
updateDemodulatorCons(64); case 64:
break; demodPSK = demodPSK64;
case 128: updateDemodulatorCons(64);
demodPSK = demodPSK128; break;
updateDemodulatorCons(128); case 128:
break; demodPSK = demodPSK128;
case 256: updateDemodulatorCons(128);
demodPSK = demodPSK256; break;
updateDemodulatorCons(256); case 256:
break; demodPSK = demodPSK256;
default: updateDemodulatorCons(256);
demodPSK = demodPSK2; break;
break; default:
demodPSK = demodPSK2;
break;
}
} }
}
void ModemPSK::demodulate(ModemKit *kit, ModemIQData *input, AudioThreadInput *audioOut) {
ModemKitDigital *dkit = (ModemKitDigital *)kit;
digitalStart(dkit, demodPSK, input);
for (int i = 0, bufSize = input->data.size(); i < bufSize; i++) { for (int i = 0, bufSize = input->data.size(); i < bufSize; i++) {
modem_demodulate(demodPSK, input->data[i], &demodOutputDataDigital[i]); modem_demodulate(demodPSK, input->data[i], &demodOutputDataDigital[i]);
} }
updateDemodulatorLock(demodPSK, 0.005f); updateDemodulatorLock(demodPSK, 0.005f);
digitalFinish(dkit, demodPSK);
} }

View File

@ -6,6 +6,7 @@ public:
ModemPSK(); ModemPSK();
~ModemPSK(); ~ModemPSK();
Modem *factory(); Modem *factory();
void updateDemodulatorCons(int cons);
void demodulate(ModemKit *kit, ModemIQData *input, AudioThreadInput *audioOut); void demodulate(ModemKit *kit, ModemIQData *input, AudioThreadInput *audioOut);
private: private:

View File

@ -8,7 +8,9 @@ ModemQAM::ModemQAM() {
demodQAM64 = modem_create(LIQUID_MODEM_QAM64); demodQAM64 = modem_create(LIQUID_MODEM_QAM64);
demodQAM128 = modem_create(LIQUID_MODEM_QAM128); demodQAM128 = modem_create(LIQUID_MODEM_QAM128);
demodQAM256 = modem_create(LIQUID_MODEM_QAM256); demodQAM256 = modem_create(LIQUID_MODEM_QAM256);
demodQAM = demodQAM4; demodulatorCons.store(4);
currentDemodCons.store(0);
updateDemodulatorCons(4);
} }
Modem *ModemQAM::factory() { Modem *ModemQAM::factory() {
@ -25,49 +27,58 @@ ModemQAM::~ModemQAM() {
modem_destroy(demodQAM256); modem_destroy(demodQAM256);
} }
void ModemQAM::demodulate(ModemKit *kit, ModemIQData *input, AudioThreadInput *audioOut) { void ModemQAM::updateDemodulatorCons(int cons) {
if (currentDemodCons.load() != cons) {
currentDemodCons = cons;
switch (demodulatorCons.load()) {
case 2: switch (demodulatorCons.load()) {
demodQAM = demodQAM4; case 2:
updateDemodulatorCons(4); demodQAM = demodQAM4;
break; updateDemodulatorCons(4);
case 4: break;
demodQAM = demodQAM4; case 4:
updateDemodulatorCons(4); demodQAM = demodQAM4;
break; updateDemodulatorCons(4);
case 8: break;
demodQAM = demodQAM8; case 8:
updateDemodulatorCons(8); demodQAM = demodQAM8;
break; updateDemodulatorCons(8);
case 16: break;
demodQAM = demodQAM16; case 16:
updateDemodulatorCons(16); demodQAM = demodQAM16;
break; updateDemodulatorCons(16);
case 32: break;
demodQAM = demodQAM32; case 32:
updateDemodulatorCons(32); demodQAM = demodQAM32;
break; updateDemodulatorCons(32);
case 64: break;
demodQAM = demodQAM64; case 64:
updateDemodulatorCons(64); demodQAM = demodQAM64;
break; updateDemodulatorCons(64);
case 128: break;
demodQAM = demodQAM128; case 128:
updateDemodulatorCons(128); demodQAM = demodQAM128;
break; updateDemodulatorCons(128);
case 256: break;
demodQAM = demodQAM256; case 256:
updateDemodulatorCons(256); demodQAM = demodQAM256;
break; updateDemodulatorCons(256);
default: break;
demodQAM = demodQAM4; default:
break; demodQAM = demodQAM4;
break;
}
} }
}
void ModemQAM::demodulate(ModemKit *kit, ModemIQData *input, AudioThreadInput *audioOut) {
ModemKitDigital *dkit = (ModemKitDigital *)kit;
digitalStart(dkit, demodQAM, input);
for (int i = 0, bufSize = input->data.size(); i < bufSize; i++) { for (int i = 0, bufSize = input->data.size(); i < bufSize; i++) {
modem_demodulate(demodQAM, input->data[i], &demodOutputDataDigital[i]); modem_demodulate(demodQAM, input->data[i], &demodOutputDataDigital[i]);
} }
updateDemodulatorLock(demodQAM, 0.5f); updateDemodulatorLock(demodQAM, 0.5f);
digitalFinish(dkit, demodQAM);
} }

View File

@ -6,6 +6,7 @@ public:
ModemQAM(); ModemQAM();
~ModemQAM(); ~ModemQAM();
Modem *factory(); Modem *factory();
void updateDemodulatorCons(int cons);
void demodulate(ModemKit *kit, ModemIQData *input, AudioThreadInput *audioOut); void demodulate(ModemKit *kit, ModemIQData *input, AudioThreadInput *audioOut);
private: private:

View File

@ -12,10 +12,20 @@ ModemQPSK::~ModemQPSK() {
modem_destroy(demodQPSK); modem_destroy(demodQPSK);
} }
void ModemQPSK::updateDemodulatorCons(int cons) {
if (currentDemodCons.load() != cons) {
currentDemodCons = cons;
}
}
void ModemQPSK::demodulate(ModemKit *kit, ModemIQData *input, AudioThreadInput *audioOut) { void ModemQPSK::demodulate(ModemKit *kit, ModemIQData *input, AudioThreadInput *audioOut) {
ModemKitDigital *dkit = (ModemKitDigital *)kit;
digitalStart(dkit, demodQPSK, input);
for (int i = 0, bufSize = input->data.size(); i < bufSize; i++) { for (int i = 0, bufSize = input->data.size(); i < bufSize; i++) {
modem_demodulate(demodQPSK, input->data[i], &demodOutputDataDigital[i]); modem_demodulate(demodQPSK, input->data[i], &demodOutputDataDigital[i]);
} }
updateDemodulatorLock(demodQPSK, 0.8f); updateDemodulatorLock(demodQPSK, 0.8f);
digitalFinish(dkit, demodQPSK);
} }

View File

@ -6,6 +6,7 @@ public:
ModemQPSK(); ModemQPSK();
~ModemQPSK(); ~ModemQPSK();
Modem *factory(); Modem *factory();
void updateDemodulatorCons(int cons);
void demodulate(ModemKit *kit, ModemIQData *input, AudioThreadInput *audioOut); void demodulate(ModemKit *kit, ModemIQData *input, AudioThreadInput *audioOut);
private: private:

View File

@ -3,7 +3,9 @@
ModemSQAM::ModemSQAM() { ModemSQAM::ModemSQAM() {
demodSQAM32 = modem_create(LIQUID_MODEM_SQAM32); demodSQAM32 = modem_create(LIQUID_MODEM_SQAM32);
demodSQAM128 = modem_create(LIQUID_MODEM_SQAM128); demodSQAM128 = modem_create(LIQUID_MODEM_SQAM128);
demodSQAM = demodSQAM32; demodulatorCons.store(32);
currentDemodCons.store(0);
updateDemodulatorCons(32);
} }
Modem *ModemSQAM::factory() { Modem *ModemSQAM::factory() {
@ -15,48 +17,59 @@ ModemSQAM::~ModemSQAM() {
modem_destroy(demodSQAM128); modem_destroy(demodSQAM128);
} }
void ModemSQAM::demodulate(ModemKit *kit, ModemIQData *input, AudioThreadInput *audioOut) { void ModemSQAM::updateDemodulatorCons(int cons) {
if (currentDemodCons.load() != cons) {
switch (demodulatorCons.load()) { currentDemodCons = cons;
case 2:
demodSQAM = demodSQAM32; switch (demodulatorCons.load()) {
updateDemodulatorCons(32); case 2:
break; demodSQAM = demodSQAM32;
case 4: updateDemodulatorCons(32);
demodSQAM = demodSQAM32; break;
updateDemodulatorCons(32); case 4:
break; demodSQAM = demodSQAM32;
case 8: updateDemodulatorCons(32);
demodSQAM = demodSQAM32; break;
updateDemodulatorCons(32); case 8:
break; demodSQAM = demodSQAM32;
case 16: updateDemodulatorCons(32);
demodSQAM = demodSQAM32; break;
updateDemodulatorCons(32); case 16:
break; demodSQAM = demodSQAM32;
case 32: updateDemodulatorCons(32);
demodSQAM = demodSQAM32; break;
updateDemodulatorCons(32); case 32:
break; demodSQAM = demodSQAM32;
case 64: updateDemodulatorCons(32);
demodSQAM = demodSQAM32; break;
updateDemodulatorCons(32); case 64:
break; demodSQAM = demodSQAM32;
case 128: updateDemodulatorCons(32);
demodSQAM = demodSQAM128; break;
updateDemodulatorCons(128); case 128:
break; demodSQAM = demodSQAM128;
case 256: updateDemodulatorCons(128);
demodSQAM = demodSQAM128; break;
updateDemodulatorCons(128); case 256:
break; demodSQAM = demodSQAM128;
default: updateDemodulatorCons(128);
demodSQAM = demodSQAM32; break;
break; default:
demodSQAM = demodSQAM32;
break;
}
} }
}
void ModemSQAM::demodulate(ModemKit *kit, ModemIQData *input, AudioThreadInput *audioOut) {
ModemKitDigital *dkit = (ModemKitDigital *)kit;
digitalStart(dkit, demodSQAM, input);
for (int i = 0, bufSize = input->data.size(); i < bufSize; i++) { for (int i = 0, bufSize = input->data.size(); i < bufSize; i++) {
modem_demodulate(demodSQAM, input->data[i], &demodOutputDataDigital[i]); modem_demodulate(demodSQAM, input->data[i], &demodOutputDataDigital[i]);
} }
updateDemodulatorLock(demodSQAM, 0.005f); updateDemodulatorLock(demodSQAM, 0.005f);
digitalFinish(dkit, demodSQAM);
} }

View File

@ -6,6 +6,7 @@ public:
ModemSQAM(); ModemSQAM();
~ModemSQAM(); ~ModemSQAM();
Modem *factory(); Modem *factory();
void updateDemodulatorCons(int cons);
void demodulate(ModemKit *kit, ModemIQData *input, AudioThreadInput *audioOut); void demodulate(ModemKit *kit, ModemIQData *input, AudioThreadInput *audioOut);
private: private:

View File

@ -12,10 +12,20 @@ ModemST::~ModemST() {
modem_destroy(demodST); modem_destroy(demodST);
} }
void ModemST::updateDemodulatorCons(int cons) {
if (currentDemodCons.load() != cons) {
currentDemodCons = cons;
}
}
void ModemST::demodulate(ModemKit *kit, ModemIQData *input, AudioThreadInput *audioOut) { void ModemST::demodulate(ModemKit *kit, ModemIQData *input, AudioThreadInput *audioOut) {
ModemKitDigital *dkit = (ModemKitDigital *)kit;
digitalStart(dkit, demodST, input);
for (int i = 0, bufSize = input->data.size(); i < bufSize; i++) { for (int i = 0, bufSize = input->data.size(); i < bufSize; i++) {
modem_demodulate(demodST, input->data[i], &demodOutputDataDigital[i]); modem_demodulate(demodST, input->data[i], &demodOutputDataDigital[i]);
} }
updateDemodulatorLock(demodST, 0.005f); updateDemodulatorLock(demodST, 0.005f);
digitalFinish(dkit, demodST);
} }

View File

@ -6,6 +6,7 @@ public:
ModemST(); ModemST();
~ModemST(); ~ModemST();
Modem *factory(); Modem *factory();
void updateDemodulatorCons(int cons);
void demodulate(ModemKit *kit, ModemIQData *input, AudioThreadInput *audioOut); void demodulate(ModemKit *kit, ModemIQData *input, AudioThreadInput *audioOut);
private: private: