add preliminaly calibration

This commit is contained in:
TT 2016-10-14 21:47:00 +09:00
parent 01057921f6
commit 9dda579abe
3 changed files with 101 additions and 18 deletions

View file

@ -647,7 +647,8 @@ void sweep_tail()
void void
cartesian_scale(float re, float im, int *xp, int *yp) cartesian_scale(float re, float im, int *xp, int *yp)
{ {
float scale = 4e-3; //float scale = 4e-3;
float scale = 4e-4;
int x = WIDTH / 2 - re * scale; int x = WIDTH / 2 - re * scale;
int y = HEIGHT / 2 + im * scale; int y = HEIGHT / 2 + im * scale;
if (x < 0) x = 0; if (x < 0) x = 0;
@ -786,21 +787,55 @@ force_set_markmap(void)
void plot_into_index(float measured[101][2][2]) void plot_into_index(float measured[101][2][2])
{ {
int i, t; int i, t;
float coeff[2];
for (i = 0; i < 101; i++) { for (i = 0; i < 101; i++) {
int x = i * (WIDTH-1) / (101-1); int x = i * (WIDTH-1) / (101-1);
for (t = 0; t < TRACES_MAX; t++) { for (t = 0; t < TRACES_MAX; t++) {
int n = t % 2; int n = t % 2;
if (!trace[t].enabled) if (!trace[t].enabled)
continue; continue;
coeff[0] = measured[i][n][0];
coeff[1] = measured[i][n][1];
if (cal_status & CALSTAT_APPLY) {
if (n == 0) {
float sq = cal_data[i][CAL_OPEN][0] * cal_data[i][CAL_OPEN][0]
+ cal_data[i][CAL_OPEN][1] * cal_data[i][CAL_OPEN][1];
sq /= 1e5;
float m0 = measured[i][n][0];
float m1 = measured[i][n][1];
if (cal_status & CALSTAT_LOAD) {
m0 -= cal_data[i][CAL_LOAD][0];
m1 -= cal_data[i][CAL_LOAD][1];
}
coeff[0] = (m0 * cal_data[i][CAL_OPEN][0]
+ m1 * cal_data[i][CAL_OPEN][1]) / sq;
coeff[1] = (m1 * cal_data[i][CAL_OPEN][0]
- m0 * cal_data[i][CAL_OPEN][1]) / sq;
} else {
float sq = cal_data[i][CAL_THRU][0] * cal_data[i][CAL_THRU][0]
+ cal_data[i][CAL_THRU][1] * cal_data[i][CAL_THRU][1];
sq /= 1e5;
float m0 = measured[i][n][0];
float m1 = measured[i][n][1];
if (cal_status & CALSTAT_ISOLN) {
m0 -= cal_data[i][CAL_ISOLN][0];
m1 -= cal_data[i][CAL_ISOLN][1];
}
coeff[0] = (m0 * cal_data[i][CAL_THRU][0]
+ m1 * cal_data[i][CAL_THRU][1]) / sq;
coeff[1] = (m1 * cal_data[i][CAL_THRU][0]
- m0 * cal_data[i][CAL_THRU][1]) / sq;
}
}
if (trace[t].polar) { if (trace[t].polar) {
int x1, y1; int x1, y1;
cartesian_scale(measured[i][n][1], measured[i][n][0], &x1, &y1); cartesian_scale(coeff[1], coeff[0], &x1, &y1);
trace_index[t][i] = INDEX(x1, y1, i); trace_index[t][i] = INDEX(x1, y1, i);
//mark_map(x1>>5, y1>>5);
} else { } else {
int y1 = logmag(measured[i][n]) * 29; int y1 = logmag(coeff) * 29;
trace_index[t][i] = INDEX(x, y1, i); trace_index[t][i] = INDEX(x, y1, i);
//mark_map(x>>5, y1>>5);
} }
} }
} }

55
main.c
View file

@ -216,14 +216,8 @@ int16_t dsp_disabled = FALSE;
float measured[101][2][2]; float measured[101][2][2];
uint32_t frequencies[101]; uint32_t frequencies[101];
float caldata[101][5][2];
uint16_t cal_status; uint16_t cal_status;
float cal_data[101][5][2];
#define CAL_LOAD 0
#define CAL_OPEN 1
#define CAL_SHORT 2
#define CAL_THRU 3
#define CAL_ISOLN 4
@ -468,13 +462,50 @@ static void cmd_cal(BaseSequentialStream *chp, int argc, char *argv[])
return; return;
} }
char *cmd = argv[1]; char *cmd = argv[0];
int s; int s, d, i;
if (strcmp(cmd, "load")) { if (strcmp(cmd, "load") == 0) {
cal_status |= CAL_LOAD; cal_status |= CALSTAT_LOAD;
memcpy(caldata[CAL_LOAD], measured[0], sizeof measured[0]); s = 0;
d = CAL_LOAD;
} else if (strcmp(cmd, "open") == 0) {
cal_status |= CALSTAT_OPEN;
s = 0;
d = CAL_OPEN;
} else if (strcmp(cmd, "short") == 0) {
cal_status |= CALSTAT_SHORT;
s = 0;
d = CAL_SHORT;
} else if (strcmp(cmd, "thru") == 0) {
cal_status |= CALSTAT_THRU;
s = 1;
d = CAL_THRU;
} else if (strcmp(cmd, "isoln") == 0) {
cal_status |= CALSTAT_ISOLN;
s = 1;
d = CAL_ISOLN;
} else if (strcmp(cmd, "done") == 0) {
cal_status |= CALSTAT_APPLY;
return;
} else if (strcmp(cmd, "reset") == 0) {
cal_status = 0;
return;
} else if (strcmp(cmd, "data") == 0) {
chprintf(chp, "%d %d\r\n", cal_data[0][CAL_LOAD][0], cal_data[0][CAL_LOAD][1]);
chprintf(chp, "%d %d\r\n", cal_data[0][CAL_OPEN][0], cal_data[0][CAL_OPEN][1]);
chprintf(chp, "%d %d\r\n", cal_data[0][CAL_SHORT][0], cal_data[0][CAL_SHORT][1]);
chprintf(chp, "%d %d\r\n", cal_data[0][CAL_THRU][0], cal_data[0][CAL_THRU][1]);
chprintf(chp, "%d %d\r\n", cal_data[0][CAL_ISOLN][0], cal_data[0][CAL_ISOLN][1]);
return;
} else {
chprintf(chp, "usage: cal {load|open|short|thru|isoln|done}\r\n");
return;
} }
for (i = 0; i < 101; i++) {
cal_data[i][d][0] = measured[i][s][0];
cal_data[i][d][1] = measured[i][s][1];
}
} }

View file

@ -51,6 +51,23 @@ void sweep_tail(void);
void redraw(void); void redraw(void);
void polar_plot(float measured[101][4]); void polar_plot(float measured[101][4]);
extern uint16_t cal_status;
extern float cal_data[101][5][2];
#define CAL_LOAD 0
#define CAL_OPEN 1
#define CAL_SHORT 2
#define CAL_THRU 3
#define CAL_ISOLN 4
#define CALSTAT_LOAD (1<<0)
#define CALSTAT_OPEN (1<<1)
#define CALSTAT_SHORT (1<<2)
#define CALSTAT_THRU (1<<3)
#define CALSTAT_ISOLN (1<<4)
#define CALSTAT_APPLY (1<<5)
void plot_into_index(float measured[101][2][2]); void plot_into_index(float measured[101][2][2]);
void draw_cell_all(void); void draw_cell_all(void);