mirror of
https://github.com/cjcliffe/CubicSDR.git
synced 2024-11-22 11:49:38 -05:00
More squelch tweaks; include I/Q dB and compare to audio for peak
This commit is contained in:
parent
606d41bc30
commit
6ea2b5b8e8
@ -130,19 +130,27 @@ void DemodulatorThread::run() {
|
|||||||
cModem->demodulate(cModemKit, &modemData, ati);
|
cModem->demodulate(cModemKit, &modemData, ati);
|
||||||
|
|
||||||
float currentSignalLevel = 0;
|
float currentSignalLevel = 0;
|
||||||
float accum = 0;
|
|
||||||
float sampleTime = float(inp->data.size()) / float(inp->sampleRate);
|
float sampleTime = float(inp->data.size()) / float(inp->sampleRate);
|
||||||
|
|
||||||
if (audioOutputQueue != nullptr && ati && ati->data.size()) {
|
if (audioOutputQueue != nullptr && ati && ati->data.size()) {
|
||||||
for (std::vector<float>::iterator i = ati->data.begin(); i != ati->data.end(); i++) {
|
float accum = 0;
|
||||||
accum += abMagnitude(0.948059448969, 0.392699081699, *i, 0.0);
|
|
||||||
|
for (auto i : ati->data) {
|
||||||
|
accum += abMagnitude(0.948059448969, 0.392699081699, i, 0.0);
|
||||||
}
|
}
|
||||||
|
|
||||||
currentSignalLevel = linearToDb(accum / float(inp->data.size()));
|
float audioSignalLevel = linearToDb(accum / float(ati->data.size()));
|
||||||
if (currentSignalLevel < DEMOD_SIGNAL_MIN+1) {
|
|
||||||
currentSignalLevel = DEMOD_SIGNAL_MIN+1;
|
accum = 0;
|
||||||
|
|
||||||
|
for (auto i : inp->data) {
|
||||||
|
accum += abMagnitude(0.948059448969, 0.392699081699, i.real, i.imag);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
float iqSignalLevel = linearToDb(accum / float(inp->data.size()));
|
||||||
|
|
||||||
|
currentSignalLevel = iqSignalLevel>audioSignalLevel?iqSignalLevel:audioSignalLevel;
|
||||||
|
|
||||||
float sf = signalFloor.load(), sc = signalCeil.load(), sl = squelchLevel.load();
|
float sf = signalFloor.load(), sc = signalCeil.load(), sl = squelchLevel.load();
|
||||||
|
|
||||||
if (currentSignalLevel > sc) {
|
if (currentSignalLevel > sc) {
|
||||||
@ -161,7 +169,7 @@ void DemodulatorThread::run() {
|
|||||||
sc = sf+2.0f;
|
sc = sf+2.0f;
|
||||||
}
|
}
|
||||||
|
|
||||||
sc -= (sc - (currentSignalLevel + 2.0f)) * sampleTime * 0.15f;
|
sc -= (sc - (currentSignalLevel + 2.0f)) * sampleTime * 0.05f;
|
||||||
sf += ((currentSignalLevel - 5.0f) - sf) * sampleTime * 0.15f;
|
sf += ((currentSignalLevel - 5.0f) - sf) * sampleTime * 0.15f;
|
||||||
|
|
||||||
signalFloor.store(sf);
|
signalFloor.store(sf);
|
||||||
@ -169,9 +177,9 @@ void DemodulatorThread::run() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (currentSignalLevel > signalLevel) {
|
if (currentSignalLevel > signalLevel) {
|
||||||
signalLevel = signalLevel + (currentSignalLevel - signalLevel) * 0.5 * sampleTime * 10.0;
|
signalLevel = signalLevel + (currentSignalLevel - signalLevel) * 0.5;
|
||||||
} else {
|
} else {
|
||||||
signalLevel = signalLevel + (currentSignalLevel - signalLevel) * 0.05 * sampleTime * 10.0;
|
signalLevel = signalLevel + (currentSignalLevel - signalLevel) * 0.05 * sampleTime * 30.0;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool squelched = (squelchEnabled && (signalLevel < squelchLevel));
|
bool squelched = (squelchEnabled && (signalLevel < squelchLevel));
|
||||||
@ -191,8 +199,8 @@ void DemodulatorThread::run() {
|
|||||||
if (audioOutputQueue != nullptr && ati && ati->data.size() && !squelched) {
|
if (audioOutputQueue != nullptr && ati && ati->data.size() && !squelched) {
|
||||||
std::vector<float>::iterator data_i;
|
std::vector<float>::iterator data_i;
|
||||||
ati->peak = 0;
|
ati->peak = 0;
|
||||||
for (data_i = ati->data.begin(); data_i != ati->data.end(); data_i++) {
|
for (auto data_i : ati->data) {
|
||||||
float p = fabs(*data_i);
|
float p = fabs(data_i);
|
||||||
if (p > ati->peak) {
|
if (p > ati->peak) {
|
||||||
ati->peak = p;
|
ati->peak = p;
|
||||||
}
|
}
|
||||||
|
@ -313,7 +313,7 @@ void SpectrumVisualProcessor::process() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (!resampler || resampleBw != lastBandwidth || lastInputBandwidth != iqData->sampleRate) {
|
if (!resampler || resampleBw != lastBandwidth || lastInputBandwidth != iqData->sampleRate) {
|
||||||
float As = 60.0f;
|
float As = 120.0f;
|
||||||
|
|
||||||
if (resampler) {
|
if (resampler) {
|
||||||
msresamp_crcf_destroy(resampler);
|
msresamp_crcf_destroy(resampler);
|
||||||
|
Loading…
Reference in New Issue
Block a user