#include #include #include #define RECORDING_SAMPLES 80000 // 記録する時間 (秒) #define WAITING_SAMPLES 40000 // 制御開始時刻 (秒) #define REFMIC_OFFSET -0.0025 // マイクアンプのオフセット電圧 #define U_MAX 1.25 // PIC の D/A 0〜2.5V 出力にあわせるため, 変更 //#define S 16 // y にかけるスケーリング 0.2msec //#define S 64 // y にかけるスケーリング 0.5msec //#define S 32 // y にかけるスケーリング 0.75msec // S.dat から S を読み込むように変更 (2007.10.22) //#define S 256 #define INTERVAL 6 // 0.125msec 毎に記録,0.75msec 毎に制御入力を更新 #define BUF_SIZE 1000 #include "def.h" // 次数 N 等の定義 //typedef signed short base_class; typedef int base_class; base_class *x; base_class x_tmp; base_class y_data, y, u, sum, p, tmp, u_data; int main(int argc, char *argv[]) { char buf[BUF_SIZE]; float y0, t, dummy; int count, i, j, count_interval, S; FILE *fp, *fp2, *fp0; fp0 = fopen("data/S.dat", "r"); if(fp0 == NULL){ fprintf(stderr, "cannot open S.dat\n"); exit(1); } fscanf(fp0, "%d", &S); fp = fopen("data/simu_shift_binary.dat", "w"); if(fp == NULL){ fprintf(stderr, "cannot open simu.dat\n"); exit(1); } fp2 = fopen("data/result.dat", "r"); if(fp2 == NULL){ fprintf(stderr, "cannot open result.dat\n"); exit(1); } // 初期化 x = malloc(N * sizeof(base_class)); for(i = 0; i < N; i++){ x[i] = 0; } u = 0; count_interval = 0; for(count = 0; count < RECORDING_SAMPLES; count++){ fgets(buf, BUF_SIZE, fp2); sscanf(buf, "%f %f %f", &t, &dummy, &y0); y_data = (int)((y0 + 5 + REFMIC_OFFSET) * 4096. / 10.); y = S * ((y_data >> 2) - 509); // AD の分解能を落とす(12 bit → 8 bit) if(count > WAITING_SAMPLES){ count_interval++; if(count_interval == INTERVAL){ count_interval = 0; //#include "binary_code.c" #include "cx_0.c" #include "cx_1.c" #include "dy.c" #include "ax_0.c" #include "ax_1.c" } } fprintf(fp, "%g %d", t, u); for(i = 0; i < N; i++){ fprintf(fp, " %d", x[i]); } fprintf(fp, "\n"); } fclose(fp); fclose(fp2); return 0; }