Guest User

Untitled

a guest
Jul 21st, 2018
94
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.38 KB | None | 0 0
  1. // given double[] x as the input signal
  2.  
  3. n = x.length; // assume n is a power of 2
  4. nu = (int)(Math.log(n)/Math.log(2));
  5. int n2 = n/2;
  6. int nu1 = nu - 1;
  7. double[] xre = new double[n];
  8. double[] xim = new double[n];
  9. double[] mag = new double[n2];
  10. double tr, ti, p, arg, c, s;
  11. for (int i = 0; i < n; i++) {
  12. xre[i] = x[i];
  13. xim[i] = 0.0;
  14. }
  15. int k = 0;
  16.  
  17. for (int l = 1; l <= nu; l++) {
  18. while (k < n) {
  19. for (int i = 1; i <= n2; i++) {
  20. p = bitrev (k >> nu1);
  21. arg = 2 * (double) Math.PI * p / n;
  22. c = (double) Math.cos (arg);
  23. s = (double) Math.sin (arg);
  24. tr = xre[k+n2]*c + xim[k+n2]*s;
  25. ti = xim[k+n2]*c - xre[k+n2]*s;
  26. xre[k+n2] = xre[k] - tr;
  27. xim[k+n2] = xim[k] - ti;
  28. xre[k] += tr;
  29. xim[k] += ti;
  30. k++;
  31. }
  32. k += n2;
  33. }
  34. k = 0;
  35. nu1--;
  36. n2 = n2/2;
  37. }
  38. k = 0;
  39. int r;
  40. while (k < n) {
  41. r = bitrev (k);
  42. if (r > k) {
  43. tr = xre[k];
  44. ti = xim[k];
  45. xre[k] = xre[r];
  46. xim[k] = xim[r];
  47. xre[r] = tr;
  48. xim[r] = ti;
  49. }
  50. k++;
  51. }
  52. // The result
  53. // -> real part stored in xre
  54. // -> imaginary part stored in xim
Add Comment
Please, Sign In to add comment