AGC Max gain - Максимальный уровень усиления при работе AРУ, дБ.

RX AGC Hold time и RX -  Время перед отпусканием усиления АРУ в пиках сигнала, мс
master
Антон 2022-05-08 15:16:50 +03:00
rodzic 87fdc95cca
commit 95f9444579
9 zmienionych plików z 36788 dodań i 36717 usunięć

Wyświetl plik

@ -29,7 +29,7 @@ void DoRxAGC(float32_t *agcBuffer, uint_fast16_t blockSize, uint_fast8_t mode)
}
else
{
RX_AGC_STEPSIZE_UP = 200.0f / (float32_t)TRX.RX_AGC_SSB_speed;
RX_AGC_STEPSIZE_UP = 1000.0f / (float32_t)TRX.RX_AGC_SSB_speed;
RX_AGC_STEPSIZE_DOWN = 20.0f / (float32_t)TRX.RX_AGC_SSB_speed;
}
@ -110,8 +110,8 @@ void DoRxAGC(float32_t *agcBuffer, uint_fast16_t blockSize, uint_fast8_t mode)
AGC_RX_need_gain_db = -200.0f;
//gain limitation
if (AGC_RX_need_gain_db > AGC_MAX_GAIN)
AGC_RX_need_gain_db = AGC_MAX_GAIN;
if (AGC_RX_need_gain_db > (float32_t) TRX.RX_AGC_Max_gain) // AGC_MAX_GAIN;
AGC_RX_need_gain_db = (float32_t) TRX.RX_AGC_Max_gain; // AGC_MAX_GAIN;
//apply gain
//sendToDebug_float32(AGC_RX_need_gain_db, false);
@ -159,14 +159,14 @@ void DoTxAGC(float32_t *agcBuffer_i, uint_fast16_t blockSize, float32_t target,
case TRX_MODE_USB:
case TRX_MODE_LOOPBACK:
default:
TX_AGC_STEPSIZE_UP = 200.0f / (float32_t)TRX.TX_Compressor_speed_SSB; // ïî óìîë÷àíèþ TRX.TX_Compressor_speed_SSB 3.0f
TX_AGC_STEPSIZE_UP = 200.0f / (float32_t)TRX.TX_Compressor_speed_SSB; // ïî óìîë÷àíèþ TRX.TX_Compressor_speed_SSB 3.0f
TX_AGC_STEPSIZE_DOWN = 20.0f / (float32_t)TRX.TX_Compressor_speed_SSB; // ïî óìîë÷àíèþ TRX.TX_Compressor_speed_SSB 3.0f
break;
case TRX_MODE_NFM:
case TRX_MODE_WFM:
case TRX_MODE_AM:
TX_AGC_STEPSIZE_UP = 200.0f / (float32_t)TRX.TX_Compressor_speed_AMFM; // ïî óìîë÷àíèþ TRX.TX_Compressor_speed_AMFM 3.0f
TX_AGC_STEPSIZE_UP = 200.0f / (float32_t)TRX.TX_Compressor_speed_AMFM; // ïî óìîë÷àíèþ TRX.TX_Compressor_speed_AMFM 3.0f
TX_AGC_STEPSIZE_DOWN = 20.0f / (float32_t)TRX.TX_Compressor_speed_AMFM; // ïî óìîë÷àíèþ TRX.TX_Compressor_speed_AMFM 3.0f
break;
}
@ -228,14 +228,14 @@ void DoTxAGC(float32_t *agcBuffer_i, uint_fast16_t blockSize, float32_t target,
case TRX_MODE_LOOPBACK:
default:
if (*AGC_need_gain_db > TRX.TX_Compressor_maxgain_SSB) // TX_Compressor_maxgain_SSB áûëî ïî óìîë÷àíèþ 10.0f
*AGC_need_gain_db = TRX.TX_Compressor_maxgain_SSB; // TX_Compressor_maxgain_SSB áûëî ïî óìîë÷àíèþ 10.0f
*AGC_need_gain_db = TRX.TX_Compressor_maxgain_SSB; // TX_Compressor_maxgain_SSB áûëî ïî óìîë÷àíèþ 10.0f
break;
case TRX_MODE_NFM:
case TRX_MODE_WFM:
case TRX_MODE_AM:
if (*AGC_need_gain_db > TRX.TX_Compressor_maxgain_AMFM) // TX_Compressor_maxgain_AMFM
*AGC_need_gain_db = TRX.TX_Compressor_maxgain_AMFM; // TX_Compressor_maxgain_AMFM
*AGC_need_gain_db = TRX.TX_Compressor_maxgain_AMFM; // TX_Compressor_maxgain_AMFM
break;
}

Wyświetl plik

@ -241,6 +241,7 @@ void processRxAudio(void)
{
float32_t signal = 0;
int32_t out = 0;
bool halted = false;
float32_t amplitude = volume2rate((float32_t)TRX.Volume / 100.0f) * 0.1f;
for(uint32_t pos = 0; pos < AUDIO_BUFFER_HALF_SIZE; pos++)
{

Wyświetl plik

@ -209,11 +209,12 @@ void LoadSettings(bool clear)
TRX.FRQ_ENC_STEP = 2500; // frequency tuning step by main add. encoder
TRX.FRQ_ENC_FAST_STEP = 5000; // frequency tuning step by main add. encoder in FAST mode
TRX.AGC_GAIN_TARGET = -25; // Maximum (target) AGC gain
TRX.RX_AGC_Max_gain = 25; //Maximum AGC gain
TRX.TX_Compressor_speed_SSB = 3; // TX ñêîðîñòü êîìïðåññîðà SSB
TRX.TX_Compressor_maxgain_SSB = 10; // TX ìàêñèìàëüíîå óñèëåíèå SSB
TRX.TX_Compressor_speed_AMFM = 3; // TX ñêîðîñòü êîìïðåññîðà AM/FM
TRX.TX_Compressor_maxgain_AMFM = 10; // TX ìàêñèìàëüíîå óñèëåíèå AM/FM
TRX.TX_func_mode = 0; // Режим валкодера
TRX.TX_func_mode = 0; //
TRX.MIC_GAIN = 3; // Microphone gain
TRX.MIC_BOOST = false; // Microphone boost +20dB
TRX.RX_EQ_LOW = 0; // Receiver Equalizer (Low)

Wyświetl plik

@ -172,6 +172,7 @@ extern struct TRX_SETTINGS
uint8_t Volume_Step;
uint8_t IF_Gain;
int8_t AGC_GAIN_TARGET;
uint8_t RX_AGC_Max_gain;
uint16_t RX_AGC_Hold;
uint8_t MIC_GAIN;
bool MIC_BOOST;

Wyświetl plik

@ -53,6 +53,7 @@ static void SYSMENU_HANDL_AUDIO_TX_CompressorSpeed_SSB(int8_t direction);
static void SYSMENU_HANDL_AUDIO_TX_CompressorSpeed_AMFM(int8_t direction);
static void SYSMENU_HANDL_AUDIO_TX_CompressorMaxGain_SSB(int8_t direction);
static void SYSMENU_HANDL_AUDIO_TX_CompressorMaxGain_AMFM(int8_t direction);
static void SYSMENU_HANDL_AUDIO_RX_AGC_Max_gain(int8_t direction);
static void SYSMENU_HANDL_AUDIO_MIC_EQ_LOW(int8_t direction);
static void SYSMENU_HANDL_AUDIO_MIC_EQ_MID(int8_t direction);
static void SYSMENU_HANDL_AUDIO_MIC_EQ_HIG(int8_t direction);
@ -62,6 +63,7 @@ static void SYSMENU_HANDL_AUDIO_RX_EQ_HIG(int8_t direction);
static void SYSMENU_HANDL_AUDIO_RX_AGC_SSB_Speed(int8_t direction);
static void SYSMENU_HANDL_AUDIO_RX_AGC_CW_Speed(int8_t direction);
static void SYSMENU_HANDL_AUDIO_TX_AGCSpeed(int8_t direction);
static void SYSMENU_HANDL_AUDIO_RX_AGC_Hold(int8_t direction);
static void SYSMENU_HANDL_AUDIO_FMSquelch(int8_t direction);
static void SYSMENU_HANDL_AUDIO_VAD_Squelch(int8_t direction);
static void SYSMENU_HANDL_AUDIO_Beeper(int8_t direction);
@ -209,6 +211,8 @@ static const struct sysmenu_item_handler sysmenu_audio_handlers[] =
{"RX EQ High", SYSMENU_INT8, (uint32_t *)&TRX.RX_EQ_HIG, SYSMENU_HANDL_AUDIO_RX_EQ_HIG},
{"RX AGC SSB Speed", SYSMENU_UINT8, (uint32_t *)&TRX.RX_AGC_SSB_speed, SYSMENU_HANDL_AUDIO_RX_AGC_SSB_Speed},
{"RX AGC CW Speed", SYSMENU_UINT8, (uint32_t *)&TRX.RX_AGC_CW_speed, SYSMENU_HANDL_AUDIO_RX_AGC_CW_Speed},
{"RX AGC Max gain", SYSMENU_UINT8, (uint32_t *)&TRX.RX_AGC_Max_gain, SYSMENU_HANDL_AUDIO_RX_AGC_Max_gain},
{"RX AGC Hold time", SYSMENU_UINT16, (uint32_t *)&TRX.RX_AGC_Hold, SYSMENU_HANDL_AUDIO_RX_AGC_Hold},
{"TX AGC Speed", SYSMENU_UINT8, (uint32_t *)&TRX.TX_AGC_speed, SYSMENU_HANDL_AUDIO_TX_AGCSpeed},
{"Beeper", SYSMENU_BOOLEAN, (uint32_t *)&TRX.Beeper, SYSMENU_HANDL_AUDIO_Beeper},
};
@ -898,6 +902,23 @@ static void SYSMENU_HANDL_AUDIO_RX_AGC_CW_Speed(int8_t direction)
TRX.RX_AGC_CW_speed = 20;
}
static void SYSMENU_HANDL_AUDIO_RX_AGC_Max_gain(int8_t direction)
{
TRX.RX_AGC_Max_gain += direction;
if (TRX.RX_AGC_Max_gain < 1)
TRX.RX_AGC_Max_gain = 1;
if (TRX.RX_AGC_Max_gain > 50)
TRX.RX_AGC_Max_gain = 50;
}
static void SYSMENU_HANDL_AUDIO_RX_AGC_Hold(int8_t direction)
{
if(TRX.RX_AGC_Hold > 0 || direction > 0)
TRX.RX_AGC_Hold += direction * 100;
if (TRX.RX_AGC_Hold > 5000)
TRX.RX_AGC_Hold = 5000;
}
static void SYSMENU_HANDL_AUDIO_TX_AGCSpeed(int8_t direction)
{
TRX.TX_AGC_speed += direction;

Wyświetl plik

@ -27,9 +27,7 @@ void WM8731_start_i2s_and_dma(void)
{
WM8731_CleanBuffer();
if (HAL_I2S_GetState(&hi2s3) == HAL_I2S_STATE_READY)
{
HAL_I2S_TXRX_DMA(&hi2s3, (uint16_t *)&CODEC_Audio_Buffer_RX[0], (uint16_t *)&CODEC_Audio_Buffer_TX[0], CODEC_AUDIO_BUFFER_SIZE * 2, CODEC_AUDIO_BUFFER_SIZE); // 32bit rx spi, 16bit tx spi
}
HAL_I2S_TXRX_DMA(&hi2s3, (uint16_t *)&CODEC_Audio_Buffer_RX[0], (uint16_t *)&CODEC_Audio_Buffer_TX[0], CODEC_AUDIO_BUFFER_SIZE * 2, CODEC_AUDIO_BUFFER_SIZE); // 32bit rx spi, 16bit tx spi
}
// clear the audio codec and USB audio buffer
@ -78,13 +76,11 @@ void WM8731_TXRX_mode(void) //loopback
{
WM8731_SendI2CCommand(B8(00000001), B8(10000000)); //R0 Left Line In
WM8731_SendI2CCommand(B8(00000011), B8(10000000)); //R1 Right Line In
if (TRX.MIC_BOOST)
WM8731_SendI2CCommand(B8(00001000), B8(00010101)); //R4 Analogue Audio Path Control
else
WM8731_SendI2CCommand(B8(00001000), B8(00010100)); //R4 Analogue Audio Path Control
WM8731_SendI2CCommand(B8(00001100), B8(01100001)); //R6 Power Down Control, internal crystal
WM8731_SendI2CCommand(B8(00001100), B8(01100001)); //R6 Power Down Control, internal crystal
}
}

Plik diff jest za duży Load Diff

Wyświetl plik

@ -157,7 +157,7 @@
<Bp>
<Number>0</Number>
<Type>0</Type>
<LineNumber>544</LineNumber>
<LineNumber>32</LineNumber>
<EnabledFlag>1</EnabledFlag>
<Address>0</Address>
<ByteObject>0</ByteObject>
@ -166,14 +166,14 @@
<SizeOfObject>0</SizeOfObject>
<BreakByAccess>0</BreakByAccess>
<BreakIfRCount>0</BreakIfRCount>
<Filename>..\Core\Src\system_menu.c</Filename>
<Filename>..\Core\Src\agc.c</Filename>
<ExecCommand></ExecCommand>
<Expression></Expression>
</Bp>
<Bp>
<Number>1</Number>
<Type>0</Type>
<LineNumber>534</LineNumber>
<LineNumber>544</LineNumber>
<EnabledFlag>1</EnabledFlag>
<Address>0</Address>
<ByteObject>0</ByteObject>
@ -189,7 +189,7 @@
<Bp>
<Number>2</Number>
<Type>0</Type>
<LineNumber>523</LineNumber>
<LineNumber>534</LineNumber>
<EnabledFlag>1</EnabledFlag>
<Address>0</Address>
<ByteObject>0</ByteObject>
@ -205,7 +205,7 @@
<Bp>
<Number>3</Number>
<Type>0</Type>
<LineNumber>511</LineNumber>
<LineNumber>523</LineNumber>
<EnabledFlag>1</EnabledFlag>
<Address>0</Address>
<ByteObject>0</ByteObject>
@ -221,7 +221,7 @@
<Bp>
<Number>4</Number>
<Type>0</Type>
<LineNumber>500</LineNumber>
<LineNumber>511</LineNumber>
<EnabledFlag>1</EnabledFlag>
<Address>0</Address>
<ByteObject>0</ByteObject>
@ -237,7 +237,7 @@
<Bp>
<Number>5</Number>
<Type>0</Type>
<LineNumber>487</LineNumber>
<LineNumber>500</LineNumber>
<EnabledFlag>1</EnabledFlag>
<Address>0</Address>
<ByteObject>0</ByteObject>
@ -253,7 +253,7 @@
<Bp>
<Number>6</Number>
<Type>0</Type>
<LineNumber>476</LineNumber>
<LineNumber>487</LineNumber>
<EnabledFlag>1</EnabledFlag>
<Address>0</Address>
<ByteObject>0</ByteObject>
@ -269,6 +269,22 @@
<Bp>
<Number>7</Number>
<Type>0</Type>
<LineNumber>476</LineNumber>
<EnabledFlag>1</EnabledFlag>
<Address>0</Address>
<ByteObject>0</ByteObject>
<HtxType>0</HtxType>
<ManyObjects>0</ManyObjects>
<SizeOfObject>0</SizeOfObject>
<BreakByAccess>0</BreakByAccess>
<BreakIfRCount>0</BreakIfRCount>
<Filename>..\Core\Src\system_menu.c</Filename>
<ExecCommand></ExecCommand>
<Expression></Expression>
</Bp>
<Bp>
<Number>8</Number>
<Type>0</Type>
<LineNumber>393</LineNumber>
<EnabledFlag>1</EnabledFlag>
<Address>0</Address>
@ -283,7 +299,7 @@
<Expression></Expression>
</Bp>
<Bp>
<Number>8</Number>
<Number>9</Number>
<Type>0</Type>
<LineNumber>524</LineNumber>
<EnabledFlag>1</EnabledFlag>
@ -299,7 +315,7 @@
<Expression></Expression>
</Bp>
<Bp>
<Number>9</Number>
<Number>10</Number>
<Type>0</Type>
<LineNumber>649</LineNumber>
<EnabledFlag>1</EnabledFlag>
@ -314,22 +330,6 @@
<ExecCommand></ExecCommand>
<Expression></Expression>
</Bp>
<Bp>
<Number>10</Number>
<Type>0</Type>
<LineNumber>99</LineNumber>
<EnabledFlag>1</EnabledFlag>
<Address>0</Address>
<ByteObject>0</ByteObject>
<HtxType>0</HtxType>
<ManyObjects>0</ManyObjects>
<SizeOfObject>0</SizeOfObject>
<BreakByAccess>0</BreakByAccess>
<BreakIfRCount>0</BreakIfRCount>
<Filename>..\Core\Src\agc.c</Filename>
<ExecCommand></ExecCommand>
<Expression></Expression>
</Bp>
<Bp>
<Number>11</Number>
<Type>0</Type>
@ -938,6 +938,166 @@
<ExecCommand></ExecCommand>
<Expression></Expression>
</Bp>
<Bp>
<Number>49</Number>
<Type>0</Type>
<LineNumber>474</LineNumber>
<EnabledFlag>1</EnabledFlag>
<Address>0</Address>
<ByteObject>0</ByteObject>
<HtxType>0</HtxType>
<ManyObjects>0</ManyObjects>
<SizeOfObject>0</SizeOfObject>
<BreakByAccess>0</BreakByAccess>
<BreakIfRCount>0</BreakIfRCount>
<Filename>..\Core\Src\system_menu.c</Filename>
<ExecCommand></ExecCommand>
<Expression></Expression>
</Bp>
<Bp>
<Number>50</Number>
<Type>0</Type>
<LineNumber>484</LineNumber>
<EnabledFlag>1</EnabledFlag>
<Address>0</Address>
<ByteObject>0</ByteObject>
<HtxType>0</HtxType>
<ManyObjects>0</ManyObjects>
<SizeOfObject>0</SizeOfObject>
<BreakByAccess>0</BreakByAccess>
<BreakIfRCount>0</BreakIfRCount>
<Filename>..\Core\Src\system_menu.c</Filename>
<ExecCommand></ExecCommand>
<Expression></Expression>
</Bp>
<Bp>
<Number>51</Number>
<Type>0</Type>
<LineNumber>495</LineNumber>
<EnabledFlag>1</EnabledFlag>
<Address>0</Address>
<ByteObject>0</ByteObject>
<HtxType>0</HtxType>
<ManyObjects>0</ManyObjects>
<SizeOfObject>0</SizeOfObject>
<BreakByAccess>0</BreakByAccess>
<BreakIfRCount>0</BreakIfRCount>
<Filename>..\Core\Src\system_menu.c</Filename>
<ExecCommand></ExecCommand>
<Expression></Expression>
</Bp>
<Bp>
<Number>52</Number>
<Type>0</Type>
<LineNumber>504</LineNumber>
<EnabledFlag>1</EnabledFlag>
<Address>0</Address>
<ByteObject>0</ByteObject>
<HtxType>0</HtxType>
<ManyObjects>0</ManyObjects>
<SizeOfObject>0</SizeOfObject>
<BreakByAccess>0</BreakByAccess>
<BreakIfRCount>0</BreakIfRCount>
<Filename>..\Core\Src\system_menu.c</Filename>
<ExecCommand></ExecCommand>
<Expression></Expression>
</Bp>
<Bp>
<Number>53</Number>
<Type>0</Type>
<LineNumber>507</LineNumber>
<EnabledFlag>1</EnabledFlag>
<Address>0</Address>
<ByteObject>0</ByteObject>
<HtxType>0</HtxType>
<ManyObjects>0</ManyObjects>
<SizeOfObject>0</SizeOfObject>
<BreakByAccess>0</BreakByAccess>
<BreakIfRCount>0</BreakIfRCount>
<Filename>..\Core\Src\system_menu.c</Filename>
<ExecCommand></ExecCommand>
<Expression></Expression>
</Bp>
<Bp>
<Number>54</Number>
<Type>0</Type>
<LineNumber>515</LineNumber>
<EnabledFlag>1</EnabledFlag>
<Address>0</Address>
<ByteObject>0</ByteObject>
<HtxType>0</HtxType>
<ManyObjects>0</ManyObjects>
<SizeOfObject>0</SizeOfObject>
<BreakByAccess>0</BreakByAccess>
<BreakIfRCount>0</BreakIfRCount>
<Filename>..\Core\Src\system_menu.c</Filename>
<ExecCommand></ExecCommand>
<Expression></Expression>
</Bp>
<Bp>
<Number>55</Number>
<Type>0</Type>
<LineNumber>518</LineNumber>
<EnabledFlag>1</EnabledFlag>
<Address>0</Address>
<ByteObject>0</ByteObject>
<HtxType>0</HtxType>
<ManyObjects>0</ManyObjects>
<SizeOfObject>0</SizeOfObject>
<BreakByAccess>0</BreakByAccess>
<BreakIfRCount>0</BreakIfRCount>
<Filename>..\Core\Src\system_menu.c</Filename>
<ExecCommand></ExecCommand>
<Expression></Expression>
</Bp>
<Bp>
<Number>56</Number>
<Type>0</Type>
<LineNumber>531</LineNumber>
<EnabledFlag>1</EnabledFlag>
<Address>0</Address>
<ByteObject>0</ByteObject>
<HtxType>0</HtxType>
<ManyObjects>0</ManyObjects>
<SizeOfObject>0</SizeOfObject>
<BreakByAccess>0</BreakByAccess>
<BreakIfRCount>0</BreakIfRCount>
<Filename>..\Core\Src\system_menu.c</Filename>
<ExecCommand></ExecCommand>
<Expression></Expression>
</Bp>
<Bp>
<Number>57</Number>
<Type>0</Type>
<LineNumber>542</LineNumber>
<EnabledFlag>1</EnabledFlag>
<Address>0</Address>
<ByteObject>0</ByteObject>
<HtxType>0</HtxType>
<ManyObjects>0</ManyObjects>
<SizeOfObject>0</SizeOfObject>
<BreakByAccess>0</BreakByAccess>
<BreakIfRCount>0</BreakIfRCount>
<Filename>..\Core\Src\system_menu.c</Filename>
<ExecCommand></ExecCommand>
<Expression></Expression>
</Bp>
<Bp>
<Number>58</Number>
<Type>0</Type>
<LineNumber>548</LineNumber>
<EnabledFlag>1</EnabledFlag>
<Address>0</Address>
<ByteObject>0</ByteObject>
<HtxType>0</HtxType>
<ManyObjects>0</ManyObjects>
<SizeOfObject>0</SizeOfObject>
<BreakByAccess>0</BreakByAccess>
<BreakIfRCount>0</BreakIfRCount>
<Filename>..\Core\Src\system_menu.c</Filename>
<ExecCommand></ExecCommand>
<Expression></Expression>
</Bp>
</Breakpoint>
<Tracepoint>
<THDelay>0</THDelay>

Plik binarny nie jest wyświetlany.