mirror of https://github.com/g4klx/MMDVM.git
Merge pull request #123 from juribeparada/boxcar_dstar_correlator_48k
More changes for 48 kHz
This commit is contained in:
commit
a7aade4d81
|
@ -22,12 +22,12 @@
|
||||||
#include "CWIdTX.h"
|
#include "CWIdTX.h"
|
||||||
|
|
||||||
q15_t TONE[] = {
|
q15_t TONE[] = {
|
||||||
0, 518, 1000, 1414, 1732, 1932, 2000, 1932, 1732, 1414, 1000, 518, 0, -518, -1000, -1414, -1732, -1932, -2000, -1932, -1732, -1414, -1000, -518};
|
0, 261, 518, 765, 1000, 1218, 1414, 1587, 1732, 1848, 1932, 1983, 2000, 1983, 1932, 1848, 1732, 1587, 1414, 1218, 1000, 765, 518, 261, 0, -261, -518, -765, -1000, -1218, -1414,
|
||||||
|
-1587, -1732, -1848, -1932, -1983, -2000, -1983, -1932, -1848, -1732, -1587, -1414, -1218, -1000, -765, -518, -261};
|
||||||
q15_t SILENCE[] = {
|
q15_t SILENCE[] = {
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
|
||||||
|
|
||||||
const uint8_t CYCLE_LENGTH = 24U;
|
const uint8_t CYCLE_LENGTH = 48U;
|
||||||
|
|
||||||
const uint8_t DOT_LENGTH = 50U;
|
const uint8_t DOT_LENGTH = 50U;
|
||||||
|
|
||||||
|
|
|
@ -22,7 +22,7 @@
|
||||||
#include "Config.h"
|
#include "Config.h"
|
||||||
#include "DMRDefines.h"
|
#include "DMRDefines.h"
|
||||||
|
|
||||||
const uint16_t DMO_BUFFER_LENGTH_SAMPLES = 1440U; // 60ms at 24 kHz
|
const uint16_t DMO_BUFFER_LENGTH_SAMPLES = 2880U; // 60ms at 48 kHz
|
||||||
|
|
||||||
enum DMORX_STATE {
|
enum DMORX_STATE {
|
||||||
DMORXS_NONE,
|
DMORXS_NONE,
|
||||||
|
|
|
@ -22,8 +22,8 @@
|
||||||
#include "DMRSlotType.h"
|
#include "DMRSlotType.h"
|
||||||
#include "Utils.h"
|
#include "Utils.h"
|
||||||
|
|
||||||
const uint16_t SCAN_START = 400U;
|
const uint16_t SCAN_START = 790U;
|
||||||
const uint16_t SCAN_END = 490U;
|
const uint16_t SCAN_END = 920U;
|
||||||
|
|
||||||
const q15_t SCALING_FACTOR = 19505; // Q15(0.60)
|
const q15_t SCALING_FACTOR = 19505; // Q15(0.60)
|
||||||
|
|
||||||
|
@ -97,7 +97,7 @@ bool CDMRSlotRX::processSample(q15_t sample, uint16_t rssi)
|
||||||
return m_state != DMRRXS_NONE;
|
return m_state != DMRRXS_NONE;
|
||||||
|
|
||||||
// Ensure that the buffer doesn't overflow
|
// Ensure that the buffer doesn't overflow
|
||||||
if (m_dataPtr > m_endPtr || m_dataPtr >= 900U)
|
if (m_dataPtr > m_endPtr || m_dataPtr >= 1900U)
|
||||||
return m_state != DMRRXS_NONE;
|
return m_state != DMRRXS_NONE;
|
||||||
|
|
||||||
m_buffer[m_dataPtr] = sample;
|
m_buffer[m_dataPtr] = sample;
|
||||||
|
|
|
@ -44,7 +44,7 @@ public:
|
||||||
private:
|
private:
|
||||||
bool m_slot;
|
bool m_slot;
|
||||||
uint32_t m_bitBuffer[DMR_RADIO_SYMBOL_LENGTH];
|
uint32_t m_bitBuffer[DMR_RADIO_SYMBOL_LENGTH];
|
||||||
q15_t m_buffer[900U];
|
q15_t m_buffer[1900U];
|
||||||
uint16_t m_bitPtr;
|
uint16_t m_bitPtr;
|
||||||
uint16_t m_dataPtr;
|
uint16_t m_dataPtr;
|
||||||
uint16_t m_syncPtr;
|
uint16_t m_syncPtr;
|
||||||
|
@ -62,7 +62,7 @@ private:
|
||||||
DMRRX_STATE m_state;
|
DMRRX_STATE m_state;
|
||||||
uint8_t m_n;
|
uint8_t m_n;
|
||||||
uint8_t m_type;
|
uint8_t m_type;
|
||||||
uint16_t m_rssi[900U];
|
uint16_t m_rssi[1900U];
|
||||||
|
|
||||||
void correlateSync(bool first);
|
void correlateSync(bool first);
|
||||||
void samplesToBits(uint16_t start, uint8_t count, uint8_t* buffer, uint16_t offset, q15_t centre, q15_t threshold);
|
void samplesToBits(uint16_t start, uint8_t count, uint8_t* buffer, uint16_t offset, q15_t centre, q15_t threshold);
|
||||||
|
|
|
@ -381,10 +381,10 @@ void CDStarRX::processHeader(q15_t sample)
|
||||||
m_frameCount = 0U;
|
m_frameCount = 0U;
|
||||||
m_dataPtr = 0U;
|
m_dataPtr = 0U;
|
||||||
|
|
||||||
m_startPtr = 476U;
|
m_startPtr = 952U;
|
||||||
m_syncPtr = 471U;
|
m_syncPtr = 942U;
|
||||||
m_maxSyncPtr = 472U;
|
m_maxSyncPtr = 944U;
|
||||||
m_minSyncPtr = 470U;
|
m_minSyncPtr = 940U;
|
||||||
|
|
||||||
DEBUG5("DStarRX: calc start/sync/max/min", m_startPtr, m_syncPtr, m_maxSyncPtr, m_minSyncPtr);
|
DEBUG5("DStarRX: calc start/sync/max/min", m_startPtr, m_syncPtr, m_maxSyncPtr, m_minSyncPtr);
|
||||||
|
|
||||||
|
|
6
IO.cpp
6
IO.cpp
|
@ -167,7 +167,7 @@ void CIO::process()
|
||||||
m_ledCount++;
|
m_ledCount++;
|
||||||
if (m_started) {
|
if (m_started) {
|
||||||
// Two seconds timeout
|
// Two seconds timeout
|
||||||
if (m_watchdog >= 48000U) {
|
if (m_watchdog >= 96000U) {
|
||||||
if (m_modemState == STATE_DSTAR || m_modemState == STATE_DMR || m_modemState == STATE_YSF) {
|
if (m_modemState == STATE_DSTAR || m_modemState == STATE_DMR || m_modemState == STATE_YSF) {
|
||||||
if (m_modemState == STATE_DMR && m_tx)
|
if (m_modemState == STATE_DMR && m_tx)
|
||||||
dmrTX.setStart(false);
|
dmrTX.setStart(false);
|
||||||
|
@ -178,13 +178,13 @@ void CIO::process()
|
||||||
m_watchdog = 0U;
|
m_watchdog = 0U;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (m_ledCount >= 24000U) {
|
if (m_ledCount >= 48000U) {
|
||||||
m_ledCount = 0U;
|
m_ledCount = 0U;
|
||||||
m_ledValue = !m_ledValue;
|
m_ledValue = !m_ledValue;
|
||||||
setLEDInt(m_ledValue);
|
setLEDInt(m_ledValue);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (m_ledCount >= 240000U) {
|
if (m_ledCount >= 480000U) {
|
||||||
m_ledCount = 0U;
|
m_ledCount = 0U;
|
||||||
m_ledValue = !m_ledValue;
|
m_ledValue = !m_ledValue;
|
||||||
setLEDInt(m_ledValue);
|
setLEDInt(m_ledValue);
|
||||||
|
|
|
@ -642,12 +642,13 @@ void CIO::startInt()
|
||||||
// TIM2 output frequency
|
// TIM2 output frequency
|
||||||
#if defined(EXTERNAL_OSC) && !defined(STM32F4_PI)
|
#if defined(EXTERNAL_OSC) && !defined(STM32F4_PI)
|
||||||
timerInitStructure.TIM_Prescaler = (uint16_t) ((EXTERNAL_OSC/(2*SAMP_FREQ)) - 1);
|
timerInitStructure.TIM_Prescaler = (uint16_t) ((EXTERNAL_OSC/(2*SAMP_FREQ)) - 1);
|
||||||
|
timerInitStructure.TIM_Period = 1;
|
||||||
#else
|
#else
|
||||||
timerInitStructure.TIM_Prescaler = (uint16_t) ((SystemCoreClock/(4*SAMP_FREQ)) - 1);
|
timerInitStructure.TIM_Prescaler = (uint16_t) ((SystemCoreClock/(6*SAMP_FREQ)) - 1);
|
||||||
|
timerInitStructure.TIM_Period = 2;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
timerInitStructure.TIM_CounterMode = TIM_CounterMode_Up;
|
timerInitStructure.TIM_CounterMode = TIM_CounterMode_Up;
|
||||||
timerInitStructure.TIM_Period = 1;
|
|
||||||
timerInitStructure.TIM_ClockDivision = TIM_CKD_DIV1;
|
timerInitStructure.TIM_ClockDivision = TIM_CKD_DIV1;
|
||||||
timerInitStructure.TIM_RepetitionCounter = 0;
|
timerInitStructure.TIM_RepetitionCounter = 0;
|
||||||
TIM_TimeBaseInit(TIM2, &timerInitStructure);
|
TIM_TimeBaseInit(TIM2, &timerInitStructure);
|
||||||
|
|
|
@ -73,9 +73,9 @@ const uint8_t MMDVM_DEBUG5 = 0xF5U;
|
||||||
|
|
||||||
|
|
||||||
#if defined(EXTERNAL_OSC)
|
#if defined(EXTERNAL_OSC)
|
||||||
#define DESCRIPTION "MMDVM 20170501 TCXO (D-Star/DMR/System Fusion/P25/RSSI/CW Id)"
|
#define DESCRIPTION "MMDVM 20170501 TCXO 48kHz (D-Star/DMR/YSF/P25/RSSI/CW Id)"
|
||||||
#else
|
#else
|
||||||
#define DESCRIPTION "MMDVM 20170501 (D-Star/DMR/System Fusion/P25/RSSI/CW Id)"
|
#define DESCRIPTION "MMDVM 20170501 48kHz (D-Star/DMR/YSF/P25/RSSI/CW Id)"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(GITVERSION)
|
#if defined(GITVERSION)
|
||||||
|
@ -668,7 +668,7 @@ void CSerialPort::process()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (io.getWatchdog() >= 48000U) {
|
if (io.getWatchdog() >= 96000U) {
|
||||||
m_ptr = 0U;
|
m_ptr = 0U;
|
||||||
m_len = 0U;
|
m_len = 0U;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue