Closed mgill404 closed 10 years ago
I've been digging all day and found that std::polar(theta, rho) returns NaN if theta is negative. How is this being circumvented in the demo project?
I am able to circumvent the NaN return from std::polar by adding std:abs() to the parameters. The fix is below.
addPoleZeroConjugatePairs (std::polar (gp, theta), std::polar (gz, theta));
addPoleZeroConjugatePairs (std::polar (std::abs(gp), theta), std::polar (std::abs(gz), theta));
I'm a little unsure whether this is the correct fix. While it makes the assertion go away, the minus signs seem to be intentionally put there: const double gp = -1. / g; const double gz = -g; Does the filter work as expected after this change?
I am getting this Assertion failed for Butterworth low shelf, high shelf, and band shelf filters. The assertion failed happens when the order of the filter is raised above 1. I am setting up the filter using the following code snippets.
Dsp::Filter *filter = 0; filter = new Dsp::SmoothedFilterDesign Dsp::Butterworth::Design::BandShelf<50,2 > (1024);
m_params[0] = SampleRate; m_params[1] = Order; m_params[2] = Freq; m_params[3] = Gain; filter->setParams(m_params);
This causes the following statements to return false, and I cannot determine what would be making that happen.
template
inline bool is_nan (Ty v)
{
return !(v == v);
}
template <> inline bool is_nan (complex_t v)
{
return Dsp::is_nan (v.real()) || Dsp::is_nan (v.imag());
}
This arrangement works for many other filters, but it is not working for me if the order is greater than 1 for Butterworth shelf filters.