Mercurial > dsp > rdsp
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) + } +}