kwave  18.07.70
Kwave::BandPass Class Reference

#include <BandPass.h>

Inheritance diagram for Kwave::BandPass:
Inheritance graph
Collaboration diagram for Kwave::BandPass:
Collaboration graph

Public Slots

void input (Kwave::SampleArray data)
 
void setFrequency (const QVariant fc)
 
void setBandwidth (const QVariant bw)
 

Signals

void output (Kwave::SampleArray data)
 
- Signals inherited from Kwave::StreamObject
void attributeChanged (const QVariant value)
 

Public Member Functions

 BandPass ()
 
virtual ~BandPass () Q_DECL_OVERRIDE
 
virtual void goOn () Q_DECL_OVERRIDE
 
virtual double at (double f) Q_DECL_OVERRIDE
 
- Public Member Functions inherited from Kwave::SampleSource
 SampleSource (QObject *parent=Q_NULLPTR)
 
virtual ~SampleSource ()
 
virtual bool done () const
 
- Public Member Functions inherited from Kwave::StreamObject
 StreamObject (QObject *parent=Q_NULLPTR)
 
virtual ~StreamObject ()
 
virtual unsigned int tracks () const
 
virtual Kwave::StreamObjectoperator[] (unsigned int track)
 
virtual unsigned int tracksOfPort (const char *port) const
 
virtual Kwave::StreamObjectport (const char *port, unsigned int track)
 
virtual unsigned int blockSize () const
 
void setAttribute (const char *attribute, const QVariant &value)
 
- Public Member Functions inherited from Kwave::TransmissionFunction
virtual ~TransmissionFunction ()
 

Private Member Functions

void initFilter ()
 
void setfilter_2polebp (double freq, double R)
 

Private Attributes

Kwave::SampleArray m_buffer
 
double m_frequency
 
double m_bandwidth
 
struct {
   double   cx
 
   double   cx1
 
   double   cx2
 
   double   cy1
 
   double   cy2
 
   double   x
 
   double   x1
 
   double   x2
 
   double   y
 
   double   y1
 
   double   y2
 
m_filter
 

Additional Inherited Members

- Static Public Member Functions inherited from Kwave::StreamObject
static void setInteractive (bool interactive)
 

Detailed Description

Definition at line 36 of file BandPass.h.

Constructor & Destructor Documentation

◆ BandPass()

Kwave::BandPass::BandPass ( )

Constructor

Definition at line 29 of file BandPass.cpp.

References initFilter(), m_bandwidth, m_frequency, and setfilter_2polebp().

30  :Kwave::SampleSource(Q_NULLPTR), m_buffer(blockSize()),
31  m_frequency(0.5), m_bandwidth(0.1)
32 {
33  initFilter();
35 }
void initFilter()
Definition: BandPass.cpp:86
double m_bandwidth
Definition: BandPass.h:99
Kwave::SampleArray m_buffer
Definition: BandPass.h:93
virtual unsigned int blockSize() const
void setfilter_2polebp(double freq, double R)
Definition: BandPass.cpp:100
double m_frequency
Definition: BandPass.h:96
Here is the call graph for this function:

◆ ~BandPass()

Kwave::BandPass::~BandPass ( )
virtual

Destructor

Definition at line 38 of file BandPass.cpp.

39 {
40 }

Member Function Documentation

◆ at()

double Kwave::BandPass::at ( double  f)
virtual
See also
TransmissionFunction::at()

Implements Kwave::TransmissionFunction.

Definition at line 49 of file BandPass.cpp.

References m_filter.

50 {
51  /*
52  * filter function as extracted from the aRts code:
53  *
54  * y[t] = cx*x[t] + cx1*x[t-1] + cx2*x[t-2]
55  * + cy1*y[t-1] + cy2*y[t-2];
56  *
57  * convert filter coefficients to our notation:
58  */
59  double a0, a1, a2, b1, b2;
60  a0 = m_filter.cx;
61  a1 = m_filter.cx1;
62  a2 = m_filter.cx2;
63  b1 = m_filter.cy1;
64  b2 = m_filter.cy2;
65 
66  /*
67  * a0*z^2 + a1*z + a2
68  * H(z) = ------------------ | z = e ^ (j*2*pi*f)
69  * z^2 - b1*z - b0
70  */
71  std::complex<double> h;
72  std::complex<double> w;
73  std::complex<double> j(0.0,1.0);
74  std::complex<double> z;
75 
76  w = f;
77  z = std::exp(j*w);
78 
79  // get h[z] at z=e^jw
80  h = 0.95 * (a0 * (z*z) + (a1*z) + a2) / ((z*z) - (b1*z) - b2);
81 
82  return sqrt(std::norm(h));
83 }
struct Kwave::BandPass::@2 m_filter

◆ goOn()

void Kwave::BandPass::goOn ( )
virtual

does the calculation

Implements Kwave::SampleSource.

Definition at line 43 of file BandPass.cpp.

References m_buffer, and output().

44 {
45  emit output(m_buffer);
46 }
void output(Kwave::SampleArray data)
Kwave::SampleArray m_buffer
Definition: BandPass.h:93

◆ initFilter()

void Kwave::BandPass::initFilter ( )
private

reset/initialize the filter coefficients

Definition at line 86 of file BandPass.cpp.

References m_filter.

Referenced by BandPass(), setBandwidth(), and setFrequency().

87 {
88  m_filter.x1 = 0.0;
89  m_filter.x2 = 0.0;
90  m_filter.y1 = 0.0;
91  m_filter.y2 = 0.0;
92  m_filter.y = 0.0;
93 }
struct Kwave::BandPass::@2 m_filter
Here is the caller graph for this function:

◆ input

void Kwave::BandPass::input ( Kwave::SampleArray  data)
slot

receives input data

Definition at line 110 of file BandPass.cpp.

References double2sample(), m_bandwidth, m_buffer, m_filter, m_frequency, Kwave::SampleArray::resize(), sample2double(), setfilter_2polebp(), and Kwave::SampleArray::size().

111 {
112  const Kwave::SampleArray &in = data;
113 
114  bool ok = m_buffer.resize(in.size());
115  Q_ASSERT(ok);
116  Q_UNUSED(ok);
117 
119 
120  Q_ASSERT(in.size() == m_buffer.size());
121 
122  for (unsigned i = 0; i < in.size(); ++i)
123  {
124  // do the filtering
125  m_filter.x = sample2double(in[i]);
126  m_filter.y =
127  m_filter.cx * m_filter.x +
128  m_filter.cx1 * m_filter.x1 +
129  m_filter.cx2 * m_filter.x2 +
130  m_filter.cy1 * m_filter.y1 +
131  m_filter.cy2 * m_filter.y2;
132  m_filter.x2 = m_filter.x1;
133  m_filter.x1 = m_filter.x;
134  m_filter.y2 = m_filter.y1;
135  m_filter.y1 = m_filter.y;
136  m_buffer[i] = double2sample(0.95 * m_filter.y);
137  }
138 }
struct Kwave::BandPass::@2 m_filter
double m_bandwidth
Definition: BandPass.h:99
Kwave::SampleArray m_buffer
Definition: BandPass.h:93
static double sample2double(const sample_t s)
Definition: Sample.h:73
static sample_t double2sample(const double f)
Definition: Sample.h:81
unsigned int size() const
void setfilter_2polebp(double freq, double R)
Definition: BandPass.cpp:100
bool resize(unsigned int size) Q_REQUIRED_RESULT
double m_frequency
Definition: BandPass.h:96
Here is the call graph for this function:

◆ output

void Kwave::BandPass::output ( Kwave::SampleArray  data)
signal

emits a block with the filtered data

Referenced by goOn().

Here is the caller graph for this function:

◆ setBandwidth

void Kwave::BandPass::setBandwidth ( const QVariant  bw)
slot

Sets the bandwidth, normed to [0...2Pi]. The calculation is: bw = bandwidth [Hz] * 2 * Pi / f_sample [Hz]. The default setting is 0.1.

Definition at line 152 of file BandPass.cpp.

References initFilter(), m_bandwidth, m_frequency, and setfilter_2polebp().

Referenced by Kwave::BandPassDialog::updateDisplay().

153 {
154  double new_bw = QVariant(bw).toDouble();
155  if (qFuzzyCompare(new_bw, m_bandwidth)) return; // nothing to do
156 
157  m_bandwidth = new_bw;
158  initFilter();
160 }
void initFilter()
Definition: BandPass.cpp:86
double m_bandwidth
Definition: BandPass.h:99
void setfilter_2polebp(double freq, double R)
Definition: BandPass.cpp:100
double m_frequency
Definition: BandPass.h:96
Here is the call graph for this function:
Here is the caller graph for this function:

◆ setfilter_2polebp()

void Kwave::BandPass::setfilter_2polebp ( double  freq,
double  R 
)
private

set the coefficients for a given frequency

Parameters
freqnormed frequency
Rnormed bandwidth

Definition at line 100 of file BandPass.cpp.

References m_filter.

Referenced by BandPass(), input(), setBandwidth(), and setFrequency().

101 {
102  m_filter.cx = 1.0 - R;
103  m_filter.cx1 = 0.0;
104  m_filter.cx2 = - (1.0 - R) * R;
105  m_filter.cy1 = 2.0 * R * cos(freq);
106  m_filter.cy2 = -R * R;
107 }
struct Kwave::BandPass::@2 m_filter
Here is the caller graph for this function:

◆ setFrequency

void Kwave::BandPass::setFrequency ( const QVariant  fc)
slot

Sets the center frequency, normed to [0...2Pi]. The calculation is: fc = frequency [Hz] * 2 * Pi / f_sample [Hz]. The default setting is 0.5.

Definition at line 141 of file BandPass.cpp.

References initFilter(), m_bandwidth, m_frequency, and setfilter_2polebp().

Referenced by Kwave::BandPassDialog::updateDisplay().

142 {
143  double new_freq = QVariant(fc).toDouble();
144  if (qFuzzyCompare(new_freq, m_frequency)) return; // nothing to do
145 
146  m_frequency = new_freq;
147  initFilter();
149 }
void initFilter()
Definition: BandPass.cpp:86
double m_bandwidth
Definition: BandPass.h:99
void setfilter_2polebp(double freq, double R)
Definition: BandPass.cpp:100
double m_frequency
Definition: BandPass.h:96
Here is the call graph for this function:
Here is the caller graph for this function:

Member Data Documentation

◆ cx

double Kwave::BandPass::cx

Definition at line 103 of file BandPass.h.

◆ cx1

double Kwave::BandPass::cx1

Definition at line 103 of file BandPass.h.

◆ cx2

double Kwave::BandPass::cx2

Definition at line 103 of file BandPass.h.

◆ cy1

double Kwave::BandPass::cy1

Definition at line 103 of file BandPass.h.

◆ cy2

double Kwave::BandPass::cy2

Definition at line 103 of file BandPass.h.

◆ m_bandwidth

double Kwave::BandPass::m_bandwidth
private

bandwidth

Definition at line 99 of file BandPass.h.

Referenced by BandPass(), input(), setBandwidth(), and setFrequency().

◆ m_buffer

Kwave::SampleArray Kwave::BandPass::m_buffer
private

buffer for input

Definition at line 93 of file BandPass.h.

Referenced by goOn(), and input().

◆ m_filter

struct { ... } Kwave::BandPass::m_filter

structure with the filter coefficients

Referenced by at(), initFilter(), input(), and setfilter_2polebp().

◆ m_frequency

double Kwave::BandPass::m_frequency
private

center frequency

Definition at line 96 of file BandPass.h.

Referenced by BandPass(), input(), setBandwidth(), and setFrequency().

◆ x

double Kwave::BandPass::x

Definition at line 104 of file BandPass.h.

◆ x1

double Kwave::BandPass::x1

Definition at line 104 of file BandPass.h.

◆ x2

double Kwave::BandPass::x2

Definition at line 104 of file BandPass.h.

◆ y

double Kwave::BandPass::y

Definition at line 104 of file BandPass.h.

◆ y1

double Kwave::BandPass::y1

Definition at line 104 of file BandPass.h.

◆ y2

double Kwave::BandPass::y2

Definition at line 104 of file BandPass.h.


The documentation for this class was generated from the following files: