Skip to content

notthetup/goertzel-filter

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

34 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

goertzel-filter

a goertzel algorithm implementation optimized for asm.js

The Goertzel algorithm is a Digital Signal Processing (DSP) technique that provides a means for efficient evaluation of individual terms of the Discrete Fourier Transform (DFT),

-Wikipedia

This package implements the goertzel algorithm in asm.js. On browsers that support asm.js this package is designed to run as fast the math as possible. So it can be called repeatedly in real-time implementations such as goertzel-node

Usage

This can run both in a browser or in nodejs.

nodejs

npm install goertzel-filter

var gf = require('goertzel-filter');

var frequencyToDetect = 440;
var sampleRate = 44100;
var chunkSize = 128;

gf.init(frequencyToDetect, sampleRate, chunkSize);

var sample = new Float32Array(chunkSize);
// fill up samples with some data here.

var result = gf.run(sample);

browser

A standalone browserified file is also available here, which creates a global named GoertzelFilter when included in the html.

<script src="/dist/goertzel.js"></script>
<script>
	var gf = GoertzelFilter;

	var frequencyToDetect = 440;
	var sampleRate = 44100;
	var chunkSize = 128;

	gf.init(frequencyToDetect, sampleRate, chunkSize);

	var sample = new Float32Array(chunkSize);
	// fill up samples with some data here.

	var result = gf.run(sample);
</script>

API

Methods

  • init : Initializes the goertzel algorithm to detect a specific frequency, given a sampling rate and chunk size.

    • eg :
     gf.init(frequencyToDetect, sampleRate, chunkSize);
    • arguments:
      • frequencyToDetect : Number - The frequency (in Hz) to be detected.
      • sampleRate : Number - Sampling rate of the signal being analyzed.
      • chunkSize : Number - Length of data to be processed during each run of the algorithm.
  • run : Run the goertzel algorithm on the given chunk of data to determine if it has any energy in the frequency to be detected. Returns the power of the signal in that frequency bucket. Can be called multiple times on the successive chunks of a stream of data.

    • eg :
     gf.run(sample);
    • arguments:

      • sample : Float32Array - An array of data to be analyzed. The size of the array has to be equal to the chunkSize used during the init.
    • returns: Returns the power of the signal at frequencyToDetect. The higher the number the more (relative) power was detected at that frequency. This value is normalised to chunkSize and should be about 0.25 for a perfect match.

License

MIT

See License file

About

goertzel filter implementation in js optimised for asm.js

Resources

License

Stars

Watchers

Forks

Packages

No packages published