Пример #1
0
void test_fft (size_t exponent)
{
  size_t size = 1 << exponent;

  FFT_C2C fft(exponent);

  for (size_t i = 0; i < size; ++i) {
    float t = 2 * M_PI * (i + 0.5) / size;
    fft.time_in[i] = complex(cos(t), sin(t));
  }

  cout << "time input:" << endl;
  print_complex(fft.time_in, size);

  fft.transform_fwd();

  cout << "freq output:" << endl;
  print_complex(fft.freq_out, size);

  multiply(1.0f/size, fft.freq_out, fft.freq_in);

  fft.transform_bwd();

  cout << "time output:" << endl;
  print_complex(fft.time_out, size);
}
Пример #2
0
main() {
	complex root1, root2, alpha1, alpha2, result;
	complex partial1, partial2;
	int n;

	// set up constants
	root1.real = 1.0;
	root1.imag = 1.0;
	root2.real = 1.0;
	root2.imag = -1.0;

	alpha1.real = 0.5;
	alpha1.imag = -0.5;
	alpha2.real = 0.5;
	alpha2.imag = 0.5;

	// get the value of n with boundries
	n = get_bounded_integer(0, INT_MAX);

	// calculate the result
	partial1 = multiply(alpha1, power(root1, n));
	partial2 = multiply(alpha2, power(root2, n));
	result = add(partial1, partial2);

	// display answer
	printf("f(%d) = %s\n", n, print_complex(result)); 
}
Пример #3
0
int
main()
{
    complex_t *array[NSIZE];
    int size,  i;
    complex_t entry[NSIZE];
    complex_t cno;
    FILE *fp;

    fp = fopen("cdata.txt", "r");
    size = 0;

    while(scan_complex(fp, &cno) == 1) {
	entry[size]=cno;
	array[size]=&entry[size];
	size++;
    }


    printf("array before sorting  = \n");
   	for(i=0;i<size;i++)
	{
	print_complex(entry[i]);
	}


    printf("***end of array****\n");


    select_sort_rec(array, size);


    printf("\narray after sorting   = \n");
    for(i=0;i<size;i++)
        {
        print_complex(*array[i]);
        }


    printf("***end of array****\n");
    fclose(fp);
    return 0;
}
Пример #4
0
main () {
	// main function
	int finished = 0;
	char command [100];
	double re, im, angle,x,y;
	MY_COMPLEX * z;
	while (!finished) {
		scanf ("%s",command);
		if (strncmp(command, "make",6) == 0) {
			scanf("%lf",&re);
			scanf("%lf",&im);
			z = make_complex(re,im);
			printf("make ");
			print_complex(z);
		}
		else if (strncmp(command,"translate",8) == 0) {
			check_complex(z);
			scanf ("%lf", &x);
			scanf ("%lf", &y);
			printf("translate (%g,%g) ",x,y);
			z = translate(z,x,y);
			print_complex(z);
		}
		else if (strncmp(command, "rotate",6) == 0) {
			check_complex(z);
			scanf("%lf", &angle);
			printf("rotate %g degrees ",angle);
			z = rotate(z,angle);
			printf("result ");
			print_complex(z);
		}
		else if (strncmp(command,"print",5) == 0) {
			check_complex(z);
			printf("print ");
			print_complex(z);
		}
		else if (strncmp(command,"quit",4) == 0)
			finished = 1;
		else
			printf ("unrecognised command\n");
	}
	printf("Quitting\n");
}
Пример #5
0
int main() {
	int N;
	int n, p,q,r;
	double *y_r, *y_i, *x_r, *x_i;
	clock_t t1, t2;
    printf("hello midterm \n");
	
	/*
	srand(time(NULL));
	N=10;
	v=(int *) malloc(N *sizeof(int));
	printf("ori   ");
	
	for(i=0;i<N;++i){
		v[i]=rand() % 100;
		//printf("%d,",v[i]);
	}
	 */
	
	printf("input 2^p 3^q 5^r : p q r =>");
	scanf("%d %d %d", &p,&q,&r);
	N = 1 << p;
	N=N*pow(3,q)*pow(5, r);
	printf("N=%d\n",N);
	
	x_r = (double *) malloc(N*sizeof(double));
	x_i = (double *) malloc(N*sizeof(double));
	y_r = (double *) malloc(N*sizeof(double));
	y_i = (double *) malloc(N*sizeof(double));
	
	//initial data
	for(n=0;n<N;++n)
	{
		x_r[n] = n;
		x_i[n] = 0;
	}
	
	t1 = clock();
	fft(x_r, x_i, y_r, y_i, N);
	ifft(y_r, y_i, y_r, y_i, N);
	//
	t2 = clock();
	
	printf("%f secs\n", 1.0*(t2-t1)/CLOCKS_PER_SEC);//print times
	print_complex(y_r, y_i, N);
	
	free(x_r);
	free(x_i);
	free(y_r);
	free(y_i);
	//sort(v,N);
    return 0;
}
Пример #6
0
main()
{
  complex a, b, c, n[2];;
  double real1, imag1, real2, imag2, d, e, f, g, mag, pha;
/*
  a.real = 1.0; a.imag = 1.0;
  b.real = 2.0; b.imag = 2.0;
*/
  printf("\nEnter real part of first number = ");
  scanf("%lf", &real1);
  printf("\nEnter imaginary part of first number = ");
  scanf("%lf", &imag1);
  printf("\nEnter real part of second number = ");
  scanf("%lf", &real2);
  printf("\nEnter imaginary part of second number = ");
  scanf("%lf", &imag2);
  a.real = real1;
  a.imag = imag1;
  b.real = real2;
  b.imag = imag2;
  n[1].real = real1;
  n[1].imag = imag1;
  n[2].real = real2;
  n[2].imag = imag2;

  printf("a = "); print_complex(a); printf("\n");
  printf("b = "); print_complex(b); printf("\n");
  c = add(a,b);
  printf("a + b = "); print_complex(c); printf("\n");
  c = subtract(a,b);
  printf("a - b = "); print_complex(c); printf("\n");
  c = multiply(a,b);
  printf("a * b = "); print_complex(c); printf("\n");
  c = divide(a,b);
  printf("a / b = "); print_complex(c); printf("\n");
  d = realpart(a);
  e = imaginarypart(a);
  printf("real part of a = %lf\n", d);
  printf("imaginary part of a = %lf\n", e);
  f = realpart(b);
  g = imaginarypart(b);
  printf("real part of b = %lf\n", f);
  printf("imaginary part of b = %lf\n", g);
  mag = magnitude(a);
  printf("magnitude of a = %lf\n", mag);
  pha =phase(a);
  printf("phase in radians of a = %lf\n", pha);
  mag = magnitude(b);
  printf("magnitude of b = %lf\n", mag);
  pha = phase(b);
  printf("phase in radians of b = %lf\n", pha);
} 
Пример #7
0
int main() {
    struct Complex *complex = (struct Complex *) calloc(COMPLEX_SIZE_DEFAULT, sizeof(struct Complex));
    int size = COMPLEX_SIZE_DEFAULT;
    int count_of_elements = COMPLEX_SIZE_DEFAULT;
    
    struct Complex c1, c2, result;

    complex[0].re = COMPLEX1_RE;
    complex[0].im = COMPLEX1_IM;
    complex[1].re = COMPLEX2_RE;
    complex[1].im = COMPLEX2_IM;

    c1.re = COMPLEX1_RE;
    c1.im = COMPLEX1_IM;
    c2.re = COMPLEX2_RE;
    c2.im = COMPLEX2_IM;

    while (1) {
        char ch;
		print_main_menu(c1, c2);
        ch = getchar();
        clear_input();
        switch (ch) {
        case '1':
        {
            int index = 0;
            change_complex_interface(&c1, complex, count_of_elements);
            break;
        }
        case '2':
        {
            int index = 1;
            change_complex_interface(&c2, complex, count_of_elements);
            break;
        }
        case 'a':
        case 'A':
            result = add(c1, c2);
            print_complex(result);
            break;
        case 's':
        case 'S':
            result = sub(c1, c2);
            print_complex(result);
            break;
        case 'm':
        case 'M':
            result = mul(c1, c2);
            print_complex(result);
            break;
        case 'd':
        case 'D':
			{
				int error = 0;
				result = division(c1, c2, &error);
				if (!error)
					print_complex(result);
			break;
			}
        case 'r':
        case 'R':
            complex = read_file_interface(complex, &size, &count_of_elements);
            break;
        case 'w':
        case 'W':
            complex = write_file_interface(complex, &size, &count_of_elements);
            break;
        case 'q':
        case 'Q':
            return 0;
        default:
            printf("Incorrect input, please choose an existing element\n");
        }
    }
    return 0;
}