#include <stdio.h> #include <stdlib.h> #include <math.h> #include <time.h> #include <sysinfoapi.h> #define DQC 128 // default quantity of channels #define ITR 360 // default quantity of iterations int sign(double x) { if (x >= 0) return 1; else return 0; } int main (int argc, char * argv[]) { int itr; // quantity of iterations double da[DQC] = {0}; // da[i] angle between channel 'i' and '0' // parse command arguments // 1-st argument is the number of iterations // if nothing: number of iterations = ITR if(argc > 1) itr = atoi(argv[1]); if(itr == 0) itr = ITR; double step = 360.0/DQC; // step between channels printf("channels: %d, step: %f\n", DQC, step); for(int i = 0; i < DQC; i++) { da[i] = i * step; // fill in degree printf("[%d]:%.4f ", i, da[i]); // print in degree and ... da[i] = da[i] * M_PI / 180.0; // convert degree values to radians } printf("\n"); srand(GetTickCount()); step = 2 * M_PI / itr; // now step = common turn in 1 iteration (in rad) for(int n = 0; n < itr; n++) { double r = rand() * 2 * M_PI / RAND_MAX; // common hidden parameter int ir[DQC] = {0}; // array of results: '0' and '1' ir[0] = sign(sin(-M_PI + r - n * step)); printf("+%8.4f dg: %d", n * step * 180 / M_PI, ir[0]); for(int i = 1; i < DQC; i++) { ir[i] = sign(sin(r + da[i])); printf("%d", ir[i]); } printf("\n"); } }