Add FFT Hold Peak

master
XGudron 2021-10-21 22:25:40 +03:00
rodzic 8eab87fd9e
commit 45318c1060
2 zmienionych plików z 68 dodań i 51 usunięć

Wyświetl plik

@ -266,49 +266,6 @@ void FFT_bufferPrepare(void)
dc_filter(FFTInput_I_current, FFT_SIZE, DC_FILTER_FFT_I);
dc_filter(FFTInput_Q_current, FFT_SIZE, DC_FILTER_FFT_Q);
}
//-----------------------------------------------------------------------------------------------------------------------------------------
//FFT Peaks
if(TRX.FFT_HoldPeaks)
{
uint32_t fft_y_prev = 0;
for (uint32_t fft_x = 0; fft_x < LAY_FFT_PRINT_SIZE; fft_x++)
{
uint32_t fft_y = LAY_WTF_HEIGHT - fft_peaks[fft_x];
int32_t y_diff = (int32_t)fft_y - (int32_t)fft_y_prev;
if (fft_x == 0 || (y_diff <= 1 && y_diff >= -1))
{
fft_output_buffer[fft_y][fft_x] = palette_fft[LAY_WTF_HEIGHT / 2];
}
else
{
for (uint32_t l = 0; l < (abs(y_diff / 2) + 1); l++) //draw line
{
fft_output_buffer[fft_y_prev + ((y_diff > 0) ? l : -l)][fft_x - 1] = palette_fft[LAY_WTF_HEIGHT / 2];
fft_output_buffer[fft_y + ((y_diff > 0) ? -l : l)][fft_x] = palette_fft[LAY_WTF_HEIGHT / 2];
}
}
fft_y_prev = fft_y;
}
}
//-----------------------------------------------------------------------------------------------------------------------------------------
//FFT Peaks
if(TRX.FFT_HoldPeaks)
{
if(lastWTFFreq == currentFFTFreq)
{
for (uint32_t fft_x = 0; fft_x < LAY_FFT_PRINT_SIZE; fft_x++)
if(fft_peaks[fft_x] <= fft_header[fft_x])
fft_peaks[fft_x] = fft_header[fft_x];
else if(fft_peaks[fft_x] > 0)
fft_peaks[fft_x]--;
}
else
{
for (uint32_t fft_x = 0; fft_x < LAY_FFT_PRINT_SIZE; fft_x++)
fft_peaks[fft_x] = fft_header[fft_x];
}
}
//-----------------------------------------------------------------------------------------------------------------------------------------
//ZoomFFT
if (TRX.FFT_Zoom > 1)
@ -545,12 +502,8 @@ bool FFT_printFFT(void)
// calculate the colors for the waterfall
for (uint32_t fft_x = 0; fft_x < LAY_FFT_PRINT_SIZE; fft_x++)
{
height = (uint16_t)((float32_t)FFTOutput_mean[(uint_fast16_t)fft_x] * LAY_FFT_HEIGHT);
// if(height < 10)
// height = 0;
if (height > LAY_FFT_HEIGHT)
height = LAY_FFT_HEIGHT;
@ -558,12 +511,52 @@ bool FFT_printFFT(void)
fft_header[fft_x] = height;
indexed_wtf_buffer[0][fft_x] = LAY_FFT_HEIGHT - height;
// if(indexed_wtf_buffer[0][fft_x] < 5)
// indexed_wtf_buffer[0][fft_x] = 0;
if (fft_x == (LAY_FFT_PRINT_SIZE / 2))
continue;
}
//FFT Peaks
if (TRX.FFT_HoldPeaks)
{
//peaks moving
if (lastWTFFreq != currentFFTFreq)
{
float32_t diff = (float32_t)currentFFTFreq - (float32_t)lastWTFFreq;
diff = diff / (float32_t)(FFT_HZ_IN_PIXEL * TRX.FFT_Zoom);
diff = roundf(diff);
if (diff > 0)
{
for (int32_t fft_x = 0; fft_x < LAY_FFT_PRINT_SIZE; fft_x++)
{
int32_t new_x = fft_x + (int32_t)diff;
if (new_x >= 0 && new_x < LAY_FFT_PRINT_SIZE)
fft_peaks[fft_x] = fft_peaks[new_x];
else
fft_peaks[fft_x] = 0;
}
}
else if (diff < 0)
{
for (int32_t fft_x = LAY_FFT_PRINT_SIZE - 1; fft_x >= 0; fft_x--)
{
int32_t new_x = fft_x + (int32_t)diff;
if (new_x >= 0 && new_x < LAY_FFT_PRINT_SIZE)
fft_peaks[fft_x] = fft_peaks[new_x];
else
fft_peaks[fft_x] = 0;
}
}
}
//peaks falling
for (uint32_t fft_x = 0; fft_x < LAY_FFT_PRINT_SIZE; fft_x++)
{
if (fft_peaks[fft_x] <= fft_header[fft_x])
fft_peaks[fft_x] = fft_header[fft_x];
else if (fft_peaks[fft_x] > 0)
fft_peaks[fft_x]--;
}
}
// calculate bw bar size
switch (CurrentVFO()->Mode)
@ -627,6 +620,30 @@ bool FFT_printFFT(void)
}
}
}
//FFT Peaks
if (TRX.FFT_HoldPeaks)
{
uint32_t fft_y_prev = 0;
for (uint32_t fft_x = 0; fft_x < LAY_FFT_PRINT_SIZE; fft_x++)
{
uint32_t fft_y = LAY_FFT_HEIGHT - fft_peaks[fft_x];
int32_t y_diff = (int32_t)fft_y - (int32_t)fft_y_prev;
if (fft_x == 0 || (y_diff <= 1 && y_diff >= -1))
{
fft_output_buffer[fft_y][fft_x] = palette_fft[LAY_FFT_HEIGHT / 2];
}
else
{
for (uint32_t l = 0; l < (abs(y_diff / 2) + 1); l++) //draw line
{
fft_output_buffer[fft_y_prev + ((y_diff > 0) ? l : -l)][fft_x - 1] = palette_fft[LAY_FFT_HEIGHT / 2];
fft_output_buffer[fft_y + ((y_diff > 0) ? -l : l)][fft_x] = palette_fft[LAY_FFT_HEIGHT / 2];
}
}
fft_y_prev = fft_y;
}
}
//draw grids
if (TRX.FFT_Grid == 1 || TRX.FFT_Grid == 2)

Wyświetl plik

@ -244,7 +244,7 @@ static const struct sysmenu_item_handler sysmenu_screen_handlers[] =
{"7.FFT Compressor", SYSMENU_BOOLEAN, (uint32_t *)&TRX.FFT_Compressor, SYSMENU_HANDL_SCREEN_FFT_Compressor},
{"8.FFT Averaging", SYSMENU_UINT8, (uint32_t *)&TRX.FFT_Averaging, SYSMENU_HANDL_SCREEN_FFT_Averaging},
{"9.FFT Window", SYSMENU_UINT8, (uint32_t *)&TRX.FFT_Window, SYSMENU_HANDL_SCREEN_FFT_Window},
//{"FFT Hold Peaks", SYSMENU_BOOLEAN, (uint32_t *)&TRX.FFT_HoldPeaks, SYSMENU_HANDL_SCREEN_FFT_HoldPeaks},
{"10.FFT Hold Peaks", SYSMENU_BOOLEAN, (uint32_t *)&TRX.FFT_HoldPeaks, SYSMENU_HANDL_SCREEN_FFT_HoldPeaks},
};
static const uint8_t sysmenu_screen_item_count = sizeof(sysmenu_screen_handlers) / sizeof(sysmenu_screen_handlers[0]);