Finished digital data buffer with vectors

This commit is contained in:
Dantali0n 2015-07-03 11:29:52 +02:00
parent 74255606df
commit fe37d50bd9

View File

@ -26,8 +26,6 @@ DemodulatorThread::DemodulatorThread(DemodulatorThreadPostInputQueue* iqInputQue
demodAM = demodAM_DSB_CSP; demodAM = demodAM_DSB_CSP;
// advanced demodulators // advanced demodulators
// needs refactoring
// should look into dynamicly creating modems, so only the required type exists.
demodulatorCons = 2; demodulatorCons = 2;
currentDemodCons = 0; currentDemodCons = 0;
@ -211,12 +209,12 @@ void DemodulatorThread::threadMain() {
double audio_resample_ratio = inp->audioResampleRatio; double audio_resample_ratio = inp->audioResampleRatio;
if (demodOutputData.size() != bufSize) { if (demodOutputData.size() != bufSize) {
if (demodOutputData.capacity() < bufSize) { if (demodOutputData.capacity() < bufSize) {
demodOutputData.reserve(bufSize); demodOutputData.reserve(bufSize);
} }
demodOutputData.resize(bufSize); demodOutputData.resize(bufSize);
} }
if (demodOutputDataDigital.size() != bufSize) { if (demodOutputDataDigital.size() != bufSize) {
if (demodOutputDataDigital.capacity() < bufSize) { if (demodOutputDataDigital.capacity() < bufSize) {
@ -225,15 +223,6 @@ void DemodulatorThread::threadMain() {
demodOutputDataDigital.resize(bufSize); demodOutputDataDigital.resize(bufSize);
} }
/*
if (demodOutputDataDigitalTest.size() != bufSize) {
if (demodOutputDataDigitalTest.capacity() < bufSize) {
demodOutputDataDigitalTest.reserve(bufSize);
}
demodOutputDataDigitalTest.resize(bufSize);
}
*/
int audio_out_size = ceil((double) (bufSize) * audio_resample_ratio) + 512; int audio_out_size = ceil((double) (bufSize) * audio_resample_ratio) + 512;
agc_crcf_execute_block(iqAutoGain, &(inp->data[0]), bufSize, &agcData[0]); agc_crcf_execute_block(iqAutoGain, &(inp->data[0]), bufSize, &agcData[0]);
@ -249,12 +238,6 @@ void DemodulatorThread::threadMain() {
// Reset demodulator Constellations & Lock // Reset demodulator Constellations & Lock
updateDemodulatorCons(0); updateDemodulatorCons(0);
// create digital output buffer
//demodOutputDataDigital = new unsigned int[bufSize];
//demodOutputDataDigitalTest = new unsigned int[bufSize];
//demodOutputSoftbits = new unsigned char[bufSize];
//demodOutputSoftbitsTest = new unsigned char[bufSize];
if (demodulatorType == DEMOD_TYPE_FM) { if (demodulatorType == DEMOD_TYPE_FM) {
currentDemodLock = false; currentDemodLock = false;
freqdem_demodulate_block(demodFM, &agcData[0], bufSize, &demodOutputData[0]); freqdem_demodulate_block(demodFM, &agcData[0], bufSize, &demodOutputData[0]);
@ -283,7 +266,6 @@ void DemodulatorThread::threadMain() {
} }
break; break;
// advanced demodulators // advanced demodulators
// needs refactoring
case DEMOD_TYPE_ASK: case DEMOD_TYPE_ASK:
switch (demodulatorCons) { switch (demodulatorCons) {
@ -325,10 +307,7 @@ void DemodulatorThread::threadMain() {
} }
for (int i = 0; i < bufSize; i++) { for (int i = 0; i < bufSize; i++) {
modem_demodulate(demodASK, inp->data[i], &demodOutputDataDigital[i]); modem_demodulate(demodASK, inp->data[i], &demodOutputDataDigital[i]);
// std::cout << bitstream << std::endl;
} }
updateDemodulatorLock(demodASK, 0.005f); updateDemodulatorLock(demodASK, 0.005f);
break; break;
@ -373,19 +352,13 @@ void DemodulatorThread::threadMain() {
} }
for (int i = 0; i < bufSize; i++) { for (int i = 0; i < bufSize; i++) {
modem_demodulate(demodAPSK, inp->data[i], &demodOutputDataDigital[i]);
modem_demodulate(demodAPSK, inp->data[i], &demodOutputDataDigital[i]);
// std::cout << bitstream << std::endl;
} }
updateDemodulatorLock(demodAPSK, 0.005f); updateDemodulatorLock(demodAPSK, 0.005f);
break; break;
case DEMOD_TYPE_BPSK: case DEMOD_TYPE_BPSK:
for (int i = 0; i < bufSize; i++) { for (int i = 0; i < bufSize; i++) {
modem_demodulate(demodBPSK, inp->data[i], &demodOutputDataDigital[i]);
modem_demodulate(demodBPSK, inp->data[i], &demodOutputDataDigital[i]);
// std::cout << bitstream << std::endl;
} }
updateDemodulatorLock(demodBPSK, 0.005f); updateDemodulatorLock(demodBPSK, 0.005f);
break; break;
@ -430,10 +403,7 @@ void DemodulatorThread::threadMain() {
} }
for (int i = 0; i < bufSize; i++) { for (int i = 0; i < bufSize; i++) {
modem_demodulate(demodDPSK, inp->data[i], &demodOutputDataDigital[i]);
modem_demodulate(demodDPSK, inp->data[i], &demodOutputDataDigital[i]);
// std::cout << bitstream << std::endl;
} }
updateDemodulatorLock(demodDPSK, 0.005f); updateDemodulatorLock(demodDPSK, 0.005f);
break; break;
@ -478,19 +448,13 @@ void DemodulatorThread::threadMain() {
} }
for (int i = 0; i < bufSize; i++) { for (int i = 0; i < bufSize; i++) {
modem_demodulate(demodPSK, inp->data[i], &demodOutputDataDigital[i]);
modem_demodulate(demodPSK, inp->data[i], &demodOutputDataDigital[i]);
// std::cout << bitstream << std::endl;
} }
updateDemodulatorLock(demodPSK, 0.005f); updateDemodulatorLock(demodPSK, 0.005f);
break; break;
case DEMOD_TYPE_OOK: case DEMOD_TYPE_OOK:
for (int i = 0; i < bufSize; i++) { for (int i = 0; i < bufSize; i++) {
modem_demodulate(demodOOK, inp->data[i], &demodOutputDataDigital[i]);
modem_demodulate(demodOOK, inp->data[i], &demodOutputDataDigital[i]);
// std::cout << bitstream << std::endl;
} }
updateDemodulatorLock(demodOOK, 0.005f); updateDemodulatorLock(demodOOK, 0.005f);
break; break;
@ -535,19 +499,13 @@ void DemodulatorThread::threadMain() {
} }
for (int i = 0; i < bufSize; i++) { for (int i = 0; i < bufSize; i++) {
modem_demodulate(demodSQAM, inp->data[i], &demodOutputDataDigital[i]);
modem_demodulate(demodSQAM, inp->data[i], &demodOutputDataDigital[i]);
// std::cout << bitstream << std::endl;
} }
updateDemodulatorLock(demodSQAM, 0.005f); updateDemodulatorLock(demodSQAM, 0.005f);
break; break;
case DEMOD_TYPE_ST: case DEMOD_TYPE_ST:
for (int i = 0; i < bufSize; i++) { for (int i = 0; i < bufSize; i++) {
modem_demodulate(demodST, inp->data[i], &demodOutputDataDigital[i]);
modem_demodulate(demodST, inp->data[i], &demodOutputDataDigital[i]);
// std::cout << bitstream << std::endl;
} }
updateDemodulatorLock(demodST, 0.005f); updateDemodulatorLock(demodST, 0.005f);
break; break;
@ -592,22 +550,14 @@ void DemodulatorThread::threadMain() {
} }
for (int i = 0; i < bufSize; i++) { for (int i = 0; i < bufSize; i++) {
modem_demodulate(demodQAM, inp->data[i], &demodOutputDataDigital[i]);
modem_demodulate(demodQAM, inp->data[i], &demodOutputDataDigital[i]);
// std::cout << bitstream << std::endl;
} }
updateDemodulatorLock(demodQAM, 0.5f); updateDemodulatorLock(demodQAM, 0.5f);
break; break;
case DEMOD_TYPE_QPSK: case DEMOD_TYPE_QPSK:
freqdem_demodulate_block(demodFM, &agcData[0], bufSize, &demodOutputData[0]);
for (int i = 0; i < bufSize; i++) { for (int i = 0; i < bufSize; i++) {
//modem_demodulate(demodQPSK, inp->data[i], &demodOutputDataDigitalTest[i]);
modem_demodulate(demodQPSK, inp->data[i], &demodOutputDataDigital[i]); modem_demodulate(demodQPSK, inp->data[i], &demodOutputDataDigital[i]);
} }
// std::cout << bitstream << std::endl;
updateDemodulatorLock(demodQPSK, 0.8f); updateDemodulatorLock(demodQPSK, 0.8f);
break; break;
} }
@ -639,27 +589,6 @@ void DemodulatorThread::threadMain() {
unsigned int numAudioWritten; unsigned int numAudioWritten;
msresamp_rrrf_execute(audioResampler, &demodOutputData[0], bufSize, &resampledOutputData[0], &numAudioWritten); msresamp_rrrf_execute(audioResampler, &demodOutputData[0], bufSize, &resampledOutputData[0], &numAudioWritten);
/*
if (demodulatorType.load() == DEMOD_TYPE_QPSK) {
if (!std::equal(demodOutputDataDigitalTest, demodOutputDataDigitalTest + sizeof demodOutputDataDigitalTest / sizeof *demodOutputDataDigitalTest, demodOutputDataDigital)) {
if (!std::equal(demodOutputSoftbitsTest, demodOutputSoftbitsTest + sizeof demodOutputSoftbitsTest / sizeof *demodOutputSoftbitsTest, demodOutputSoftbits)) {
std::cout << "Data not equal?!" << std::endl;
for (int i = 0; i < bufSize; i++) {
std::cout << std::to_string(demodOutputDataDigitalTest[i]) + std::to_string(demodOutputDataDigital[i]) << std::endl;
std::cout << std::to_string(demodOutputSoftbitsTest[i]) + std::to_string(demodOutputSoftbits[i]) << std::endl;
}
terminated = true;
}
}
// destroy the digital buffer
delete[] demodOutputDataDigital;
delete[] demodOutputDataDigitalTest;
delete[] demodOutputSoftbits;
delete[] demodOutputSoftbitsTest;
}
*/
if (stereo) { if (stereo) {
if (demodStereoData.size() != bufSize) { if (demodStereoData.size() != bufSize) {
@ -835,42 +764,48 @@ void DemodulatorThread::threadMain() {
ampmodem_reset(demodAM); ampmodem_reset(demodAM);
break; break;
case DEMOD_TYPE_ASK: case DEMOD_TYPE_ASK:
modem_reset(demodASK); //modem_reset(demodASK);
break; break;
case DEMOD_TYPE_APSK: case DEMOD_TYPE_APSK:
modem_reset(demodAPSK); //modem_reset(demodAPSK);
break; break;
case DEMOD_TYPE_BPSK: case DEMOD_TYPE_BPSK:
modem_reset(demodBPSK); //modem_reset(demodBPSK);
break; break;
case DEMOD_TYPE_DPSK: case DEMOD_TYPE_DPSK:
modem_reset(demodDPSK); //modem_reset(demodDPSK);
break; break;
case DEMOD_TYPE_PSK: case DEMOD_TYPE_PSK:
modem_reset(demodPSK); //modem_reset(demodPSK);
break; break;
case DEMOD_TYPE_OOK: case DEMOD_TYPE_OOK:
modem_reset(demodOOK); //modem_reset(demodOOK);
break; break;
case DEMOD_TYPE_SQAM: case DEMOD_TYPE_SQAM:
modem_reset(demodSQAM); //modem_reset(demodSQAM);
break; break;
case DEMOD_TYPE_ST: case DEMOD_TYPE_ST:
modem_reset(demodST); //modem_reset(demodST);
break; break;
case DEMOD_TYPE_QAM: case DEMOD_TYPE_QAM:
modem_reset(demodQAM); //modem_reset(demodQAM);
break; break;
case DEMOD_TYPE_QPSK: case DEMOD_TYPE_QPSK:
modem_reset(demodQPSK); //modem_reset(demodQPSK);
break; break;
default:
// empty default to prevent exceptions
break;
} }
demodulatorType = newDemodType; demodulatorType = newDemodType;
} }
} }
demodOutputDataDigital.empty();
inp->decRefCount(); inp->decRefCount();
} }
// end while !terminated
if (audioResampler != NULL) { if (audioResampler != NULL) {
msresamp_rrrf_destroy(audioResampler); msresamp_rrrf_destroy(audioResampler);