30 m_buffer(blockSize()), m_f_cutoff(M_PI), m_f_bw(M_PI / 2)
57 double a0, a1, a2, b1, b2;
69 std::complex<double> h;
70 std::complex<double> w;
71 std::complex<double> j(0.0,1.0);
72 std::complex<double> z;
78 h = 0.95 * (a0 * (z*z) + (a1*z) + a2) / ((z*z) - (b1*z) - b2);
80 return sqrt(std::norm(h));
100 const double gdb = -100;
101 double k, w, bwr, abw, gain;
103 k = pow(10.0, gdb / 20.0);
108 abw = (1.0 - tan(bwr / 2.0)) / (1.0 + tan(bwr / 2.0));
109 gain = 0.5 * (1.0 + k + abw - k * abw);
111 m_filter.cx1 = gain * (-2.0 * cos(w) * (1.0 + abw)) /
112 (1.0 + k + abw - k * abw);
113 m_filter.cx2 = gain * (abw + k * abw + 1.0 - k) /
114 (abw - k * abw + 1.0 + k);
115 m_filter.cy1 = 2.0 * cos(w) / (1.0 + tan(bwr / 2.0));
129 for (
unsigned i = 0; i < in.
size(); ++i)
150 double new_freq = QVariant(fc).toDouble();
151 if (qFuzzyCompare(new_freq,
m_f_cutoff))
return;
161 double new_bw = QVariant(bw).toDouble();
162 if (qFuzzyCompare(new_bw,
m_f_bw))
return;
void setBandwidth(const QVariant bw)
virtual double at(double f) Q_DECL_OVERRIDE
Kwave::SampleArray m_buffer
struct Kwave::NotchFilter::@14 m_filter
virtual void goOn() Q_DECL_OVERRIDE
static double sample2double(const sample_t s)
void setFrequency(const QVariant fc)
void input(Kwave::SampleArray data)
static sample_t double2sample(const double f)
void setfilter_peaknotch2(double freq, double bw)
unsigned int size() const
virtual ~NotchFilter() Q_DECL_OVERRIDE
bool resize(unsigned int size) Q_REQUIRED_RESULT
void output(Kwave::SampleArray data)