kopia lustrzana https://github.com/f4exb/sdrangel
				
				
				
			More Sonar bug fixes
							rodzic
							
								
									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) {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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++;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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}')
 | 
			
		||||
 | 
			
		||||
# ======================================================================
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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())
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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.
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Ładowanie…
	
		Reference in New Issue