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