Guest User

Untitled

a guest
Mar 20th, 2026
85
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Rust 1.42 KB | None | 0 0
  1. use std::f64::consts::PI;
  2.  
  3. #[derive(Clone)]
  4. pub struct Biquad {
  5.     b0: f64,
  6.     b1: f64,
  7.     b2: f64,
  8.     a1: f64,
  9.     a2: f64,
  10.     x1: f64,
  11.     x2: f64,
  12.     y1: f64,
  13.     y2: f64,
  14. }
  15.  
  16. impl Biquad {
  17.     pub fn lowpass(sample_rate: f64, cutoff: f64, q: f64) -> Self {
  18.         let omega = 2.0 * PI * cutoff / sample_rate;
  19.         let sin_omega = omega.sin();
  20.         let cos_omega = omega.cos();
  21.         let alpha = sin_omega / (2.0 * q);
  22.  
  23.         let a0 = 1.0 + alpha;
  24.  
  25.         Self {
  26.             b0: ((1.0 - cos_omega) / 2.0) / a0,
  27.             b1: (1.0 - cos_omega) / a0,
  28.             b2: ((1.0 - cos_omega) / 2.0) / a0,
  29.             a1: (-2.0 * cos_omega) / a0,
  30.             a2: (1.0 - alpha) / a0,
  31.             x1: 0.0,
  32.             x2: 0.0,
  33.             y1: 0.0,
  34.             y2: 0.0,
  35.         }
  36.     }
  37.  
  38.     pub fn highpass(sample_rate: f64, cutoff: f64, q: f64) -> Self {
  39.         let omega = 2.0 * PI * cutoff / sample_rate;
  40.         let sin_omega = omega.sin();
  41.         let cos_omega = omega.cos();
  42.         let alpha = sin_omega / (2.0 * q);
  43.  
  44.         let a0 = 1.0 + alpha;
  45.  
  46.         Self {
  47.             b0: ((1.0 + cos_omega) / 2.0) / a0,
  48.             b1: (-(1.0 + cos_omega)) / a0,
  49.             b2: ((1.0 + cos_omega) / 2.0) / a0,
  50.             a1: (-2.0 * cos_omega) / a0,
  51.             a2: (1.0 - alpha) / a0,
  52.             x1: 0.0,
  53.             x2: 0.0,
  54.             y1: 0.0,
  55.             y2: 0.0,
  56.         }
  57.     }
  58. }
Advertisement
Add Comment
Please, Sign In to add comment