1 /*******************************************************************************
2 * Copyright 2009-2016 Jörg Müller
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 ******************************************************************************/
16
17 #include "fx/HighpassCalculator.h"
18
19 #include <cmath>
20
21 AUD_NAMESPACE_BEGIN
22
HighpassCalculator(float frequency,float Q)23 HighpassCalculator::HighpassCalculator(float frequency, float Q) :
24 m_frequency(frequency),
25 m_Q(Q)
26 {
27 }
28
recalculateCoefficients(SampleRate rate,std::vector<float> & b,std::vector<float> & a)29 void HighpassCalculator::recalculateCoefficients(SampleRate rate, std::vector<float> &b, std::vector<float> &a)
30 {
31 float w0 = 2.0 * M_PI * (SampleRate)m_frequency / rate;
32 float alpha = (float)(std::sin(w0) / (2.0 * (double)m_Q));
33 float norm = 1 + alpha;
34 float c = std::cos(w0);
35 a.push_back(1);
36 a.push_back(-2 * c / norm);
37 a.push_back((1 - alpha) / norm);
38 b.push_back((1 + c) / (2 * norm));
39 b.push_back((-1 - c) / norm);
40 b.push_back(b[0]);
41 }
42
43 AUD_NAMESPACE_END
44