Files
RedBookPlayer/RedBookPlayer.Models/Hardware/DeEmphasisFilter.cs

48 lines
1.5 KiB
C#
Raw Normal View History

2021-03-19 17:07:27 -03:00
using System;
using NWaves.Filters.BiQuad;
2021-07-12 15:40:56 -07:00
namespace RedBookPlayer.Models.Hardware
2021-03-19 17:07:27 -03:00
{
2021-06-06 21:37:48 -07:00
/// <summary>
/// Filter for applying de-emphasis to audio
/// </summary>
2021-03-19 17:07:27 -03:00
public class DeEmphasisFilter : BiQuadFilter
{
2021-06-06 21:37:48 -07:00
private static readonly double B0;
private static readonly double B1;
private static readonly double B2;
private static readonly double A0;
private static readonly double A1;
private static readonly double A2;
2021-03-19 17:07:27 -03:00
static DeEmphasisFilter()
{
2021-06-06 20:28:36 +01:00
double fc = 5277;
2021-03-19 17:07:27 -03:00
double slope = 0.4850;
2021-06-06 20:28:36 +01:00
double gain = -9.465;
2021-03-19 17:07:27 -03:00
2021-06-06 20:28:36 +01:00
double w0 = 2 * Math.PI * fc / 44100;
double A = Math.Exp(gain / 40 * Math.Log(10));
double alpha = Math.Sin(w0) / 2 * Math.Sqrt(((A + (1 / A)) * ((1 / slope) - 1)) + 2);
2021-03-19 17:07:27 -03:00
double cs = Math.Cos(w0);
2021-06-06 20:28:36 +01:00
double v = 2 * Math.Sqrt(A) * alpha;
2021-03-19 17:07:27 -03:00
2021-06-06 20:28:36 +01:00
B0 = A * (A + 1 + ((A - 1) * cs) + v);
B1 = -2 * A * (A - 1 + ((A + 1) * cs));
B2 = A * (A + 1 + ((A - 1) * cs) - v);
A0 = A + 1 - ((A - 1) * cs) + v;
A1 = 2 * (A - 1 - ((A + 1) * cs));
A2 = A + 1 - ((A - 1) * cs) - v;
2021-03-19 17:07:27 -03:00
B2 /= A0;
B1 /= A0;
B0 /= A0;
A2 /= A0;
A1 /= A0;
2021-06-06 20:28:36 +01:00
A0 = 1;
2021-03-19 17:07:27 -03:00
}
2021-06-06 20:28:36 +01:00
public DeEmphasisFilter() : base(B0, B1, B2, A0, A1, A2) {}
2021-03-19 17:07:27 -03:00
}
}