parent
f511c02ee8
commit
20364d445f
@ -0,0 +1 @@
|
||||
/biquad-0.4.2.crate
|
@ -0,0 +1,8 @@
|
||||
--- biquad-0.4.2/Cargo.toml 1970-01-01T00:00:01+00:00
|
||||
+++ biquad-0.4.2/Cargo.toml 2023-07-22T15:54:37.244965+00:00
|
||||
@@ -21,4 +21,4 @@
|
||||
license = "MIT OR Apache-2.0"
|
||||
repository = "https://github.com/korken89/biquad-rs"
|
||||
[dependencies.libm]
|
||||
-version = "0.1.4"
|
||||
+version = "0.2"
|
@ -0,0 +1,268 @@
|
||||
diff --git a/src/coefficients.rs b/src/coefficients.rs
|
||||
index 52c3d1f..c8e0c4b 100644
|
||||
--- a/src/coefficients.rs
|
||||
+++ b/src/coefficients.rs
|
||||
@@ -40,8 +40,7 @@
|
||||
use crate::{frequency::Hertz, Errors};
|
||||
|
||||
// For some reason this is not detected properly
|
||||
-#[allow(unused_imports)]
|
||||
-use libm::{F32Ext, F64Ext};
|
||||
+use libm::{tan, sin, cos, pow, tanf, sinf, cosf, powf, sqrt, sqrtf};
|
||||
|
||||
/// Common Q value of the Butterworth low-pass filter
|
||||
pub const Q_BUTTERWORTH_F32: f32 = core::f32::consts::FRAC_1_SQRT_2;
|
||||
@@ -111,7 +110,7 @@ impl Coefficients<f32> {
|
||||
})
|
||||
}
|
||||
Type::SinglePoleLowPass => {
|
||||
- let omega_t = (omega / 2.0).tan();
|
||||
+ let omega_t = tanf(omega / 2.0);
|
||||
let a0 = 1.0 + omega_t;
|
||||
|
||||
Ok(Coefficients {
|
||||
@@ -126,8 +125,8 @@ impl Coefficients<f32> {
|
||||
// The code for omega_s/c and alpha is currently duplicated due to the single pole
|
||||
// low pass filter not needing it and when creating coefficients are commonly
|
||||
// assumed to be of low computational complexity.
|
||||
- let omega_s = omega.sin();
|
||||
- let omega_c = omega.cos();
|
||||
+ let omega_s = sinf(omega);
|
||||
+ let omega_c = cosf(omega);
|
||||
let alpha = omega_s / (2.0 * q_value);
|
||||
|
||||
let b0 = (1.0 - omega_c) * 0.5;
|
||||
@@ -146,8 +145,8 @@ impl Coefficients<f32> {
|
||||
})
|
||||
}
|
||||
Type::HighPass => {
|
||||
- let omega_s = omega.sin();
|
||||
- let omega_c = omega.cos();
|
||||
+ let omega_s = sinf(omega);
|
||||
+ let omega_c = cosf(omega);
|
||||
let alpha = omega_s / (2.0 * q_value);
|
||||
|
||||
let b0 = (1.0 + omega_c) * 0.5;
|
||||
@@ -166,8 +165,8 @@ impl Coefficients<f32> {
|
||||
})
|
||||
}
|
||||
Type::BandPass => {
|
||||
- let omega_s = omega.sin();
|
||||
- let omega_c = omega.cos();
|
||||
+ let omega_s = sinf(omega);
|
||||
+ let omega_c = cosf(omega);
|
||||
let alpha = omega_s / (2.0 * q_value);
|
||||
|
||||
let b0 = omega_s / 2.0;
|
||||
@@ -188,8 +187,8 @@ impl Coefficients<f32> {
|
||||
})
|
||||
}
|
||||
Type::Notch => {
|
||||
- let omega_s = omega.sin();
|
||||
- let omega_c = omega.cos();
|
||||
+ let omega_s = sinf(omega);
|
||||
+ let omega_c = cosf(omega);
|
||||
let alpha = omega_s / (2.0 * q_value);
|
||||
|
||||
let b0 = 1.0;
|
||||
@@ -208,8 +207,8 @@ impl Coefficients<f32> {
|
||||
})
|
||||
}
|
||||
Type::AllPass => {
|
||||
- let omega_s = omega.sin();
|
||||
- let omega_c = omega.cos();
|
||||
+ let omega_s = sinf(omega);
|
||||
+ let omega_c = cosf(omega);
|
||||
let alpha = omega_s / (2.0 * q_value);
|
||||
|
||||
let b0 = 1.0 - alpha;
|
||||
@@ -228,17 +227,17 @@ impl Coefficients<f32> {
|
||||
})
|
||||
}
|
||||
Type::LowShelf(db_gain) => {
|
||||
- let a = 10.0f32.powf(db_gain / 40.0);
|
||||
- let omega_s = omega.sin();
|
||||
- let omega_c = omega.cos();
|
||||
+ let a = powf(10.0f32,db_gain / 40.0);
|
||||
+ let omega_s = sinf(omega);
|
||||
+ let omega_c = cosf(omega);
|
||||
let alpha = omega_s / (2.0 * q_value);
|
||||
|
||||
- let b0 = a * ((a + 1.0) - (a - 1.0) * omega_c + 2.0 * alpha * a.sqrt());
|
||||
+ let b0 = a * ((a + 1.0) - (a - 1.0) * omega_c + 2.0 * alpha * sqrtf(a));
|
||||
let b1 = 2.0 * a * ((a - 1.0) - (a + 1.0) * omega_c);
|
||||
- let b2 = a * ((a + 1.0) - (a - 1.0) * omega_c - 2.0 * alpha * a.sqrt());
|
||||
- let a0 = (a + 1.0) + (a - 1.0) * omega_c + 2.0 * alpha * a.sqrt();
|
||||
+ let b2 = a * ((a + 1.0) - (a - 1.0) * omega_c - 2.0 * alpha * sqrtf(a));
|
||||
+ let a0 = (a + 1.0) + (a - 1.0) * omega_c + 2.0 * alpha * sqrtf(a);
|
||||
let a1 = -2.0 * ((a - 1.0) + (a + 1.0) * omega_c);
|
||||
- let a2 = (a + 1.0) + (a - 1.0) * omega_c - 2.0 * alpha * a.sqrt();
|
||||
+ let a2 = (a + 1.0) + (a - 1.0) * omega_c - 2.0 * alpha * sqrtf(a);
|
||||
|
||||
Ok(Coefficients {
|
||||
a1: a1 / a0,
|
||||
@@ -249,17 +248,17 @@ impl Coefficients<f32> {
|
||||
})
|
||||
}
|
||||
Type::HighShelf(db_gain) => {
|
||||
- let a = 10.0f32.powf(db_gain / 40.0);
|
||||
- let omega_s = omega.sin();
|
||||
- let omega_c = omega.cos();
|
||||
+ let a = powf(10.0f32,db_gain / 40.0);
|
||||
+ let omega_s = sinf(omega);
|
||||
+ let omega_c = cosf(omega);
|
||||
let alpha = omega_s / (2.0 * q_value);
|
||||
|
||||
- let b0 = a * ((a + 1.0) + (a - 1.0) * omega_c + 2.0 * alpha * a.sqrt());
|
||||
+ let b0 = a * ((a + 1.0) + (a - 1.0) * omega_c + 2.0 * alpha * sqrtf(a));
|
||||
let b1 = -2.0 * a * ((a - 1.0) + (a + 1.0) * omega_c);
|
||||
- let b2 = a * ((a + 1.0) + (a - 1.0) * omega_c - 2.0 * alpha * a.sqrt());
|
||||
- let a0 = (a + 1.0) - (a - 1.0) * omega_c + 2.0 * alpha * a.sqrt();
|
||||
+ let b2 = a * ((a + 1.0) + (a - 1.0) * omega_c - 2.0 * alpha * sqrtf(a));
|
||||
+ let a0 = (a + 1.0) - (a - 1.0) * omega_c + 2.0 * alpha * sqrtf(a);
|
||||
let a1 = 2.0 * ((a - 1.0) - (a + 1.0) * omega_c);
|
||||
- let a2 = (a + 1.0) - (a - 1.0) * omega_c - 2.0 * alpha * a.sqrt();
|
||||
+ let a2 = (a + 1.0) - (a - 1.0) * omega_c - 2.0 * alpha * sqrtf(a);
|
||||
|
||||
Ok(Coefficients {
|
||||
a1: a1 / a0,
|
||||
@@ -270,9 +269,9 @@ impl Coefficients<f32> {
|
||||
})
|
||||
}
|
||||
Type::PeakingEQ(db_gain) => {
|
||||
- let a = 10.0f32.powf(db_gain / 40.0);
|
||||
- let omega_s = omega.sin();
|
||||
- let omega_c = omega.cos();
|
||||
+ let a = powf(10.0f32,db_gain / 40.0);
|
||||
+ let omega_s = sinf(omega);
|
||||
+ let omega_c = cosf(omega);
|
||||
let alpha = omega_s / (2.0 * q_value);
|
||||
|
||||
let b0 = 1.0 + alpha * a;
|
||||
@@ -327,7 +326,7 @@ impl Coefficients<f64> {
|
||||
})
|
||||
}
|
||||
Type::SinglePoleLowPass => {
|
||||
- let omega_t = (omega / 2.0).tan();
|
||||
+ let omega_t = tan(omega / 2.0);
|
||||
let a0 = 1.0 + omega_t;
|
||||
|
||||
Ok(Coefficients {
|
||||
@@ -342,8 +341,8 @@ impl Coefficients<f64> {
|
||||
// The code for omega_s/c and alpha is currently duplicated due to the single pole
|
||||
// low pass filter not needing it and when creating coefficients are commonly
|
||||
// assumed to be of low computational complexity.
|
||||
- let omega_s = omega.sin();
|
||||
- let omega_c = omega.cos();
|
||||
+ let omega_s = sin(omega);
|
||||
+ let omega_c = cos(omega);
|
||||
let alpha = omega_s / (2.0 * q_value);
|
||||
|
||||
let b0 = (1.0 - omega_c) * 0.5;
|
||||
@@ -364,8 +363,8 @@ impl Coefficients<f64> {
|
||||
})
|
||||
}
|
||||
Type::HighPass => {
|
||||
- let omega_s = omega.sin();
|
||||
- let omega_c = omega.cos();
|
||||
+ let omega_s = sin(omega);
|
||||
+ let omega_c = cos(omega);
|
||||
let alpha = omega_s / (2.0 * q_value);
|
||||
|
||||
let b0 = (1.0 + omega_c) * 0.5;
|
||||
@@ -386,8 +385,8 @@ impl Coefficients<f64> {
|
||||
})
|
||||
}
|
||||
Type::Notch => {
|
||||
- let omega_s = omega.sin();
|
||||
- let omega_c = omega.cos();
|
||||
+ let omega_s = sin(omega);
|
||||
+ let omega_c = cos(omega);
|
||||
let alpha = omega_s / (2.0 * q_value);
|
||||
|
||||
let b0 = 1.0;
|
||||
@@ -408,8 +407,8 @@ impl Coefficients<f64> {
|
||||
})
|
||||
}
|
||||
Type::BandPass => {
|
||||
- let omega_s = omega.sin();
|
||||
- let omega_c = omega.cos();
|
||||
+ let omega_s = sin(omega);
|
||||
+ let omega_c = cos(omega);
|
||||
let alpha = omega_s / (2.0 * q_value);
|
||||
|
||||
let b0 = omega_s / 2.0;
|
||||
@@ -430,8 +429,8 @@ impl Coefficients<f64> {
|
||||
})
|
||||
}
|
||||
Type::AllPass => {
|
||||
- let omega_s = omega.sin();
|
||||
- let omega_c = omega.cos();
|
||||
+ let omega_s = sin(omega);
|
||||
+ let omega_c = cos(omega);
|
||||
let alpha = omega_s / (2.0 * q_value);
|
||||
|
||||
let b0 = 1.0 - alpha;
|
||||
@@ -450,17 +449,17 @@ impl Coefficients<f64> {
|
||||
})
|
||||
}
|
||||
Type::LowShelf(db_gain) => {
|
||||
- let a = 10.0f64.powf(db_gain / 40.0);
|
||||
- let omega_s = omega.sin();
|
||||
- let omega_c = omega.cos();
|
||||
+ let a = pow(10.0f64,db_gain / 40.0);
|
||||
+ let omega_s = sin(omega);
|
||||
+ let omega_c = cos(omega);
|
||||
let alpha = omega_s / (2.0 * q_value);
|
||||
|
||||
- let b0 = a * ((a + 1.0) - (a - 1.0) * omega_c + 2.0 * alpha * a.sqrt());
|
||||
+ let b0 = a * ((a + 1.0) - (a - 1.0) * omega_c + 2.0 * alpha * sqrt(a));
|
||||
let b1 = 2.0 * a * ((a - 1.0) - (a + 1.0) * omega_c);
|
||||
- let b2 = a * ((a + 1.0) - (a - 1.0) * omega_c - 2.0 * alpha * a.sqrt());
|
||||
- let a0 = (a + 1.0) + (a - 1.0) * omega_c + 2.0 * alpha * a.sqrt();
|
||||
+ let b2 = a * ((a + 1.0) - (a - 1.0) * omega_c - 2.0 * alpha * sqrt(a));
|
||||
+ let a0 = (a + 1.0) + (a - 1.0) * omega_c + 2.0 * alpha * sqrt(a);
|
||||
let a1 = -2.0 * ((a - 1.0) + (a + 1.0) * omega_c);
|
||||
- let a2 = (a + 1.0) + (a - 1.0) * omega_c - 2.0 * alpha * a.sqrt();
|
||||
+ let a2 = (a + 1.0) + (a - 1.0) * omega_c - 2.0 * alpha * sqrt(a);
|
||||
|
||||
Ok(Coefficients {
|
||||
a1: a1 / a0,
|
||||
@@ -471,17 +470,17 @@ impl Coefficients<f64> {
|
||||
})
|
||||
}
|
||||
Type::HighShelf(db_gain) => {
|
||||
- let a = 10.0f64.powf(db_gain / 40.0);
|
||||
- let omega_s = omega.sin();
|
||||
- let omega_c = omega.cos();
|
||||
+ let a = pow(10.0f64,db_gain / 40.0);
|
||||
+ let omega_s = sin(omega);
|
||||
+ let omega_c = cos(omega);
|
||||
let alpha = omega_s / (2.0 * q_value);
|
||||
|
||||
- let b0 = a * ((a + 1.0) + (a - 1.0) * omega_c + 2.0 * alpha * a.sqrt());
|
||||
+ let b0 = a * ((a + 1.0) + (a - 1.0) * omega_c + 2.0 * alpha * sqrt(a));
|
||||
let b1 = -2.0 * a * ((a - 1.0) + (a + 1.0) * omega_c);
|
||||
- let b2 = a * ((a + 1.0) + (a - 1.0) * omega_c - 2.0 * alpha * a.sqrt());
|
||||
- let a0 = (a + 1.0) - (a - 1.0) * omega_c + 2.0 * alpha * a.sqrt();
|
||||
+ let b2 = a * ((a + 1.0) + (a - 1.0) * omega_c - 2.0 * alpha * sqrt(a));
|
||||
+ let a0 = (a + 1.0) - (a - 1.0) * omega_c + 2.0 * alpha * sqrt(a);
|
||||
let a1 = 2.0 * ((a - 1.0) - (a + 1.0) * omega_c);
|
||||
- let a2 = (a + 1.0) - (a - 1.0) * omega_c - 2.0 * alpha * a.sqrt();
|
||||
+ let a2 = (a + 1.0) - (a - 1.0) * omega_c - 2.0 * alpha * sqrt(a);
|
||||
|
||||
Ok(Coefficients {
|
||||
a1: a1 / a0,
|
||||
@@ -492,9 +491,9 @@ impl Coefficients<f64> {
|
||||
})
|
||||
}
|
||||
Type::PeakingEQ(db_gain) => {
|
||||
- let a = 10.0f64.powf(db_gain / 40.0);
|
||||
- let omega_s = omega.sin();
|
||||
- let omega_c = omega.cos();
|
||||
+ let a = pow(10.0f64,db_gain / 40.0);
|
||||
+ let omega_s = sin(omega);
|
||||
+ let omega_c = cos(omega);
|
||||
let alpha = omega_s / (2.0 * q_value);
|
||||
|
||||
let b0 = 1.0 + alpha * a;
|
@ -0,0 +1,76 @@
|
||||
# Generated by rust2rpm 24
|
||||
%bcond_without check
|
||||
%global debug_package %{nil}
|
||||
|
||||
%global crate biquad
|
||||
|
||||
Name: rust-biquad
|
||||
Version: 0.4.2
|
||||
Release: %autorelease
|
||||
Summary: Library for digital second order IIR filtrers, also known as biquads
|
||||
|
||||
License: MIT OR Apache-2.0
|
||||
URL: https://crates.io/crates/biquad
|
||||
Source: %{crates_source}
|
||||
# Manually created patch for downstream crate metadata changes
|
||||
# * bump libm to 0.2
|
||||
Patch: biquad-fix-metadata.diff
|
||||
# Update to support libm 0.2
|
||||
# https://github.com/melodyaheath/biquad-rs/commit/848d9392f081bf53c02b02c256cb3b60cbbf4afc
|
||||
Patch: biquad-libm0.2.patch
|
||||
|
||||
BuildRequires: rust-packaging >= 21
|
||||
|
||||
%global _description %{expand:
|
||||
A library for digital second order IIR filtrers, also known as biquads.}
|
||||
|
||||
%description %{_description}
|
||||
|
||||
%package devel
|
||||
Summary: %{summary}
|
||||
BuildArch: noarch
|
||||
|
||||
%description devel %{_description}
|
||||
|
||||
This package contains library source intended for building other packages which
|
||||
use the "%{crate}" crate.
|
||||
|
||||
%files devel
|
||||
%license %{crate_instdir}/LICENSE-APACHE
|
||||
%license %{crate_instdir}/LICENSE-MIT
|
||||
%doc %{crate_instdir}/CHANGELOG.md
|
||||
%doc %{crate_instdir}/README.md
|
||||
%{crate_instdir}/
|
||||
|
||||
%package -n %{name}+default-devel
|
||||
Summary: %{summary}
|
||||
BuildArch: noarch
|
||||
|
||||
%description -n %{name}+default-devel %{_description}
|
||||
|
||||
This package contains library source intended for building other packages which
|
||||
use the "default" feature of the "%{crate}" crate.
|
||||
|
||||
%files -n %{name}+default-devel
|
||||
%ghost %{crate_instdir}/Cargo.toml
|
||||
|
||||
%prep
|
||||
%autosetup -n %{crate}-%{version_no_tilde} -p1
|
||||
%cargo_prep
|
||||
|
||||
%generate_buildrequires
|
||||
%cargo_generate_buildrequires
|
||||
|
||||
%build
|
||||
%cargo_build
|
||||
|
||||
%install
|
||||
%cargo_install
|
||||
|
||||
%if %{with check}
|
||||
%check
|
||||
%cargo_test
|
||||
%endif
|
||||
|
||||
%changelog
|
||||
%autochangelog
|
Loading…
Reference in new issue