mirror of
https://github.com/cjcliffe/CubicSDR.git
synced 2026-06-01 13:44:56 -04:00
FSK tweaks, minimum bandwidth adjust
This commit is contained in:
@@ -6,6 +6,8 @@
|
||||
#include <cmath>
|
||||
#include <atomic>
|
||||
|
||||
#define MIN_BANDWIDTH 500
|
||||
|
||||
class ModemKit {
|
||||
public:
|
||||
ModemKit() : sampleRate(0), audioSampleRate(0) {
|
||||
|
||||
@@ -9,8 +9,8 @@ std::string ModemAnalog::getType() {
|
||||
}
|
||||
|
||||
int ModemAnalog::checkSampleRate(long long sampleRate, int audioSampleRate) {
|
||||
if (sampleRate < 1500) {
|
||||
return 1500;
|
||||
if (sampleRate < MIN_BANDWIDTH) {
|
||||
return MIN_BANDWIDTH;
|
||||
}
|
||||
return sampleRate;
|
||||
}
|
||||
|
||||
@@ -20,8 +20,8 @@ std::string ModemDigital::getType() {
|
||||
}
|
||||
|
||||
int ModemDigital::checkSampleRate(long long sampleRate, int audioSampleRate) {
|
||||
if (sampleRate < 1500) {
|
||||
return 1500;
|
||||
if (sampleRate < MIN_BANDWIDTH) {
|
||||
return MIN_BANDWIDTH;
|
||||
}
|
||||
return sampleRate;
|
||||
}
|
||||
|
||||
@@ -20,8 +20,8 @@ ModemLSB::~ModemLSB() {
|
||||
}
|
||||
|
||||
int ModemLSB::checkSampleRate(long long sampleRate, int audioSampleRate) {
|
||||
if (sampleRate < 1500) {
|
||||
return 1500;
|
||||
if (sampleRate < MIN_BANDWIDTH) {
|
||||
return MIN_BANDWIDTH;
|
||||
}
|
||||
if (sampleRate % 2 == 0) {
|
||||
return sampleRate;
|
||||
|
||||
@@ -20,8 +20,8 @@ ModemUSB::~ModemUSB() {
|
||||
}
|
||||
|
||||
int ModemUSB::checkSampleRate(long long sampleRate, int audioSampleRate) {
|
||||
if (sampleRate < 1500) {
|
||||
return 1500;
|
||||
if (sampleRate < MIN_BANDWIDTH) {
|
||||
return MIN_BANDWIDTH;
|
||||
}
|
||||
if (sampleRate % 2 == 0) {
|
||||
return sampleRate;
|
||||
|
||||
@@ -5,6 +5,7 @@ ModemFSK::ModemFSK() : ModemDigital() {
|
||||
// DMR defaults?
|
||||
bps = 1;
|
||||
sps = 9600;
|
||||
bw = 0.45;
|
||||
outStream << std::hex;
|
||||
}
|
||||
|
||||
@@ -35,6 +36,7 @@ ModemArgInfoList ModemFSK::getSettings() {
|
||||
bpsArg.value = std::to_string(bps);
|
||||
bpsArg.description = "Modem bits-per-symbol";
|
||||
bpsArg.type = ModemArgInfo::STRING;
|
||||
bpsArg.units = "bits";
|
||||
|
||||
std::vector<std::string> bpsOpts;
|
||||
bpsOpts.push_back("1");
|
||||
@@ -51,21 +53,20 @@ ModemArgInfoList ModemFSK::getSettings() {
|
||||
spsArg.name = "Symbols/second";
|
||||
spsArg.value = std::to_string(sps);
|
||||
spsArg.description = "Modem symbols-per-second";
|
||||
spsArg.type = ModemArgInfo::STRING;
|
||||
|
||||
spsArg.type = ModemArgInfo::INT;
|
||||
spsArg.range = ModemRange(10,115200);
|
||||
std::vector<std::string> spsOpts;
|
||||
// some common modem rates ..?
|
||||
spsOpts.push_back("300");
|
||||
spsOpts.push_back("600");
|
||||
spsOpts.push_back("1200");
|
||||
spsOpts.push_back("2400");
|
||||
spsOpts.push_back("4800");
|
||||
spsOpts.push_back("9600");
|
||||
spsOpts.push_back("19200");
|
||||
spsOpts.push_back("38400");
|
||||
spsArg.options = spsOpts;
|
||||
|
||||
args.push_back(spsArg);
|
||||
|
||||
ModemArgInfo bwArg;
|
||||
bwArg.key = "bw";
|
||||
bwArg.name = "Signal bandwidth";
|
||||
bwArg.value = std::to_string(bw);
|
||||
bwArg.description = "Total signal bandwidth";
|
||||
bwArg.type = ModemArgInfo::FLOAT;
|
||||
bwArg.range = ModemRange(0.1,0.49);
|
||||
args.push_back(bwArg);
|
||||
|
||||
return args;
|
||||
}
|
||||
@@ -77,6 +78,9 @@ void ModemFSK::writeSetting(std::string setting, std::string value) {
|
||||
} else if (setting == "sps") {
|
||||
sps = std::stoi(value);
|
||||
rebuildKit();
|
||||
} else if (setting == "bw") {
|
||||
bw = std::stof(value);
|
||||
rebuildKit();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -85,6 +89,8 @@ std::string ModemFSK::readSetting(std::string setting) {
|
||||
return std::to_string(bps);
|
||||
} else if (setting == "sps") {
|
||||
return std::to_string(sps);
|
||||
} else if (setting == "bw") {
|
||||
return std::to_string(bw);
|
||||
}
|
||||
return "";
|
||||
}
|
||||
@@ -93,8 +99,9 @@ ModemKit *ModemFSK::buildKit(long long sampleRate, int audioSampleRate) {
|
||||
ModemKitFSK *dkit = new ModemKitFSK;
|
||||
dkit->m = bps;
|
||||
dkit->k = sampleRate / sps;
|
||||
dkit->bw = bw;
|
||||
|
||||
dkit->demodFSK = fskdem_create(dkit->m, dkit->k, 0.45);
|
||||
dkit->demodFSK = fskdem_create(dkit->m, dkit->k, dkit->bw);
|
||||
|
||||
dkit->sampleRate = sampleRate;
|
||||
dkit->audioSampleRate = audioSampleRate;
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
class ModemKitFSK : public ModemKitDigital {
|
||||
public:
|
||||
unsigned int m, k;
|
||||
float bw;
|
||||
|
||||
fskdem demodFSK;
|
||||
std::vector<liquid_float_complex> inputBuffer;
|
||||
@@ -33,7 +34,7 @@ public:
|
||||
void demodulate(ModemKit *kit, ModemIQData *input, AudioThreadInput *audioOut);
|
||||
|
||||
private:
|
||||
int sps;
|
||||
int bps;
|
||||
int sps, bps;
|
||||
float bw;
|
||||
};
|
||||
|
||||
|
||||
@@ -21,8 +21,8 @@ Modem *ModemGMSK::factory() {
|
||||
}
|
||||
|
||||
int ModemGMSK::checkSampleRate(long long sampleRate, int audioSampleRate) {
|
||||
if (sampleRate < 1500) {
|
||||
return 1500;
|
||||
if (sampleRate < MIN_BANDWIDTH) {
|
||||
return MIN_BANDWIDTH;
|
||||
}
|
||||
return sampleRate;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user