64#ifdef EIGEN_FFTW_DEFAULT
65 fftw_make_planner_thread_safe();
70 int highpasss, lowpasss;
71 int highpass_widths, lowpass_widths;
73 int resp_size = fftLength / 2 + 1;
75 double pi4 =
M_PI / 4.0;
78 RowVectorXcd filterFreqResp = RowVectorXcd::Ones(resp_size);
81 highpasss = ((resp_size - 1) * highpass) / (0.5 * sFreq);
82 lowpasss = ((resp_size - 1) * lowpass) / (0.5 * sFreq);
84 lowpass_widths = ((resp_size - 1) * lowpass_width) / (0.5 * sFreq);
85 lowpass_widths = (lowpass_widths + 1) / 2;
87 if (highpass_width > 0.0) {
88 highpass_widths = ((resp_size - 1) * highpass_width) / (0.5 * sFreq);
89 highpass_widths = (highpass_widths + 1) / 2;
96 if (highpasss > highpass_widths + 1) {
101 for (k = 0; k < resp_size; k++)
102 filterFreqResp(k) = 0.0;
104 for (k = -w + 1, s = highpasss - w + 1; k < w; k++, s++) {
105 if (s >= 0 && s < resp_size) {
106 c = cos(pi4 * (k * mult + add));
107 filterFreqResp(s) = filterFreqResp(s).real() * c * c;
111 for (k = std::max(0, highpasss + w); k < resp_size; ++k) {
112 filterFreqResp(k) = 1.0;
119 if (lowpass_widths > 0) {
124 for (k = -w + 1, s = lowpasss - 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 = s; k < resp_size; k++)
132 filterFreqResp(k) = 0.0;
134 for (k = lowpasss; k < resp_size; k++)
135 filterFreqResp(k) = 0.0;
142 Eigen::FFT<double> fft;
143 fft.SetFlag(fft.HalfSpectrum);