Explorar el Código

TODO: Change FFT library

Andrea Condoluci hace 9 años
padre
commit
e1919b0e6b
Se han modificado 4 ficheros con 33 adiciones y 17 borrados
  1. 10 8
      Gruntfile.js
  2. 1 1
      package.json
  3. 8 8
      src/Util/fft.ts
  4. 14 0
      test/Util/fft.ts

+ 10 - 8
Gruntfile.js

@@ -1,5 +1,6 @@
 module.exports = function (grunt) {
     'use strict';
+    // The banner on top of the build
     var banner = '/**\n' +
         ' * Open Sheet Music Display <%= pkg.version %> built on <%= grunt.template.today("yyyy-mm-dd") %>.\n' +
         ' * Copyright (c) 2016 PhonicScore\n' +
@@ -64,7 +65,7 @@ module.exports = function (grunt) {
             }
           }
         },*/
-        // Settings for tests
+        // CI setup
         karma: {
             // For continuous integration
             ci: {
@@ -118,10 +119,11 @@ module.exports = function (grunt) {
                 src: ['<%= browserify.dist.src %>', '<%= browserify.debug.src %>']
             }
         },
-        // TypeScript type definitions
+        // TypeScript Type Definitions
         typings: {
             install: {}
         },
+        //
         docco: {
             src: ['src/**/*.ts'],
             options: {
@@ -129,7 +131,7 @@ module.exports = function (grunt) {
                 output: 'build/docs'
             }
         },
-        // Settings for clean task
+        // Cleaning task setup
         clean: {
             options: {
                 force: true
@@ -149,18 +151,18 @@ module.exports = function (grunt) {
     grunt.loadNpmTasks('grunt-browserify');
     grunt.loadNpmTasks('grunt-contrib-clean');
     grunt.loadNpmTasks('grunt-contrib-watch');
-    //grunt.loadNpmTasks('grunt-jscs');
+    // grunt.loadNpmTasks('grunt-jscs');
     grunt.loadNpmTasks('grunt-karma');
     grunt.loadNpmTasks('grunt-tslint');
     grunt.loadNpmTasks('grunt-typings');
 
     // Register tasks
+    grunt.registerTask('all', ['typings', 'default']);
     grunt.registerTask('default', [ /*'tslint',*/ 'browserify', 'karma:ci']);
-    //grunt.registerTask('lint', ['tslint', 'jscs']);
+    // grunt.registerTask('lint', ['tslint', 'jscs']);
     grunt.registerTask('test', ['browserify:debug', 'karma:ci']);
-    //grunt.registerTask('test debug Firefox', ['browserify:debug', 'karma:debugWithFirefox']);
-    //grunt.registerTask('test debug Chrome', ['browserify:debug', 'karma:debugWithChrome']);
+    // grunt.registerTask('test debug Firefox', ['browserify:debug', 'karma:debugWithFirefox']);
+    // grunt.registerTask('test debug Chrome', ['browserify:debug', 'karma:debugWithChrome']);
     grunt.registerTask('rebuild', ['clean', 'default']);
     grunt.registerTask('publish', ['clean', 'browserify:dist']);
-    grunt.registerTask('all', ['typings', 'default']);
 };

+ 1 - 1
package.json

@@ -55,6 +55,6 @@
 
         "vexflow": "",
 
-        "fft": "0.2.*"
+        "fft": "0.2.1"
     }
 }

+ 8 - 8
src/Util/fft.ts

@@ -1,20 +1,20 @@
-import FFT = require("fft");
+import FFT = require("FFT");
 
-module fft {
+export class fft {
 
-  export function toRealImag(timeData: Float64Array): { imag: Float64Array; real: Float64Array; } {
+  public static toRealImag(timeData: number[]): { imag: Float64Array; real: Float64Array; } {
     let n: number = timeData.length;
     let fft: any = new FFT.complex(2 * n, false);
     let output: Float64Array = new Float64Array(2 * n);
-    let input: Float64Array = new Float64Array(2 * n);
+    let input: Float64Array = new Float64Array(n);
     // copy timeData into the input array
     // FIXME: is this fix needed?
     // problem: complex transform, real timeData
     for (let i: number = 0; i < n; i++) {
-      input[2 * i] = timeData[i];
-      input[2 * i + 1] = 0;
+      input[i] = timeData[i];
+      //input[2 * i + 1] = 0;
     }
-    fft.simple(output, input, "complex");
+    fft.simple(output, input, "real");
     // Split output in real/imaginary parts
     let real: Float64Array = new Float64Array(n);
     let imag: Float64Array = new Float64Array(n);
@@ -25,7 +25,7 @@ module fft {
     return {imag: imag, real: real};
   }
 
-  export function toAmplPhas(timeData: Float64Array): { amplitude: Float64Array; phase: Float64Array; } {
+  public static toAmplPhas(timeData: Float64Array): { amplitude: Float64Array; phase: Float64Array; } {
     let n: number = timeData.length;
     let fft: any = new FFT.complex(2 * n, false);
     let output: Float64Array = new Float64Array(2 * n);

+ 14 - 0
test/Util/fft.ts

@@ -0,0 +1,14 @@
+import { fft } from "../../src/Util/fft";
+
+describe("Fast Fourier Transform tests:", () => {
+    describe("test1?", () => {
+      let array: number[] = [0.5, 0.5, 0.5];
+      let res: { imag: Float64Array; real: Float64Array; } = fft.toRealImag(array);
+
+        it("will succeed", (done: MochaDone) => {
+            console.log(res.imag[0], res.real[0]);
+            console.log(JSON.stringify(res));
+            done();
+        });
+    });
+});