Spur avoidance table added

tinySA
erikkaashoek 6 years ago
parent 37befeb947
commit 39da5289b4

@ -801,7 +801,10 @@ static const trace_t def_trace[TRACES_MAX] = {//enable, type, channel, reserved,
}; };
static const marker_t def_markers[MARKERS_MAX] = { static const marker_t def_markers[MARKERS_MAX] = {
{ 1, M_REFERENCE, 30, 0 }, { 0, M_DELTA, 40, 0 }, { 0, M_DELTA, 60, 0 }, { 0, M_DELTA, 80, 0 } { 1, M_REFERENCE, 30, 0 },
{ 0, M_NORMAL, 40, 0 },
{ 0, M_NORMAL, 60, 0 },
{ 0, M_NORMAL, 80, 0 }
}; };
// Load propeties default settings // Load propeties default settings

@ -67,7 +67,7 @@ typedef uint32_t map_t;
uint16_t marker_color[3] = uint16_t marker_color[3] =
{ {
RGBHEX(0xFFFFFF), RGBHEX(0xFFFFFF),
RGBHEX(0x0000FF), RGBHEX(0xFFFF00),
RGBHEX(0x00FF00) RGBHEX(0x00FF00)
}; };

@ -476,12 +476,75 @@ void update_rbw(uint32_t delta_f)
dirty = true; dirty = true;
} }
//static int spur_old_stepdelay = 0;
static int spur_IF = 433900000;
static int spur_alternate_IF = 433700000;
static const int spur_table[] =
{
470000,
780000,
830000,
880000,
949000,
1468000,
1830000,
1900000,
2840000,
2880000,
4780000,
4800000,
4880000,
6510000
6860000,
7340000,
8100000,
8200000,
8880000,
// 9970000, 10MHz!!!!!!
10870000,
11420000,
14880000,
16820000,
};
int avoid_spur(int f)
{
int window = ((int)rbw ) * 1000*2;
if (window < 50000)
window = 50000;
if (! settingMode == M_LOW)
return false ;
if (frequency_IF != spur_IF)
return false;
if (rbw > 300.0)
return(false);
// if (spur_old_stepdelay != 0 && actualStepDelay != spur_old_stepdelay) // restore stepdelay
// actualStepDelay = spur_old_stepdelay;
for (int i = 0; i < (sizeof spur_table)/sizeof(int); i++) {
if (f/window == spur_table[i]/window) {
// spur_old_stepdelay = actualStepDelay;
// actualStepDelay += 4000;
return true;
}
}
return false;
}
static int old_lf = -1; static int old_lf = -1;
static int modulation_counter = 0; static int modulation_counter = 0;
static int old_local_IF = -1;
float perform(bool break_on_operation, int i, int32_t f, int extraV) float perform(bool break_on_operation, int i, int32_t f, int extraV)
{ {
long local_IF = (MODE_LOW(settingMode)?frequency_IF + (int)(rbw < 300.0?settingSpur * 1000 * rbw :0):0); // long local_IF = (MODE_LOW(settingMode)?frequency_IF + (int)(rbw < 300.0?settingSpur * 1000 * rbw :0):0);
long local_IF;
if (MODE_HIGH(settingMode))
local_IF = 0;
else if (avoid_spur(f))
local_IF = spur_alternate_IF;
else
local_IF = frequency_IF;
if (i == 0 && dirty) { if (i == 0 && dirty) {
if (settingStepDelay == 0){ if (settingStepDelay == 0){
if (rbw < 10.0) if (rbw < 10.0)
@ -517,8 +580,11 @@ float perform(bool break_on_operation, int i, int32_t f, int extraV)
dirty = false; dirty = false;
// } // }
} }
if (i == 0 && ( scandirty || settingSpur) && local_IF) // if (i == 0 && ( scandirty || settingSpur) && local_IF)
if (local_IF && old_local_IF != local_IF) {
setFreq (0, local_IF); setFreq (0, local_IF);
old_local_IF = local_IF;
}
if (settingModulation == MO_AM) { if (settingModulation == MO_AM) {
int p = settingAttenuate * 2 + modulation_counter; int p = settingAttenuate * 2 + modulation_counter;
PE4302_Write_Byte(p); PE4302_Write_Byte(p);
@ -564,6 +630,7 @@ static bool sweep(bool break_on_operation)
float RSSI; float RSSI;
palClearPad(GPIOC, GPIOC_LED); palClearPad(GPIOC, GPIOC_LED);
temppeakLevel = -150; temppeakLevel = -150;
// spur_old_stepdelay = 0;
again: again:
for (int i = 0; i < sweep_points; i++) { for (int i = 0; i < sweep_points; i++) {
RSSI = perform(break_on_operation, i, frequencies[i], extraVFO); RSSI = perform(break_on_operation, i, frequencies[i], extraVFO);
@ -612,6 +679,7 @@ again:
if (scandirty) { if (scandirty) {
scandirty = false; scandirty = false;
draw_cal_status();
} }
peakIndex = temppeakIndex; peakIndex = temppeakIndex;
peakLevel = actual_t[peakIndex]; peakLevel = actual_t[peakIndex];
@ -705,10 +773,6 @@ void draw_cal_status(void)
#define XSTEP 40 #define XSTEP 40
// if (!sweep_enabled)
// perform(true, 0, frequencies[0], false);
ili9341_fill(x, y, OFFSETX, HEIGHT, 0x0000); ili9341_fill(x, y, OFFSETX, HEIGHT, 0x0000);
if (MODE_OUTPUT(settingMode)) // No cal status during output if (MODE_OUTPUT(settingMode)) // No cal status during output
@ -787,6 +851,9 @@ void draw_cal_status(void)
buf[5]=0; buf[5]=0;
ili9341_drawstring(buf, x, y); ili9341_drawstring(buf, x, y);
if (dirty)
ili9341_set_foreground(BRIGHT_COLOR_RED);
y += YSTEP*2; y += YSTEP*2;
ili9341_drawstring("Scan:", x, y); ili9341_drawstring("Scan:", x, y);
@ -886,6 +953,10 @@ static void test_acquire(int i)
#endif #endif
set_sweep_frequency(ST_CENTER, (int32_t)(test_case[i].center * 1000000)); set_sweep_frequency(ST_CENTER, (int32_t)(test_case[i].center * 1000000));
set_sweep_frequency(ST_SPAN, (int32_t)(test_case[i].span * 1000000)); set_sweep_frequency(ST_SPAN, (int32_t)(test_case[i].span * 1000000));
SetAverage(4);
sweep(false);
sweep(false);
sweep(false);
sweep(false); sweep(false);
plot_into_index(measured); plot_into_index(measured);
redraw_request |= REDRAW_CELLS | REDRAW_FREQUENCY; redraw_request |= REDRAW_CELLS | REDRAW_FREQUENCY;
@ -989,7 +1060,6 @@ int validate_above(void) {
void test_validate(int i) void test_validate(int i)
{ {
// draw_all(TRUE); // draw_all(TRUE);
SetRefpos(test_case[i].pass+10);
switch (test_case[i].kind) { switch (test_case[i].kind) {
case TC_SET: case TC_SET:
if (test_case[i].pass == 0) { if (test_case[i].pass == 0) {
@ -997,8 +1067,10 @@ void test_validate(int i)
SetPowerLevel(test_value); SetPowerLevel(test_value);
} else } else
SetPowerLevel(test_case[i].pass); SetPowerLevel(test_case[i].pass);
case TC_MEASURE: goto common;
case TC_MEASURE:
case TC_SIGNAL: // Validate signal case TC_SIGNAL: // Validate signal
common:
if (validate_peak_within(i, 5.0)) // Validate Peak if (validate_peak_within(i, 5.0)) // Validate Peak
test_status[i] = TS_PASS; test_status[i] = TS_PASS;
else if (validate_peak_within(i, 10.0)) else if (validate_peak_within(i, 10.0))
@ -1084,6 +1156,7 @@ void self_test(void)
switch(test_case[i].setup) { // Prepare test conditions switch(test_case[i].setup) { // Prepare test conditions
case TPH_SILENT: // No input signal case TPH_SILENT: // No input signal
SetMode(M_HIGH); SetMode(M_HIGH);
goto common_silent;
case TP_SILENT: // No input signal case TP_SILENT: // No input signal
SetMode(M_LOW); SetMode(M_LOW);
common_silent: common_silent:
@ -1118,9 +1191,7 @@ common_silent:
goto common; goto common;
} }
trace[TRACE_STORED].enabled = true; trace[TRACE_STORED].enabled = true;
set_trace_refpos(0, NGRIDY - (test_case[i].pass + 30) / get_trace_scale(0)); SetRefpos(test_case[i].pass+10);
set_trace_refpos(1, NGRIDY - (test_case[i].pass + 30) / get_trace_scale(0));
set_trace_refpos(2, NGRIDY - (test_case[i].pass + 30) / get_trace_scale(0));
draw_cal_status(); draw_cal_status();
test_acquire(i); // Acquire test test_acquire(i); // Acquire test
test_validate(i); // Validate test test_validate(i); // Validate test

Loading…
Cancel
Save

Powered by TurnKey Linux.