mirror of
https://github.com/g4klx/MMDVM.git
synced 2026-10-25 02:45:00 +01:00
Update 48k version
In to NXDN possible problem on sinc filter anc isinc filter, think they must be recalculated but do not know how to do it. On D-STAR, DMR, C4FM and P25 it work.
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
/*
|
||||
* Copyright (C) 2015,2016 by Jonathan Naylor G4KLX
|
||||
* Copyright (C) 2015,2016,2017 by Jonathan Naylor G4KLX
|
||||
* Copyright (C) 2018 by Bryan Biedenkapp <gatekeep@gmail.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
@@ -24,35 +25,50 @@
|
||||
|
||||
enum P25RX_STATE {
|
||||
P25RXS_NONE,
|
||||
P25RXS_DATA
|
||||
P25RXS_HDR,
|
||||
P25RXS_LDU
|
||||
};
|
||||
|
||||
class CP25RX {
|
||||
public:
|
||||
CP25RX();
|
||||
|
||||
void samples(const q15_t* samples, uint8_t length);
|
||||
void samples(const q15_t* samples, uint16_t* rssi, uint8_t length);
|
||||
|
||||
void reset();
|
||||
|
||||
private:
|
||||
uint32_t m_pll;
|
||||
bool m_prev;
|
||||
P25RX_STATE m_state;
|
||||
uint32_t m_symbolBuffer;
|
||||
uint64_t m_bitBuffer;
|
||||
q15_t m_symbols[P25_SYNC_LENGTH_SYMBOLS];
|
||||
uint8_t m_outBuffer[P25_LDU_FRAME_LENGTH_BYTES + 3U];
|
||||
uint8_t* m_buffer;
|
||||
uint16_t m_bufferPtr;
|
||||
uint16_t m_symbolPtr;
|
||||
uint32_t m_bitBuffer[P25_RADIO_SYMBOL_LENGTH];
|
||||
q15_t m_buffer[P25_LDU_FRAME_LENGTH_SAMPLES];
|
||||
uint16_t m_bitPtr;
|
||||
uint16_t m_dataPtr;
|
||||
uint16_t m_hdrStartPtr;
|
||||
uint16_t m_lduStartPtr;
|
||||
uint16_t m_lduEndPtr;
|
||||
uint16_t m_minSyncPtr;
|
||||
uint16_t m_maxSyncPtr;
|
||||
uint16_t m_hdrSyncPtr;
|
||||
uint16_t m_lduSyncPtr;
|
||||
q31_t m_maxCorr;
|
||||
uint16_t m_lostCount;
|
||||
q15_t m_centre;
|
||||
q15_t m_threshold;
|
||||
uint8_t m_countdown;
|
||||
q15_t m_centre[16U];
|
||||
q15_t m_centreVal;
|
||||
q15_t m_threshold[16U];
|
||||
q15_t m_thresholdVal;
|
||||
uint8_t m_averagePtr;
|
||||
uint32_t m_rssiAccum;
|
||||
uint16_t m_rssiCount;
|
||||
uint8_t m_duid;
|
||||
|
||||
void processNone(q15_t sample);
|
||||
void processData(q15_t sample);
|
||||
void processHdr(q15_t sample);
|
||||
void processLdu(q15_t sample);
|
||||
bool correlateSync();
|
||||
void calculateLevels(uint16_t start, uint16_t count);
|
||||
void samplesToBits(uint16_t start, uint16_t count, uint8_t* buffer, uint16_t offset, q15_t centre, q15_t threshold);
|
||||
void writeRSSILdu(uint8_t* ldu);
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
Reference in New Issue
Block a user