mirror of
https://github.com/f4exb/sdrangel.git
synced 2024-11-21 15:51:47 -05:00
More Sonar bug fixes
This commit is contained in:
parent
02babd5ff8
commit
28262ca5fb
@ -2006,6 +2006,9 @@ void FT8::soft_decode_mags(FT8Params& params, const std::vector<std::vector<floa
|
||||
ll174[lli++] = ll;
|
||||
}
|
||||
}
|
||||
|
||||
delete[] zeroi;
|
||||
delete[] onei;
|
||||
}
|
||||
|
||||
//
|
||||
|
@ -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];
|
||||
}
|
||||
|
@ -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
|
||||
|
@ -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)
|
||||
|
@ -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) {
|
||||
|
@ -128,12 +128,14 @@ int main(int argc, char **argv)
|
||||
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},
|
||||
"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}};
|
||||
"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++;
|
||||
|
@ -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)
|
||||
|
@ -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
|
||||
|
@ -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}')
|
||||
|
||||
# ======================================================================
|
||||
|
@ -370,8 +370,14 @@ 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.
|
||||
if (UnityGain)
|
||||
|
@ -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];
|
||||
|
@ -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))
|
||||
|
10
wdsp/fir.cpp
10
wdsp/fir.cpp
@ -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;
|
||||
}
|
||||
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user