Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- use std::f64::consts::PI;
- #[derive(Clone)]
- pub struct Biquad {
- b0: f64,
- b1: f64,
- b2: f64,
- a1: f64,
- a2: f64,
- x1: f64,
- x2: f64,
- y1: f64,
- y2: f64,
- }
- impl Biquad {
- pub fn lowpass(sample_rate: f64, cutoff: f64, q: f64) -> Self {
- let omega = 2.0 * PI * cutoff / sample_rate;
- let sin_omega = omega.sin();
- let cos_omega = omega.cos();
- let alpha = sin_omega / (2.0 * q);
- let a0 = 1.0 + alpha;
- Self {
- b0: ((1.0 - cos_omega) / 2.0) / a0,
- b1: (1.0 - cos_omega) / a0,
- b2: ((1.0 - cos_omega) / 2.0) / a0,
- a1: (-2.0 * cos_omega) / a0,
- a2: (1.0 - alpha) / a0,
- x1: 0.0,
- x2: 0.0,
- y1: 0.0,
- y2: 0.0,
- }
- }
- pub fn highpass(sample_rate: f64, cutoff: f64, q: f64) -> Self {
- let omega = 2.0 * PI * cutoff / sample_rate;
- let sin_omega = omega.sin();
- let cos_omega = omega.cos();
- let alpha = sin_omega / (2.0 * q);
- let a0 = 1.0 + alpha;
- Self {
- b0: ((1.0 + cos_omega) / 2.0) / a0,
- b1: (-(1.0 + cos_omega)) / a0,
- b2: ((1.0 + cos_omega) / 2.0) / a0,
- a1: (-2.0 * cos_omega) / a0,
- a2: (1.0 - alpha) / a0,
- x1: 0.0,
- x2: 0.0,
- y1: 0.0,
- y2: 0.0,
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment