60 #ifdef EIGEN_FFTW_DEFAULT
61 fftw_make_planner_thread_safe();
66 int highpasss,lowpasss;
67 int highpass_widths,lowpass_widths;
69 int resp_size = fftLength/2+1;
71 double pi4 =
M_PI/4.0;
74 RowVectorXcd filterFreqResp = RowVectorXcd::Ones(resp_size);
77 highpasss = ((resp_size-1)*highpass)/(0.5*sFreq);
78 lowpasss = ((resp_size-1)*lowpass)/(0.5*sFreq);
80 lowpass_widths = ((resp_size-1)*lowpass_width)/(0.5*sFreq);
81 lowpass_widths = (lowpass_widths+1)/2;
83 if (highpass_width > 0.0) {
84 highpass_widths = ((resp_size-1)*highpass_width)/(0.5*sFreq);
85 highpass_widths = (highpass_widths+1)/2;
93 if (highpasss > highpass_widths + 1) {
98 for (k = 0; k < resp_size; k++)
99 filterFreqResp(k) = 0.0;
101 for (k = -w+1, s = highpasss-w+1; k < w; k++, s++) {
102 if (s >= 0 && s < resp_size) {
103 c = cos(pi4*(k*mult+add));
104 filterFreqResp(s) = filterFreqResp(s).real()*c*c;
108 for (k = std::max(0, highpasss + w); k < resp_size; ++k) {
109 filterFreqResp(k) = 1.0;
116 if (lowpass_widths > 0) {
121 for (k = -w+1, s = lowpasss-w+1; k < w; k++, s++) {
122 if (s >= 0 && s < resp_size) {
123 c = cos(pi4*(k*mult+add));
124 filterFreqResp(s) = filterFreqResp(s).real()*c*c;
128 for (k = s; k < resp_size; k++)
129 filterFreqResp(k) = 0.0;
132 for (k = lowpasss; k < resp_size; k++)
133 filterFreqResp(k) = 0.0;
140 Eigen::FFT<double> fft;
141 fft.SetFlag(fft.HalfSpectrum);