SigPack - the C++ signal processing library
 
Loading...
Searching...
No Matches
window.h
Go to the documentation of this file.
1// This Source Code Form is subject to the terms of the Mozilla Public
2// License, v. 2.0. If a copy of the MPL was not distributed with this
3// file, You can obtain one at http://mozilla.org/MPL/2.0/.
4#ifndef SP_WINDOW_H
5#define SP_WINDOW_H
6
7namespace sp
8{
16
26arma_inline arma::vec cos_win( const arma::uword N, const arma::vec& a )
27{
28 arma::vec h( N );
29 for( arma::uword i = 0; i < N; i++ )
30 {
31 h[i] = a[0] - a[1] * std::cos( 1.0 * PI_2 * i / ( N - 1 ) ) + a[2] * std::cos( 2.0 * PI_2 * i / ( N - 1 ) ) - a[3] * std::cos( 3.0 * PI_2 * i / ( N - 1 ) )
32 + a[4] * std::cos( 4.0 * PI_2 * i / ( N - 1 ) );
33 }
34 return h;
35}
36
43arma_inline arma::vec hamming( const arma::uword N )
44{
45 arma::vec a = arma::zeros<arma::vec>( 5 );
46 a[0] = 0.54;
47 a[1] = 0.46;
48 return cos_win( N, a );
49}
50
57arma_inline arma::vec hann( const arma::uword N )
58{
59 arma::vec a = arma::zeros<arma::vec>( 5 );
60 a[0] = 0.5;
61 a[1] = 0.5;
62 return cos_win( N, a );
63}
64
71arma_inline arma::vec blackman( const arma::uword N )
72{
73 arma::vec a = arma::zeros<arma::vec>( 5 );
74 a[0] = 0.42; // 7938/18608.0
75 a[1] = 0.5; // 9240/18608.0
76 a[2] = 0.08; // 1430/18608.0
77 return cos_win( N, a );
78}
79
88arma_inline arma::vec blackmanharris( const arma::uword N )
89{
90 arma::vec a = arma::zeros<arma::vec>( 5 );
91 a[0] = 0.35875;
92 a[1] = 0.48829;
93 a[2] = 0.14128;
94 a[3] = 0.01168;
95 return cos_win( N, a );
96}
97
105arma_inline arma::vec flattopwin( const arma::uword N )
106{
107 arma::vec a = arma::zeros<arma::vec>( 5 );
108 a[0] = 0.21557895;
109 a[1] = 0.41663158;
110 a[2] = 0.277263158;
111 a[3] = 0.083578947;
112 a[4] = 0.006947368;
113 return cos_win( N, a );
114}
115
122arma_inline arma::vec hanning( const arma::uword N )
123{
124 arma::vec h( N );
125 for( arma::uword i = 0; i < N; i++ )
126 {
127 h[i] = 0.5 - 0.5 * std::cos( PI_2 * ( i + 1 ) / ( N + 1 ) );
128 }
129 return h;
130}
131
140arma_inline arma::vec kaiser( const arma::uword N, double beta )
141{
142 arma::vec h( N );
143 double bb = besseli0( beta );
144 for( arma::uword i = 0; i < N; i++ )
145 {
146 h[i] = besseli0( beta * sqrt( 4.0 * i * ( N - 1 - i ) ) / ( N - 1 ) ) / bb;
147 }
148 return h;
149}
150
158arma_inline arma::vec triang( const arma::uword N )
159{
160 arma::vec h( N );
161 if( N % 2 ) // Odd
162 {
163 for( arma::uword i = 0; i < ( N - 1 ) / 2; i++ )
164 {
165 h[i] = 2.0 * ( i + 1 ) / ( N + 1 );
166 h[N - i - 1] = h[i];
167 }
168 h[( N - 1 ) / 2] = 1.0;
169 }
170 else // Even
171 {
172 for( arma::uword i = 0; i < N / 2; i++ )
173 {
174 h[i] = ( 2.0 * i + 1 ) / N;
175 h[N - i - 1] = h[i];
176 }
177 }
178 return h;
179}
180
182} // namespace sp
183#endif
arma_inline double besseli0(double x)
Modified first kind bessel function order zero.
Definition base.h:51
const double PI_2
Definition base.h:15
arma_inline arma::vec hann(const arma::uword N)
Hann window.
Definition window.h:57
arma_inline arma::vec blackman(const arma::uword N)
Blackman window.
Definition window.h:71
arma_inline arma::vec triang(const arma::uword N)
Triangle window.
Definition window.h:158
arma_inline arma::vec cos_win(const arma::uword N, const arma::vec &a)
Generic fifth order symmetric cos window.
Definition window.h:26
arma_inline arma::vec hamming(const arma::uword N)
Hamming window.
Definition window.h:43
arma_inline arma::vec blackmanharris(const arma::uword N)
Blackman-Harris window. Symmetric BH4 window.
Definition window.h:88
arma_inline arma::vec flattopwin(const arma::uword N)
Flattop window.
Definition window.h:105
arma_inline arma::vec hanning(const arma::uword N)
Hanning window.
Definition window.h:122
arma_inline arma::vec kaiser(const arma::uword N, double beta)
Kaiser window.
Definition window.h:140
Definition base.h:8