More Sonar bug fixes

pull/2217/head
f4exb 2024-07-21 14:20:48 +02:00
rodzic 02babd5ff8
commit 28262ca5fb
16 zmienionych plików z 85 dodań i 32 usunięć

Wyświetl plik

@ -2006,6 +2006,9 @@ void FT8::soft_decode_mags(FT8Params& params, const std::vector<std::vector<floa
ll174[lli++] = ll;
}
}
delete[] zeroi;
delete[] onei;
}
//

Wyświetl plik

@ -370,9 +370,9 @@ void LDPC::ft8_crc(int msg1[], int msglen, int out[14])
// the new FT8 polynomial for 14-bit CRC, 0x2757,
// with leading 1 bit.
int div[] = {1, 1, 0, 0, 1, 1, 1, 0, 1, 0, 1, 0, 1, 1, 1};
// append 14 zeros.
int *msg = (int *)malloc(sizeof(int) * (msglen + 14));
for (int i = 0; i < msglen + 14; i++)
{
if (i < msglen)
@ -396,7 +396,7 @@ void LDPC::ft8_crc(int msg1[], int msglen, int out[14])
}
}
for (int i = 0; i < 14; i++)
for (int i = 0; i < msglen + 14; i++)
{
out[i] = msg[msglen + i];
}

Wyświetl plik

@ -90,8 +90,8 @@ private:
// Top area of each buffer is not used by writer, as it's used by the reader
// for copying the last few samples of the previous buffer, so it can
// be processed contiguously
const int m_buffers = 3;
const int m_bufferSize = 200000;
static const int m_buffers = 3;
static const int m_bufferSize = 200000;
Real *m_sampleBuffer[3]; //!< Each buffer is m_bufferSize samples
QSemaphore m_bufferWrite[3]; //!< Semaphore to control write access to the buffers
QSemaphore m_bufferRead[3]; //!< Semaphore to control read access from the buffers

Wyświetl plik

@ -43,9 +43,14 @@ class LDPCEncoder
return b < TYPE(0) ? -a : b > TYPE(0) ? a : TYPE(0);
}
public:
LDPCEncoder() : initialized(false)
LDPCEncoder() :
N(2),
K(1),
R(1),
initialized(false)
{
}
void init(LDPCInterface *it)
{
if (initialized)

Wyświetl plik

@ -77,6 +77,7 @@ public:
template <typename TYPE, typename ALG>
class LDPCDecoder
{
private:
TYPE *bnl, *pty, *inp, *out;
uint16_t *pos;
uint8_t *cnc;
@ -89,6 +90,7 @@ class LDPCDecoder
for (int i = 0; i < LT; ++i)
bnl[i] = alg.zero();
}
bool bad(TYPE *data, TYPE *parity, int blocks)
{
for (int i = 0; i < q; ++i) {
@ -107,6 +109,7 @@ class LDPCDecoder
}
return false;
}
void update(TYPE *data, TYPE *parity)
{
TYPE *bl = bnl;
@ -135,10 +138,26 @@ class LDPCDecoder
}
}
}
public:
LDPCDecoder() : initialized(false)
LDPCDecoder() :
bnl(nullptr),
pty(nullptr),
inp(nullptr),
out(nullptr),
pos(nullptr),
cnc(nullptr),
M(0),
N(0),
K(0),
R(0),
q(0),
CNL(0),
LT(0),
initialized(false)
{
}
void init(LDPCInterface *it)
{
if (initialized) {

Wyświetl plik

@ -124,16 +124,18 @@ int main(int argc, char **argv)
// DVB-S2 MODCOD definitions
static const char *mc_tabnames[2][32] = { // [shortframes][modcod]
{// Normal frames
0, "B1", "B2", "B3", "B4", "B5", "B6", "B7",
"B8", "B9", "B10", "B11", "B5", "B6", "B7", "B9",
"B10", "B11", "B6", "B7", "B8", "B9", "B10", "B11",
"B7", "B8", "B8", "B10", "B11", 0, 0, 0},
{// Short frames
0, "C1", "C2", "C3", "C4", "C5", "C6", "C7",
"C8", "C9", "C10", 0, "C5", "C6", "C7", "C9",
"C10", 0, "C6", "C7", "C8", "C9", "C10", 0,
"C7", "C8", "C8", "C10", 0, 0, 0, 0}};
{// Normal frames
0, "B1", "B2", "B3", "B4", "B5", "B6", "B7",
"B8", "B9", "B10", "B11", "B5", "B6", "B7", "B9",
"B10", "B11", "B6", "B7", "B8", "B9", "B10", "B11",
"B7", "B8", "B8", "B10", "B11", 0, 0, 0
},
{// Short frames
0, "C1", "C2", "C3", "C4", "C5", "C6", "C7",
"C8", "C9", "C10", 0, "C5", "C6", "C7", "C9",
"C10", 0, "C6", "C7", "C8", "C9", "C10", 0,
"C7", "C8", "C8", "C10", 0, 0, 0, 0
}};
const char *tabname = mc_tabnames[shortframes][modcod];
if (!tabname)
@ -188,8 +190,16 @@ int main(int argc, char **argv)
int blocks = j + ldpctool::SIMD_WIDTH > BLOCKS ? BLOCKS - j : ldpctool::SIMD_WIDTH;
for (int n = 0; n < blocks; ++n)
{
for (int i = 0; i < CODE_LEN; ++i)
{
if (((j + n) * CODE_LEN + i) >= BLOCKS * CODE_LEN) {
break;
}
reinterpret_cast<ldpctool::code_type *>(simd + i)[n] = code[(j + n) * CODE_LEN + i];
}
}
int count = decode(simd, simd + DATA_LEN, max_trials, blocks);
num_decodes++;

Wyświetl plik

@ -155,14 +155,12 @@ RadioAstronomy::~RadioAstronomy()
m_deviceAPI->removeChannelSinkAPI(this);
m_deviceAPI->removeChannelSink(this);
if (m_basebandSink->isRunning()) {
if ((m_basebandSink->isRunning()) || (m_worker->isRunning())) {
stop();
}
delete m_basebandSink;
if (m_worker->isRunning()) {
stop();
}
delete m_worker;
m_worker->deleteLater();
m_basebandSink->deleteLater();
}
void RadioAstronomy::setDeviceAPI(DeviceAPI *deviceAPI)

Wyświetl plik

@ -60,6 +60,9 @@ struct IEEE_802_15_4_MacFrame
IEEE_802_15_4_MacFrame()
{
m_destShortAddress = 0;
m_sourceShortAddress = 0;
if (false)
{
// Example ACK frame

Wyświetl plik

@ -14,7 +14,7 @@ except ImportError:
import _thread as thread
import time
from datetime import datetime
from datetime import datetime, timezone
from optparse import OptionParser
import sdrangel
@ -50,7 +50,7 @@ class SuperScannerAPIError(SuperScannerError):
# ======================================================================
def log_with_timestamp(message):
t = datetime.utcnow()
t = datetime.now(timezone.utc)
print(f'{t.isoformat()} {message}')
# ======================================================================

Wyświetl plik

@ -143,7 +143,7 @@ void SigMFFileRecord::setFileName(const QString& fileName)
}
m_initialBytesCount = (uint64_t) m_sampleFile.size();
m_sampleStart = m_initialBytesCount / ((1<<m_log2RecordSampleSize)/4); // sizeof(Sample);
if (!m_metaFile.open(QIODevice::WriteOnly | QIODevice::Append))
{
qWarning() << "SigMFFileRecord::setFileName: failed to open file: " << m_metaFile.fileName();
@ -218,7 +218,7 @@ bool SigMFFileRecord::stopRecording()
{
if (m_recordOn)
{
qDebug("SigMFFileRecord::stopRecording: file previous capture");
qDebug("SigMFFileRecord::stopRecording: file previous capture");
makeCapture();
m_recordOn = false;
if (m_sampleFile.error())

Wyświetl plik

@ -370,7 +370,13 @@ void WFIR::WindowData(double *Data, int N, TWindowType WindowType, double Alpha,
if (WindowType != wtKAISER && WindowType != wtFLATTOP)
{
for (j = M / 2; j < N - M / 2; j++)
{
if (j >= N + 2) {
break;
}
WinCoeff[j] = 1.0;
}
}
// This will set the gain of the window to 1. Only the Flattop window has unity gain by design.

Wyświetl plik

@ -117,7 +117,6 @@ void CFCOMP::calc_comp (CFCOMP *a)
a->G[i] = sary[3 * i + 1];
a->E[i] = sary[3 * i + 2];
}
delete[] (sary);
a->fp[0] = 0.0;
a->fp[a->nfreqs + 1] = fmax;
a->gp[0] = a->G[0];

Wyświetl plik

@ -230,7 +230,7 @@ void EMNR::interpM (double* res, double x, int nvals, double* xvals, double* yva
}
else
{
int idx = 0;
int idx = 1;
double xllow, xlhigh, frac;
while ((x >= xvals[idx]) && (idx < nvals - 1))

Wyświetl plik

@ -317,10 +317,15 @@ float *FIR::fir_read (int N, const char *filename, int rtype, float scale)
void FIR::analytic (int N, float* in, float* out)
{
if (N < 1) {
return;
}
int i;
double inv_N = 1.0 / (double) N;
double two_inv_N = 2.0 * inv_N;
float* x = new float[N * 2]; // (float *) malloc0 (N * sizeof (complex));
fftwf_plan pfor = fftwf_plan_dft_1d (
N,
(fftwf_complex *) in,
@ -328,6 +333,7 @@ void FIR::analytic (int N, float* in, float* out)
FFTW_FORWARD,
FFTW_PATIENT
);
fftwf_plan prev = fftwf_plan_dft_1d (
N,
(fftwf_complex *) x,
@ -335,20 +341,24 @@ void FIR::analytic (int N, float* in, float* out)
FFTW_BACKWARD,
FFTW_PATIENT
);
fftwf_execute (pfor);
x[0] *= inv_N;
x[1] *= inv_N;
for (i = 1; i < N / 2; i++)
{
x[2 * i + 0] *= two_inv_N;
x[2 * i + 1] *= two_inv_N;
}
x[N + 0] *= inv_N;
x[N + 1] *= inv_N;
memset (&x[N + 2], 0, (N - 2) * sizeof (float));
fftwf_execute (prev);
fftwf_destroy_plan (prev);
fftwf_destroy_plan (pfor);
delete[] x;
}

Wyświetl plik

@ -60,8 +60,8 @@ void RESAMPLE::calc_resample (RESAMPLE *a)
a->L = a->out_rate / x;
a->M = a->in_rate / x;
a->L <= 0 ? 1 : a->L;
a->M <= 0 ? 1 : a->M;
a->L = a->L <= 0 ? 1 : a->L;
a->M = a->M <= 0 ? 1 : a->M;
if (a->in_rate < a->out_rate)
min_rate = a->in_rate;

Wyświetl plik

@ -64,8 +64,8 @@ RESAMPLEF* RESAMPLEF::create_resampleF ( int run, int size, float* in, float* ou
a->L = out_rate / x;
a->M = in_rate / x;
a->L <= 0 ? 1 : a->L;
a->M <= 0 ? 1 : a->M;
a->L = a->L <= 0 ? 1 : a->L;
a->M = a->M <= 0 ? 1 : a->M;
if (in_rate < out_rate)
min_rate = in_rate;