Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // given double[] x as the input signal
- n = x.length; // assume n is a power of 2
- nu = (int)(Math.log(n)/Math.log(2));
- int n2 = n/2;
- int nu1 = nu - 1;
- double[] xre = new double[n];
- double[] xim = new double[n];
- double[] mag = new double[n2];
- double tr, ti, p, arg, c, s;
- for (int i = 0; i < n; i++) {
- xre[i] = x[i];
- xim[i] = 0.0;
- }
- int k = 0;
- for (int l = 1; l <= nu; l++) {
- while (k < n) {
- for (int i = 1; i <= n2; i++) {
- p = bitrev (k >> nu1);
- arg = 2 * (double) Math.PI * p / n;
- c = (double) Math.cos (arg);
- s = (double) Math.sin (arg);
- tr = xre[k+n2]*c + xim[k+n2]*s;
- ti = xim[k+n2]*c - xre[k+n2]*s;
- xre[k+n2] = xre[k] - tr;
- xim[k+n2] = xim[k] - ti;
- xre[k] += tr;
- xim[k] += ti;
- k++;
- }
- k += n2;
- }
- k = 0;
- nu1--;
- n2 = n2/2;
- }
- k = 0;
- int r;
- while (k < n) {
- r = bitrev (k);
- if (r > k) {
- tr = xre[k];
- ti = xim[k];
- xre[k] = xre[r];
- xim[k] = xim[r];
- xre[r] = tr;
- xim[r] = ti;
- }
- k++;
- }
- // The result
- // -> real part stored in xre
- // -> imaginary part stored in xim
Add Comment
Please, Sign In to add comment