Fractional modulation freq

pull/94/head
erikkaashoek 2 years ago
parent e95e79c8e5
commit 95d48eb744

@ -474,7 +474,7 @@ void set_noise(int);
void toggle_tracking_output(void);
extern int32_t frequencyExtra;
void set_modulation(int);
void set_modulation_frequency(int);
void set_modulation_frequency(float);
int search_maximum(int m, freq_t center, int span);
//extern int setting.modulation;
void set_measurement(int);
@ -1270,7 +1270,6 @@ typedef struct setting
uint16_t freq_mode; // 0...1!!! need convert to bool or bit field
int16_t refer; // -1 disabled
uint16_t modulation_frequency; // 50...6000
#ifdef TINYSA4
uint16_t modulation_depth_x100; // AM (30% - 100%) multiplied by 100
uint16_t modulation_deviation_div100; // FM (2.5kHz to 100kHz) divided by 100
@ -1285,6 +1284,7 @@ typedef struct setting
uint32_t vbw_x100;
uint32_t scan_after_dirty[TRACES_MAX];
float modulation_frequency; // 50...6000
float reflevel;
float scale;
float external_gain;
@ -1465,7 +1465,7 @@ typedef struct properties {
//sizeof(properties_t) == 0x1200
#define CONFIG_MAGIC 0x434f4e65 /* 'CONF' */
#define SETTING_MAGIC 0x434f4e64
#define SETTING_MAGIC 0x434f4e65
extern int16_t lastsaveid;
//extern properties_t *active_props;

@ -1136,7 +1136,7 @@ void set_depth(int d)
}
#endif
void set_modulation_frequency(int f)
void set_modulation_frequency(float f)
{
if (f < 1)
f = 1;
@ -3637,7 +3637,7 @@ pureRSSI_t perform(bool break_on_operation, int i, freq_t f, int tracking) /
int sine_wave_index = 1;
config.cor_am = INITIAL_MODULATION_CORRECTION; // Initialize with some spare
modulation_steps = MAX_MODULATION_STEPS; // Search modulation steps that fit frequency
while ( (modulation_delay = (8000000/ modulation_steps ) / setting.modulation_frequency + config.cor_am) < 20 && modulation_steps > 4) {
while ( (modulation_delay = ((float)8000000/ modulation_steps ) / setting.modulation_frequency + config.cor_am) < 20 && modulation_steps > 4) {
sine_wave_index <<= 1;
modulation_steps >>= 1;
}
@ -3661,7 +3661,7 @@ pureRSSI_t perform(bool break_on_operation, int i, freq_t f, int tracking) /
config.cor_am = INITIAL_MODULATION_CORRECTION; // Initialize with some spare
modulation_steps = MAX_MODULATION_STEPS; // Search modulation steps that fit frequency
//modulation_steps = 8; // <-----------------TEMP!!!!!
while ( ((modulation_delay = (8000000/ modulation_steps ) / setting.modulation_frequency + config.cor_am)) < 900 && modulation_steps >= 4) {
while ( ((modulation_delay = ((float)8000000/ modulation_steps ) / setting.modulation_frequency + config.cor_am)) < 900 && modulation_steps >= 4) {
sine_wave_index <<= 1;
modulation_steps >>= 1;
}
@ -3897,7 +3897,7 @@ pureRSSI_t perform(bool break_on_operation, int i, freq_t f, int tracking) /
if (setting.modulation != MO_NONE && setting.modulation != MO_EXTERNAL && setting.modulation_frequency != 0) {
modulation_counter = 0;
cycle_counter = 0;
modulation_delay = (8000000/ modulation_steps ) / setting.modulation_frequency; // 8 steps so 8MHz/8
modulation_delay = ((float)8000000/ modulation_steps ) / setting.modulation_frequency; // 8 steps so 8MHz/8
modulation_delay += config.cor_am;
#ifdef TINYSA3
if (setting.modulation == MO_WFM)
@ -3952,10 +3952,11 @@ modulation_again:
modulation_counter = 0;
cycle_counter++;
if (config.cor_am == INITIAL_MODULATION_CORRECTION) {
if (chVTGetSystemTimeX() - start_of_sweep_timestamp > 1000) { // 100 ms, System tick 10000 per second
int cycle_time = chVTGetSystemTimeX() - start_of_sweep_timestamp;
if (cycle_time > 1000) { // 100 ms, System tick 10000 per second
start_of_sweep_timestamp = chVTGetSystemTimeX();
modulation_delay -= config.cor_am;
int actual_delay = 800000 / cycle_counter / modulation_steps; // In units of 1/8 microsecond
int actual_delay = 800 * cycle_time / cycle_counter / modulation_steps; // In units of 1/8 microsecond
config.cor_am += modulation_delay - actual_delay;
if (config.cor_am >0)
config.cor_am = 0;

10
ui.c

@ -1433,7 +1433,7 @@ static const struct {
[KM_FASTER_SPEEDUP] = {keypads_positive , "WIDE\nSPEEDUP"}, // KM_FAST_SPEEDUP
[KM_GRIDLINES] = {keypads_positive , "MINIMUM\nGRIDLINES"}, // KM_GRIDLINES
[KM_MARKER] = {keypads_freq , "MARKER\nFREQ"}, // KM_MARKER
[KM_MODULATION] = {keypads_freq , "MODULATION\nFREQ"}, // KM_MODULATION
[KM_MODULATION] = {keypads_positive , "MODULATION\nFREQ"}, // KM_MODULATION
[KM_HIGHOUTLEVEL] = {keypads_plusmin , "OUTPUT\nLEVEL"}, // KM_HIGHOUTLEVEL #25
#ifdef TINYSA4
[KM_COR_AM] = {keypads_plusmin , "COR\nAM"}, // KM_COR_AM
@ -2412,9 +2412,9 @@ static UI_FUNCTION_ADV_CALLBACK(menu_smodulation_acb){
else {
#ifdef TINYSA4
if (setting.modulation == MO_AM)
plot_printf(b->text, sizeof b->text, "MOD: %4dHz AM %d%%", (int)(setting.modulation_frequency), setting.modulation_depth_x100);
plot_printf(b->text, sizeof b->text, "MOD: %8.4FHz AM %d%%", setting.modulation_frequency, setting.modulation_depth_x100);
else
plot_printf(b->text, sizeof b->text, "MOD: %4dHz FM %4QHz", (int)(setting.modulation_frequency), (freq_t)(setting.modulation_deviation_div100*100));
plot_printf(b->text, sizeof b->text, "MOD: %8.4FHz FM %4QHz", setting.modulation_frequency, (freq_t)(setting.modulation_deviation_div100*100));
#else
plot_printf(b->text, sizeof b->text, "MOD: %4dHz %s", (int)(setting.modulation_frequency), menu_modulation_text[setting.modulation]);
#endif
@ -5497,7 +5497,7 @@ static void fetch_numeric_target(uint8_t mode)
case KM_MODULATION:
if (active_marker >=0) {
uistat.value = setting.modulation_frequency;
plot_printf(uistat.text, sizeof uistat.text, "%7.0fHz", uistat.value);
plot_printf(uistat.text, sizeof uistat.text, "%8.4FHz", uistat.value);
}
break;
#ifdef TINYSA4
@ -5766,7 +5766,7 @@ set_numeric_value(void)
set_marker_time(active_marker, uistat.value);
break;
case KM_MODULATION:
set_modulation_frequency((int)uistat.value);
set_modulation_frequency(uistat.value);
break;
#ifdef TINYSA4
case KM_COR_AM:

Loading…
Cancel
Save

Powered by TurnKey Linux.