Mercurial > hg > qm-dsp
comparison base/KaiserWindow.cpp @ 483:fdaa63607c15
Untabify, indent, tidy
author | Chris Cannam <cannam@all-day-breakfast.com> |
---|---|
date | Fri, 31 May 2019 11:54:32 +0100 |
parents | 5ff562f5b521 |
children |
comparison
equal
deleted
inserted
replaced
482:cbe668c7d724 | 483:fdaa63607c15 |
---|---|
15 | 15 |
16 #include "maths/MathUtilities.h" | 16 #include "maths/MathUtilities.h" |
17 | 17 |
18 KaiserWindow::Parameters | 18 KaiserWindow::Parameters |
19 KaiserWindow::parametersForTransitionWidth(double attenuation, | 19 KaiserWindow::parametersForTransitionWidth(double attenuation, |
20 double transition) | 20 double transition) |
21 { | 21 { |
22 Parameters p; | 22 Parameters p; |
23 p.length = 1 + (attenuation > 21.0 ? | 23 p.length = 1 + (attenuation > 21.0 ? |
24 ceil((attenuation - 7.95) / (2.285 * transition)) : | 24 ceil((attenuation - 7.95) / (2.285 * transition)) : |
25 ceil(5.79 / transition)); | 25 ceil(5.79 / transition)); |
26 p.beta = (attenuation > 50.0 ? | 26 p.beta = (attenuation > 50.0 ? |
27 0.1102 * (attenuation - 8.7) : | 27 0.1102 * (attenuation - 8.7) : |
28 attenuation > 21.0 ? | 28 attenuation > 21.0 ? |
29 0.5842 * pow(attenuation - 21.0, 0.4) + 0.07886 * (attenuation - 21.0) : | 29 0.5842 * pow(attenuation - 21.0, 0.4) + 0.07886 * (attenuation - 21.0) : |
30 0); | 30 0); |
31 return p; | 31 return p; |
32 } | 32 } |
33 | 33 |
34 static double besselTerm(double x, int i) | 34 static double besselTerm(double x, int i) |
35 { | 35 { |
36 if (i == 0) { | 36 if (i == 0) { |
37 return 1; | 37 return 1; |
38 } else { | 38 } else { |
39 double f = MathUtilities::factorial(i); | 39 double f = MathUtilities::factorial(i); |
40 return pow(x/2, i*2) / (f*f); | 40 return pow(x/2, i*2) / (f*f); |
41 } | 41 } |
42 } | 42 } |
43 | 43 |
44 static double bessel0(double x) | 44 static double bessel0(double x) |
45 { | 45 { |
46 double b = 0.0; | 46 double b = 0.0; |
47 for (int i = 0; i < 20; ++i) { | 47 for (int i = 0; i < 20; ++i) { |
48 b += besselTerm(x, i); | 48 b += besselTerm(x, i); |
49 } | 49 } |
50 return b; | 50 return b; |
51 } | 51 } |
52 | 52 |
53 void | 53 void |
54 KaiserWindow::init() | 54 KaiserWindow::init() |
55 { | 55 { |
56 double denominator = bessel0(m_beta); | 56 double denominator = bessel0(m_beta); |
57 bool even = (m_length % 2 == 0); | 57 bool even = (m_length % 2 == 0); |
58 for (int i = 0; i < (even ? m_length/2 : (m_length+1)/2); ++i) { | 58 for (int i = 0; i < (even ? m_length/2 : (m_length+1)/2); ++i) { |
59 double k = double(2*i) / double(m_length-1) - 1.0; | 59 double k = double(2*i) / double(m_length-1) - 1.0; |
60 m_window.push_back(bessel0(m_beta * sqrt(1.0 - k*k)) / denominator); | 60 m_window.push_back(bessel0(m_beta * sqrt(1.0 - k*k)) / denominator); |
61 } | 61 } |
62 for (int i = 0; i < (even ? m_length/2 : (m_length-1)/2); ++i) { | 62 for (int i = 0; i < (even ? m_length/2 : (m_length-1)/2); ++i) { |
63 m_window.push_back(m_window[int(m_length/2) - i - 1]); | 63 m_window.push_back(m_window[int(m_length/2) - i - 1]); |
64 } | 64 } |
65 } | 65 } |