changeset 9:267326c24a1e

lib: implement multiplication of a signal by a scalar as a gain Signed-off-by: Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
author Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
date Fri, 05 Jun 2020 21:43:23 -0400
parents 7d88dd4875f2
children d61b55994c52
files src/lib/signal/filesource.rs src/lib/signal/gain.rs src/lib/signal/mixer.rs src/lib/signal/sinusoid.rs
diffstat 4 files changed, 73 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/src/lib/signal/filesource.rs	Fri Jun 05 21:40:14 2020 -0400
+++ b/src/lib/signal/filesource.rs	Fri Jun 05 21:43:23 2020 -0400
@@ -25,10 +25,10 @@
 use std::io::BufRead;
 use std::marker::PhantomData;
 
-use crate::IQSample;
+use crate::{IQSample, Scalar};
 use super::Signal;
 use super::SignalFormatter;
-use super::Mixer;
+use super::{Gain, Mixer};
 
 pub struct FileSourceSignal<T: BufRead, U: SignalFormatter> {
     file: T,
@@ -80,3 +80,20 @@
         Mixer::new(self, rhs)
     }
 }
+
+/* add gain to a signal */
+impl<T: BufRead, U: SignalFormatter> Mul<Scalar> for FileSourceSignal<T, U> {
+    type Output = Gain<FileSourceSignal<T, U>>;
+
+    fn mul(self, rhs: Scalar) -> Self::Output {
+        Gain::new(self, rhs)
+    }
+}
+
+impl<T: BufRead, U: SignalFormatter> Mul<FileSourceSignal<T, U>> for Scalar {
+    type Output = Gain<FileSourceSignal<T, U>>;
+
+    fn mul(self, rhs: FileSourceSignal<T, U>) -> Self::Output {
+        Gain::new(rhs, self)
+    }
+}
--- a/src/lib/signal/gain.rs	Fri Jun 05 21:40:14 2020 -0400
+++ b/src/lib/signal/gain.rs	Fri Jun 05 21:43:23 2020 -0400
@@ -72,3 +72,20 @@
         Mixer::new(self, rhs)
     }
 }
+
+/* add gain to a signal */
+impl<T: Signal> Mul<Scalar> for Gain<T> {
+    type Output = Gain<Gain<T>>;
+
+    fn mul(self, rhs: Scalar) -> Self::Output {
+        Gain::new(self, rhs)
+    }
+}
+
+impl<T: Signal> Mul<Gain<T>> for Scalar {
+    type Output = Gain<Gain<T>>;
+
+    fn mul(self, rhs: Gain<T>) -> Self::Output {
+        Gain::new(rhs, self)
+    }
+}
--- a/src/lib/signal/mixer.rs	Fri Jun 05 21:40:14 2020 -0400
+++ b/src/lib/signal/mixer.rs	Fri Jun 05 21:43:23 2020 -0400
@@ -22,8 +22,9 @@
 
 use std::ops::Mul;
 
-use crate::IQSample;
+use crate::{IQSample, Scalar};
 use super::Signal;
+use super::Gain;
 
 pub struct Mixer<T: Signal, U: Signal> {
     rate: u64,
@@ -79,3 +80,20 @@
         Mixer::new(self, rhs)
     }
 }
+
+/* add gain to a signal */
+impl<T: Signal, U: Signal> Mul<Scalar> for Mixer<T, U> {
+    type Output = Gain<Mixer<T, U>>;
+
+    fn mul(self, rhs: Scalar) -> Self::Output {
+        Gain::new(self, rhs)
+    }
+}
+
+impl<T: Signal, U: Signal> Mul<Mixer<T, U>> for Scalar {
+    type Output = Gain<Mixer<T, U>>;
+
+    fn mul(self, rhs: Mixer<T, U>) -> Self::Output {
+        Gain::new(rhs, self)
+    }
+}
--- a/src/lib/signal/sinusoid.rs	Fri Jun 05 21:40:14 2020 -0400
+++ b/src/lib/signal/sinusoid.rs	Fri Jun 05 21:43:23 2020 -0400
@@ -25,7 +25,7 @@
 
 use crate::{IQSample, Scalar};
 use super::Signal;
-use super::Mixer;
+use super::{Gain, Mixer};
 
 pub struct Sinusoid {
     rate: u64,
@@ -85,3 +85,20 @@
         Mixer::new(self, rhs)
     }
 }
+
+/* add gain to a signal */
+impl Mul<Scalar> for Sinusoid {
+    type Output = Gain<Sinusoid>;
+
+    fn mul(self, rhs: Scalar) -> Self::Output {
+        Gain::new(self, rhs)
+    }
+}
+
+impl Mul<Sinusoid> for Scalar {
+    type Output = Gain<Sinusoid>;
+
+    fn mul(self, rhs: Sinusoid) -> Self::Output {
+        Gain::new(rhs, self)
+    }
+}