83 #ifdef EIGEN_FFTW_DEFAULT
84 fftw_make_planner_thread_safe();
89 int highpasss,lowpasss;
90 int highpass_widths,lowpass_widths;
92 int resp_size = fftLength/2+1;
94 double pi4 =
M_PI/4.0;
97 RowVectorXcd filterFreqResp = RowVectorXcd::Ones(resp_size);
100 highpasss = ((resp_size-1)*highpass)/(0.5*sFreq);
101 lowpasss = ((resp_size-1)*lowpass)/(0.5*sFreq);
103 lowpass_widths = ((resp_size-1)*lowpass_width)/(0.5*sFreq);
104 lowpass_widths = (lowpass_widths+1)/2;
106 if (highpass_width > 0.0) {
107 highpass_widths = ((resp_size-1)*highpass_width)/(0.5*sFreq);
108 highpass_widths = (highpass_widths+1)/2;
116 if (highpasss > highpass_widths + 1) {
121 for (k = 0; k < resp_size; k++)
122 filterFreqResp(k) = 0.0;
124 for (k = -w+1, s = highpasss-w+1; k < w; k++, s++) {
125 if (s >= 0 && s < resp_size) {
126 c = cos(pi4*(k*mult+add));
127 filterFreqResp(s) = filterFreqResp(s).real()*c*c;
131 for (k = std::max(0, highpasss + w); k < resp_size; ++k) {
132 filterFreqResp(k) = 1.0;
139 if (lowpass_widths > 0) {
144 for (k = -w+1, s = lowpasss-w+1; k < w; k++, s++) {
145 if (s >= 0 && s < resp_size) {
146 c = cos(pi4*(k*mult+add));
147 filterFreqResp(s) = filterFreqResp(s).real()*c*c;
151 for (k = s; k < resp_size; k++)
152 filterFreqResp(k) = 0.0;
155 for (k = lowpasss; k < resp_size; k++)
156 filterFreqResp(k) = 0.0;
163 Eigen::FFT<double> fft;
164 fft.SetFlag(fft.HalfSpectrum);