From 2d9a5a5bfb4981c7abb05585e52df2ce198f624a Mon Sep 17 00:00:00 2001
From: Matt McPherrin <git@mcpherrin.ca>
Date: Thu, 16 Jul 2015 15:57:23 -0700
Subject: [PATCH] Change sample_rate to u32 -- float doesn't make sense there

---
 README.md  |  5 +++--
 src/lib.rs | 10 +++++-----
 2 files changed, 8 insertions(+), 7 deletions(-)

diff --git a/README.md b/README.md
index f837e12..e1ae2d5 100644
--- a/README.md
+++ b/README.md
@@ -1,5 +1,6 @@
 Goertzel
 --------
 
-The Goertzel Algoritm is a simplified discrete fourier transform, useful for
-tone detection.
+The Goertzel Algoritm is a single-bin discrete fourier transform, useful for
+tone detection with a small number of tones.  This has not yet been extensively
+tested, but appears to basically work.
diff --git a/src/lib.rs b/src/lib.rs
index 5afbd29..1fec395 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -22,8 +22,8 @@ pub struct Partial {
 }
 
 impl Parameters {
-    pub fn new(target_freq: f32, sample_rate: f32, window_size: usize) -> Self {
-        let k = target_freq * (window_size as f32) / sample_rate;
+    pub fn new(target_freq: f32, sample_rate: u32, window_size: usize) -> Self {
+        let k = target_freq * (window_size as f32) / (sample_rate as f32);
         let omega = (f32::consts::PI * 2. * k) / (window_size as f32);
         let cosine = omega.cos();
         Parameters {
@@ -64,7 +64,7 @@ impl Partial {
 
 #[test]
 fn zero_data() {
-    let p = Parameters::new(1800., 8000., 256);
+    let p = Parameters::new(1800., 8000, 256);
     assert!(p.start().add(&[0; 256]).finish_mag() == 0.);
     assert!(p.start().add(&[0; 128]).add(&[0;128]).finish_mag() == 0.);
 }
@@ -80,10 +80,10 @@ fn sine() {
             buf[sample] = ((time * freq * 2. * PI).sin()*std::i16::MAX as f32) as i16;
         }
 
-        let p = Parameters::new(freq, 8000., 8000);
+        let p = Parameters::new(freq, 8000, 8000);
         let mag = p.start().add(&buf[..]).finish_mag();
         for testfreq in (0 .. 30).map(|x| (x * 100) as f32) {
-            let p = Parameters::new(testfreq, 8000., 8000);
+            let p = Parameters::new(testfreq, 8000, 8000);
             let testmag = p.start().add(&buf[..]).finish_mag();
             println!("{:4}: {:12.3}", testfreq, testmag);
             if (freq-testfreq).abs() > 100. {
-- 
GitLab