Hello Adrian,
Thank you for the gnuradio information. I'm happy to hear I won't need to
build a later version.
I spent several hours experimenting with pulseaudio daemon.conf parameters
after discovering the manual page. Apparently the CPU overhead of resampling
can be overcome by setting the pulseaudio sample rate the same as the source.
As gqrx has a fixed audio sample rate of 48K, I "default-sample-rate = 48000",
and set "resample-method = trivial" as the man page indicated this is best for
low CPU overhead. The upshot of my experimenting with pulseaudio daemon
parameters resulted in a very slight increase in audio signal intelligibility.
I don't think further pounding on pulseaudio will result in overcoming the
audio issue.
With regard to "diving into the gqrx code," I'm not a C programmer, but have
successfully modified C source code in the distant past (mid '80s) to
successfully achieve my goals. (Things have progressed a significantly since
then.) I agree; modifying gqrx is probably my only hope of successfully
running gqrx on the RPi3. I did a search of the gqrx source code for "filter"
and generated the list below. Without imposing on your kindness too much more,
perhaps you might provide me with a clue of where to start. If this is too
painful, I completely understand.
I am grateful for all the support you have provided in my Quixotic quest to get
my Airspy/Spyverter operational on the RPi3.
Best regards,
Larry
PS:
You mentioned that you have gqrx running under Debian Jessie on your phone.
What phone is that? Is it a quad-core processor or octo-core?
On Sun, 17 Jul 2016 15:49:08 +0000, Adrian Musceac <
kant...@gmail.com> wrote:
>Hi Larry,
>I see you already have gnuradio running with hardfp-orc optimizations, so compiling from source is unlikely to improve things. Also, 4000 as a sample.rate will just lead to upsampling in Pulseaudio since most cards can't handle anything below 8000.
>
>If you're comfortable diving into the code of Gqrx, you could go and tweak all the filters in the chain. This will have a dramatic effect since a sharper filter with more taps will take a lot more iterations and CPU cycles.
>
>cheers,
>Adrian
=======================================================================
>./receivers/nbrx.cpp: filter = make_rx_filter(PREF_QUAD_RATE, -5000.0, 5000.0, 1000.0);
>./receivers/nbrx.cpp: connect(nb, 0, filter, 0);
>./receivers/nbrx.cpp: connect(filter, 0, meter, 0);
>./receivers/nbrx.cpp: connect(filter, 0, sql, 0);
>./receivers/nbrx.cpp:void nbrx::set_filter(double low, double high, double tw)
>./receivers/nbrx.cpp: filter->set_param(low, high, tw);
>./receivers/nbrx.cpp: filter->set_cw_offset(offset);
>./receivers/nbrx.h:#include "dsp/rx_filter.h"
>./receivers/nbrx.h: void set_filter(double low, double high, double tw);
>./receivers/nbrx.h: rx_filter_sptr filter; /*!< Non-translating bandpass filter.*/
>./receivers/wfmrx.h:#include "dsp/rx_filter.h"
>./receivers/wfmrx.h: void set_filter(double low, double high, double tw);
>./receivers/wfmrx.h: rx_filter_sptr filter; /*!< Non-translating bandpass filter.*/
>./receivers/wfmrx.cpp: filter = make_rx_filter(PREF_QUAD_RATE, -80000.0, 80000.0, 20000.0);
>./receivers/wfmrx.cpp: connect(iq_resamp, 0, filter, 0);
>./receivers/wfmrx.cpp: connect(filter, 0, meter, 0);
>./receivers/wfmrx.cpp: connect(filter, 0, sql, 0);
>./receivers/wfmrx.cpp:void wfmrx::set_filter(double low, double high, double tw)
>./receivers/wfmrx.cpp: filter->set_param(low, high, tw);
>./receivers/receiver_base.h: virtual void set_filter(double low, double high, double tw) = 0;
>./applications/gqrx/remote_control.h: qint64 rc_filter_offset;
>./applications/gqrx/mainwindow.cpp: d_filter_shape = receiver::FILTER_SHAPE_NORMAL;
>./applications/gqrx/mainwindow.cpp: connect(uiDockRxOpt, SIGNAL(filterOffsetChanged(qint64)), this, SLOT(setFilterOffset(qint64)));
>./applications/gqrx/mainwindow.cpp: connect(uiDockRxOpt, SIGNAL(filterOffsetChanged(qint64)), remote, SLOT(setFilterOffset(qint64)));
>./applications/gqrx/mainwindow.cpp: qint64 hw_freq = int64_val - d_lnb_lo - (qint64)(rx->get_filter_offset());
>./applications/gqrx/mainwindow.cpp: (qint64)(rx->get_filter_offset()) + d_lnb_lo;
>./applications/gqrx/mainwindow.cpp: * frequency range, the selected filter offset and the LNB LO.
>./applications/gqrx/mainwindow.cpp: * This function must therefore be called whenever the LNB LO or the filter
>./applications/gqrx/mainwindow.cpp: qint64 start = (qint64)(rx->get_filter_offset()) + d_hw_freq_start + d_lnb_lo;
>./applications/gqrx/mainwindow.cpp: qint64 stop = (qint64)(rx->get_filter_offset()) + d_hw_freq_stop + d_lnb_lo;
>./applications/gqrx/mainwindow.cpp: double hw_freq = (double)(rx_freq-d_lnb_lo) - rx->get_filter_offset();
>./applications/gqrx/mainwindow.cpp: qint64 center_freq = rx_freq - (qint64)rx->get_filter_offset();
>./applications/gqrx/mainwindow.cpp: * @brief Set new channel filter offset.
>./applications/gqrx/mainwindow.cpp: * @param freq_hz The new filter offset in Hz.
>./applications/gqrx/mainwindow.cpp: rx->set_filter_offset((double) freq_hz);
>./applications/gqrx/mainwindow.cpp: qint64 filter_offset = (qint64)rx->get_filter_offset();
>./applications/gqrx/mainwindow.cpp: ui->freqCtrl->setFrequency(d_lnb_lo + freq + filter_offset);
>./applications/gqrx/mainwindow.cpp: * and configures the default channel filter.
>./applications/gqrx/mainwindow.cpp: int filter_preset = uiDockRxOpt->currentFilter();
>./applications/gqrx/mainwindow.cpp: uiDockRxOpt->getFilterPreset(mode_idx, filter_preset, &flo, &fhi);
>./applications/gqrx/mainwindow.cpp: d_filter_shape = (receiver::filter_shape)uiDockRxOpt->currentFilterShape();
>./applications/gqrx/mainwindow.cpp: rx->set_filter((double)flo, (double)fhi, d_filter_shape);
>./applications/gqrx/mainwindow.cpp: /* update filter */
>./applications/gqrx/mainwindow.cpp: rx->set_filter(-5000.0, 5000.0, d_filter_shape);
>./applications/gqrx/mainwindow.cpp: rx->set_filter(-35000.0, 35000.0, d_filter_shape);
>./applications/gqrx/mainwindow.cpp: // set RX filter
>./applications/gqrx/mainwindow.cpp: rx->set_filter_offset((double) delta);
>./applications/gqrx/mainwindow.cpp: // update RF freq label and channel filter offset
>./applications/gqrx/mainwindow.cpp:/* CPlotter::NewfilterFreq() is emitted */
>./applications/gqrx/mainwindow.cpp: retcode = rx->set_filter((double) low, (double) high, d_filter_shape);
>./applications/gqrx/receiver.cpp: d_filter_offset(0.0),
>./applications/gqrx/receiver.cpp: * @brief Set filter offset.
>./applications/gqrx/receiver.cpp: * @param offset_hz The desired filter offset in Hz.
>./applications/gqrx/receiver.cpp: * @sa get_filter_offset()
>./applications/gqrx/receiver.cpp:receiver::status receiver::set_filter_offset(double offset_hz)
>./applications/gqrx/receiver.cpp: d_filter_offset = offset_hz;
>./applications/gqrx/receiver.cpp: lo->set_frequency(-d_filter_offset + d_cw_offset);
>./applications/gqrx/receiver.cpp: * @brief Get filter offset.
>./applications/gqrx/receiver.cpp: * @return The current filter offset.
>./applications/gqrx/receiver.cpp: * @sa set_filter_offset()
>./applications/gqrx/receiver.cpp:double receiver::get_filter_offset(void) const
>./applications/gqrx/receiver.cpp: return d_filter_offset;
>./applications/gqrx/receiver.cpp: lo->set_frequency(-d_filter_offset + d_cw_offset);
>./applications/gqrx/receiver.cpp:receiver::status receiver::set_filter(double low, double high, filter_shape shape)
>./applications/gqrx/receiver.cpp: rx->set_filter(low, high, trans_width);
>./applications/gqrx/receiver.cpp: * is located after the band pass filter. The full scale is 1.0
>./applications/gqrx/remote_control.cpp: rc_filter_offset = 0;
>./applications/gqrx/remote_control.cpp: rc_filter_offset = settings->value("receiver/offset", 0).toInt(&conv_ok);
>./applications/gqrx/remote_control.cpp: // Mode and filter
>./applications/gqrx/remote_control.cpp: * hardware frequency + the filter offset.
>./applications/gqrx/remote_control.cpp:/*! \brief Slot called when the filter offset is changed. */
>./applications/gqrx/remote_control.cpp: rc_filter_offset = freq;
>./applications/gqrx/remote_control.cpp: if (std::abs(rc_filter_offset + delta) < bw_half)
>./applications/gqrx/remote_control.cpp: // move filter offset
>./applications/gqrx/remote_control.cpp: rc_filter_offset += delta;
>./applications/gqrx/remote_control.cpp: emit newFilterOffset(rc_filter_offset);
>./applications/gqrx/remote_control.cpp: // reset the filter_offset, otherwise the MainWindo will preserve it
>./applications/gqrx/remote_control.cpp: rc_filter_offset = 0;
>./applications/gqrx/remote_control.cpp: emit newFilterOffset(rc_filter_offset);
>./applications/gqrx/mainwindow.h: enum receiver::filter_shape d_filter_shape;
>./applications/gqrx/mainwindow.h: void on_plotter_newDemodFreq(qint64 freq, qint64 delta); /*! New demod freq (aka. filter offset). */
>./applications/gqrx/mainwindow.h: void on_plotter_newFilterFreq(int low, int high); /*! New filter width */
>./applications/gqrx/receiver.h:#include "dsp/rx_filter.h"
>./applications/gqrx/receiver.h: enum filter_shape {
>./applications/gqrx/receiver.h: status set_filter_offset(double offset_hz);
>./applications/gqrx/receiver.h: double get_filter_offset(void) const;
>./applications/gqrx/receiver.h: status set_filter(double low, double high, filter_shape shape);
>./applications/gqrx/receiver.h: double d_filter_offset; /*!< Current filter offset */
>./qtgui/dockrxopt.cpp:static const int filter_preset_table[DockRxOpt::MODE_LAST][3][2] =
>./qtgui/dockrxopt.cpp:DockRxOpt::DockRxOpt(qint64 filterOffsetRange, QWidget *parent) :
>./qtgui/dockrxopt.cpp: ui->filterFreq->setup(7, -filterOffsetRange/2, filterOffsetRange/2, 1, UNITS_KHZ);
>./qtgui/dockrxopt.cpp: ui->filterFreq->setFrequency(0);
>./qtgui/dockrxopt.cpp: // use same slot for filteCombo and filterShapeCombo
>./qtgui/dockrxopt.cpp: connect(ui->filterShapeCombo, SIGNAL(activated(int)), this, SLOT(on_filterCombo_activated(int)));
>./qtgui/dockrxopt.cpp: * @brief Set value of channel filter offset selector.
>./qtgui/dockrxopt.cpp: ui->filterFreq->setFrequency(freq_hz);
>./qtgui/dockrxopt.cpp: * @brief Set filter offset range.
>./qtgui/dockrxopt.cpp: ui->filterFreq->setup(7, -range_hz/2, range_hz/2, 1, UNITS_KHZ);
>./qtgui/dockrxopt.cpp: * The actual RX frequency is the sum of the RF frequency and the filter
>./qtgui/dockrxopt.cpp: * Get filter index from filter LO / HI values.
>./qtgui/dockrxopt.cpp: * @param lo The filter low cut frequency.
>./qtgui/dockrxopt.cpp: * @param hi The filter high cut frequency.
>./qtgui/dockrxopt.cpp: * Given filter low and high cut frequencies, this function checks whether the
>./qtgui/dockrxopt.cpp: * filter settings correspond to one of the presets in filter_preset_table and
>./qtgui/dockrxopt.cpp: * returns the corresponding index to ui->filterCombo;
>./qtgui/dockrxopt.cpp:unsigned int DockRxOpt::filterIdxFromLoHi(int lo, int hi) const
>./qtgui/dockrxopt.cpp: if (lo == filter_preset_table[mode_index][FILTER_PRESET_WIDE][0] &&
>./qtgui/dockrxopt.cpp: hi == filter_preset_table[mode_index][FILTER_PRESET_WIDE][1])
>./qtgui/dockrxopt.cpp: else if (lo == filter_preset_table[mode_index][FILTER_PRESET_NORMAL][0] &&
>./qtgui/dockrxopt.cpp: hi == filter_preset_table[mode_index][FILTER_PRESET_NORMAL][1])
>./qtgui/dockrxopt.cpp: else if (lo == filter_preset_table[mode_index][FILTER_PRESET_NARROW][0] &&
>./qtgui/dockrxopt.cpp: hi == filter_preset_table[mode_index][FILTER_PRESET_NARROW][1])
>./qtgui/dockrxopt.cpp: * @brief Set filter parameters
>./qtgui/dockrxopt.cpp: int filter_index = filterIdxFromLoHi(lo, hi);
>./qtgui/dockrxopt.cpp: ui->filterCombo->setCurrentIndex(filter_index);
>./qtgui/dockrxopt.cpp: if (filter_index == FILTER_PRESET_USER)
>./qtgui/dockrxopt.cpp: ui->filterCombo->setItemText(FILTER_PRESET_USER, QString("User (%1 k)")
>./qtgui/dockrxopt.cpp: * @brief Select new filter preset.
>./qtgui/dockrxopt.cpp: * @param index Index of the new filter preset (0=wide, 1=normal, 2=narrow).
>./qtgui/dockrxopt.cpp: ui->filterCombo->setCurrentIndex(index);
>./qtgui/dockrxopt.cpp: * @brief Get current filter preset.
>./qtgui/dockrxopt.cpp: * @param The current filter preset (0=wide, 1=normal, 2=narrow).
>./qtgui/dockrxopt.cpp: return ui->filterCombo->currentIndex();
>./qtgui/dockrxopt.cpp:/** Select filter shape */
>./qtgui/dockrxopt.cpp: ui->filterShapeCombo->setCurrentIndex(index);
>./qtgui/dockrxopt.cpp: return ui->filterShapeCombo->currentIndex();
>./qtgui/dockrxopt.cpp:/** Get filter lo/hi for a given mode and preset */
>./qtgui/dockrxopt.cpp: *lo = filter_preset_table[mode][preset][0];
>./qtgui/dockrxopt.cpp: *hi = filter_preset_table[mode][preset][1];
>./qtgui/dockrxopt.cpp: emit filterOffsetChanged(offs);
>./qtgui/dockrxopt.cpp: qint64 offs = ui->filterFreq->getFrequency();
>./qtgui/dockrxopt.cpp: * @brief Channel filter offset has changed
>./qtgui/dockrxopt.cpp: * @param freq The new filter offset in Hz
>./qtgui/dockrxopt.cpp: * This slot is activated when a new filter offset has been selected either
>./qtgui/dockrxopt.cpp:void DockRxOpt::on_filterFreq_newFrequency(qint64 freq)
>./qtgui/dockrxopt.cpp: qDebug() << "New filter offset:" << freq << "Hz";
>./qtgui/dockrxopt.cpp: emit filterOffsetChanged(freq);
>./qtgui/dockrxopt.cpp: * New filter preset selected.
>./qtgui/dockrxopt.cpp: * demodulator and filter preset are tightly coupled.
>./qtgui/dockrxopt.cpp:void DockRxOpt::on_filterCombo_activated(int index)
>./qtgui/dockrxopt.cpp: qDebug() << "New filter preset:" << ui->filterCombo->currentText();
>./qtgui/dockrxopt.cpp: qDebug() << " shape:" << ui->filterShapeCombo->currentIndex();
>./qtgui/plotter.h: /*! \brief Move the filter to freq_hz from center. */
>./qtgui/plotter.h: bool m_FilterBoxEnabled; /*!< Draw filter box. */
>./qtgui/dockfft.h: void fftAvgChanged(float gain); /*! FFT video filter gain has changed. */
>./qtgui/dockrxopt.h: MODE_CWL = 8, /*!< CW using LSB filter. */
>./qtgui/dockrxopt.h: MODE_CWU = 9, /*!< CW using USB filter. */
>./qtgui/dockrxopt.h: explicit DockRxOpt(qint64 filterOffsetRange = 90000, QWidget *parent = 0);
>./qtgui/dockrxopt.h: unsigned int filterIdxFromLoHi(int lo, int hi) const;
>./qtgui/dockrxopt.h: /** Signal emitted when the channel filter frequency has changed. */
>./qtgui/dockrxopt.h: void filterOffsetChanged(qint64 freq_hz);
>./qtgui/dockrxopt.h: void on_filterFreq_newFrequency(qint64 freq);
>./qtgui/dockrxopt.h: void on_filterCombo_activated(int index);
>./qtgui/dockrxopt.ui: <widget class="CFreqCtrl" name="filterFreq">
>./qtgui/dockrxopt.ui: <string><html><head/><body><p>Channel filter offset.<br/>
>./qtgui/dockrxopt.ui: <widget class="QLabel" name="filterLabel">
>./qtgui/dockrxopt.ui: <widget class="QComboBox" name="filterCombo">
>./qtgui/dockrxopt.ui: <string>Apply mode dependent filter preset</string>
>./qtgui/dockrxopt.ui: <widget class="QLabel" name="filterShapeLabel">
>./qtgui/dockrxopt.ui: <widget class="QComboBox" name="filterShapeCombo">
>./qtgui/dockrxopt.ui: <string>Select the filter shape</string>
>./qtgui/plotter.cpp: "Drag filter edges to adjust filter."
>./qtgui/plotter.cpp:// filter edges.
>./qtgui/plotter.cpp: { // filter low cut
>./qtgui/plotter.cpp: { // filter high cut
>./qtgui/plotter.cpp: // filter width
>./qtgui/plotter.cpp: // filter shift
>./qtgui/plotter.cpp: // Draw demod filter box
>./qtgui/dockfft.cpp:/** FFT filter gain changed. */
>./qtgui/demod_options.ui: <string>Time constant for the FM de-emphasis IIR filter.
>./dsp/rx_fft.h:#include <gnuradio/filter/firdes.h> /* contains enum win_type */
>./dsp/rx_fft.h: * \param winttype The window type (see gnuradio/filter/firdes.h)
>./dsp/rx_fft.h:rx_fft_c_sptr make_rx_fft_c(unsigned int fftsize=4096, int wintype=gr::filter::firdes::WIN_HAMMING);
>./dsp/rx_fft.h: rx_fft_c(unsigned int fftsize=4096, int wintype=gr::filter::firdes::WIN_HAMMING);
>./dsp/rx_fft.h: * \param winttype The window type (see gnuradio/filter/firdes.h)
>./dsp/rx_fft.h:rx_fft_f_sptr make_rx_fft_f(unsigned int fftsize=1024, int wintype=gr::filter::firdes::WIN_HAMMING);
>./dsp/rx_fft.h: rx_fft_f(unsigned int fftsize=1024, int wintype=gr::filter::firdes::WIN_HAMMING);
>./dsp/hbf_decim.h:#include "filter/decimator.h"
>./dsp/hbf_decim.h: * Decimator block using half-band filters.
>./dsp/stereo_demod.h:#include <gnuradio/filter/firdes.h>
>./dsp/stereo_demod.h:#include <gnuradio/filter/fir_filter_fcc.h>
>./dsp/stereo_demod.h:#include <gnuradio/filter/fir_filter_fff.h>
>./dsp/stereo_demod.h: gr::filter::fir_filter_fcc::sptr tone; /*!< Pilot tone BPF. */
>./dsp/stereo_demod.h: gr::filter::fir_filter_fff::sptr lo2; /*!< Subtone BPF. */
>./dsp/stereo_demod.h: lpf_ff_sptr lpf0; /*!< Low-pass filter #0. */
>./dsp/stereo_demod.h: lpf_ff_sptr lpf1; /*!< Low-pass filter #1. */
>./dsp/rx_demod_fm.h:#include <gnuradio/filter/iir_filter_ffd.h>
>./dsp/rx_demod_fm.h:#include <gnuradio/filter/pfb_arb_resampler_ccf.h>
>./dsp/rx_demod_fm.h: gr::filter::iir_filter_ffd::sptr d_deemph; /*! De-emphasis IIR filter. */
>./dsp/rx_demod_fm.h: gr::filter::pfb_arb_resampler_ccf::sptr d_resampler; /*! PFB resampler. */
>./dsp/rx_demod_fm.h: /* De-emph IIR filter taps */
>./dsp/resampler_xx.cpp:#include <gnuradio/filter/firdes.h>
>./dsp/resampler_xx.cpp: d_taps = gr::filter::firdes::low_pass(flt_size, flt_size, cutoff, trans_width);
>./dsp/resampler_xx.cpp: /* create the filter */
>./dsp/resampler_xx.cpp: d_filter = gr::filter::pfb_arb_resampler_ccf::make(rate, d_taps, flt_size);
>./dsp/resampler_xx.cpp: /* connect filter */
>./dsp/resampler_xx.cpp: connect(self(), 0, d_filter, 0);
>./dsp/resampler_xx.cpp: connect(d_filter, 0, self(), 0);
>./dsp/resampler_xx.cpp: d_taps = gr::filter::firdes::low_pass(flt_size, flt_size, cutoff, trans_width);
>./dsp/resampler_xx.cpp: disconnect(self(), 0, d_filter, 0);
>./dsp/resampler_xx.cpp: disconnect(d_filter, 0, self(), 0);
>./dsp/resampler_xx.cpp: d_filter.reset();
>./dsp/resampler_xx.cpp: d_filter = gr::filter::pfb_arb_resampler_ccf::make(rate, d_taps, flt_size);
>./dsp/resampler_xx.cpp: connect(self(), 0, d_filter, 0);
>./dsp/resampler_xx.cpp: connect(d_filter, 0, self(), 0);
>./dsp/resampler_xx.cpp: d_taps = gr::filter::firdes::low_pass(flt_size, flt_size, cutoff, trans_width);
>./dsp/resampler_xx.cpp: /* create the filter */
>./dsp/resampler_xx.cpp: d_filter = gr::filter::pfb_arb_resampler_fff::make(rate, d_taps, flt_size);
>./dsp/resampler_xx.cpp: /* connect filter */
>./dsp/resampler_xx.cpp: connect(self(), 0, d_filter, 0);
>./dsp/resampler_xx.cpp: connect(d_filter, 0, self(), 0);
>./dsp/resampler_xx.cpp: d_taps = gr::filter::firdes::low_pass(flt_size, flt_size, cutoff, trans_width);
>./dsp/resampler_xx.cpp: disconnect(self(), 0, d_filter, 0);
>./dsp/resampler_xx.cpp: disconnect(d_filter, 0, self(), 0);
>./dsp/resampler_xx.cpp: d_filter.reset();
>./dsp/resampler_xx.cpp: d_filter = gr::filter::pfb_arb_resampler_fff::make(rate, d_taps, flt_size);
>./dsp/resampler_xx.cpp: connect(self(), 0, d_filter, 0);
>./dsp/resampler_xx.cpp: connect(d_filter, 0, self(), 0);
>./dsp/rx_filter.h:#include <gnuradio/filter/fir_filter_ccc.h>
>./dsp/rx_filter.h:#include <gnuradio/filter/freq_xlating_fir_filter_ccc.h>
>./dsp/rx_filter.h:#define RX_FILTER_MIN_WIDTH 100 /*! Minimum width of filter */
>./dsp/rx_filter.h:class rx_filter;
>./dsp/rx_filter.h:class rx_xlating_filter;
>./dsp/rx_filter.h:typedef boost::shared_ptr<rx_filter> rx_filter_sptr;
>./dsp/rx_filter.h:typedef boost::shared_ptr<rx_xlating_filter> rx_xlating_filter_sptr;
>./dsp/rx_filter.h:/*! \brief Return a shared_ptr to a new instance of rx_filter.
>./dsp/rx_filter.h: * \param low The lower limit of the bandpass filter.
>./dsp/rx_filter.h: * \param high The upper limit of the filter.
>./dsp/rx_filter.h: * of raw pointers, rx_filter's constructor is private.
>./dsp/rx_filter.h: * make_rxfilter is the public interface for creating new instances.
>./dsp/rx_filter.h:rx_filter_sptr make_rx_filter(double sample_rate,
>./dsp/rx_filter.h:/*! \brief Complex band-pass filter with complex taps.
>./dsp/rx_filter.h: * This class encapsulates a complex FIR filter and the code
>./dsp/rx_filter.h: * required to generate complex band pass filter taps. It provides a simple
>./dsp/rx_filter.h: * interface to set the filter parameters.
>./dsp/rx_filter.h: * performed by the accessors (though the taps generator from gr::filter::firdes does perform
>./dsp/rx_filter.h:class rx_filter : public gr::hier_block2
>./dsp/rx_filter.h: rx_filter(double sample_rate=96000.0, double low=-5000.0, double high=5000.0, double trans_width=1000.0); // FIXME: should be private
>./dsp/rx_filter.h: ~rx_filter();
>./dsp/rx_filter.h: gr::filter::fir_filter_ccc::sptr d_bpf;
>./dsp/rx_filter.h:/*! \brief Return a shared_ptr to a new instance of rx_xlating_filter.
>./dsp/rx_filter.h: * \param offset The filter offset.
>./dsp/rx_filter.h: * \param low The lower limit of the bandpass filter.
>./dsp/rx_filter.h: * \param high The upper limit of the filter.
>./dsp/rx_filter.h: * of raw pointers, rx_filter's constructor is private.
>./dsp/rx_filter.h: * make_rxfilter is the public interface for creating new instances.
>./dsp/rx_filter.h:rx_xlating_filter_sptr make_rx_xlating_filter(double sample_rate,
>./dsp/rx_filter.h:/*! \brief Frequency translating band-pass filter with complex taps.
>./dsp/rx_filter.h: * This class encapsulates a frequency translating FIR filter and the code
>./dsp/rx_filter.h: * required to generate complex band pass filter taps. It provides a simple
>./dsp/rx_filter.h: * interface to set the filter offset and limits and takes care of generating
>./dsp/rx_filter.h: * The filter limits are relative to the filter offset and thanks to the complex taps
>./dsp/rx_filter.h: * performed by the accessors (though the taps generator from gr::filter::firdes does perform
>./dsp/rx_filter.h:class rx_xlating_filter : public gr::hier_block2
>./dsp/rx_filter.h: rx_xlating_filter(double sample_rate=96000.0, double center=0.0, double low=-5000.0, double high=5000.0, double trans_width=1000.0); // FIXME: should be private
>./dsp/rx_filter.h: ~rx_xlating_filter();
>./dsp/rx_filter.h: gr::filter::freq_xlating_fir_filter_ccc::sptr d_bpf;
>./dsp/rx_rds.cpp:#include <gnuradio/filter/firdes.h>
>./dsp/rx_rds.cpp: d_taps2 = gr::filter::firdes::low_pass(2500.0, d_sample_rate, 2400, 2000);
>./dsp/rx_rds.cpp: f_fxff = gr::filter::freq_xlating_fir_filter_fcf::make(5.0, d_taps2, 57000, d_sample_rate);
>./dsp/rx_rds.cpp: f_rrcf = gr::filter::firdes::root_raised_cosine(1, sample_rate/5, 2375, 1, 100);
>./dsp/rx_rds.cpp: d_bpf2 = gr::filter::fir_filter_ccf::make(1, f_rrcf);
>./dsp/rx_rds.cpp: /* connect filter */
>./dsp/rx_demod_am.h:#include <gnuradio/filter/iir_filter_ffd.h>
>./dsp/rx_demod_am.h: * This block implements an optional IIR DC-removal filter for the demodulated signal.
>./dsp/rx_demod_am.h: gr::filter::iir_filter_ffd::sptr d_dcr; /*! DC removal (IIR high pass). */
>./dsp/rx_demod_am.h: /* IIR DC-removal filter taps */
>./dsp/CMakeLists.txt: afsk1200/filter-i386.h
>./dsp/CMakeLists.txt: afsk1200/filter.h
>./dsp/CMakeLists.txt: filter/decimator.cpp
>./dsp/CMakeLists.txt: filter/decimator.h
>./dsp/CMakeLists.txt: filter/filtercoef_hbf_70.h
>./dsp/CMakeLists.txt: filter/filtercoef_hbf_100.h
>./dsp/CMakeLists.txt: filter/filtercoef_hbf_140.h
>./dsp/CMakeLists.txt: rx_filter.cpp
>./dsp/CMakeLists.txt: rx_filter.h
>./dsp/lpf.h:#include <gnuradio/filter/firdes.h>
>./dsp/lpf.h:#include <gnuradio/filter/fir_filter_fff.h>
>./dsp/lpf.h: * \param gain Overall gain of filter (typically 1.0).
>./dsp/lpf.h:/*! \brief low-pass filter (LPF) with float taps.
>./dsp/lpf.h: * This class encapsulates a low-pass FIR filter and the code
>./dsp/lpf.h: * required to generate filter taps. It provides a simple
>./dsp/lpf.h: * interface to set the filter parameters.
>./dsp/lpf.h: * performed by the accessors (though the taps generator from gr::filter::firdes does perform
>./dsp/lpf.h: gr::filter::fir_filter_fff::sptr lpf;
>./dsp/lpf.cpp:#include <gnuradio/filter/firdes.h>
>./dsp/lpf.cpp: d_taps = gr::filter::firdes::low_pass(d_gain, d_sample_rate,
>./dsp/lpf.cpp: /* create low-pass filter (decimation=1) */
>./dsp/lpf.cpp: lpf = gr::filter::fir_filter_fff::make(1, d_taps);
>./dsp/lpf.cpp: /* connect filter */
>./dsp/lpf.cpp: d_taps = gr::filter::firdes::low_pass(d_gain, d_sample_rate,
>./dsp/correct_iq_cc.h:#include <gnuradio/filter/single_pole_iir_filter_cc.h>
>./dsp/correct_iq_cc.h: * \param tau The time constant for the filter
>./dsp/correct_iq_cc.h:/*! \brief Single pole IIR filter-based DC offset correction block.
>./dsp/correct_iq_cc.h: * filter
>./dsp/correct_iq_cc.h: gr::filter::single_pole_iir_filter_cc::sptr d_iir;
>./dsp/rx_fft.cpp:#include <gnuradio/filter/firdes.h>
>./dsp/rx_fft.cpp: * \param wintype The window type (see gr::filter::firdes::win_type).
>./dsp/rx_fft.cpp: if ((d_wintype < gr::filter::firdes::WIN_HAMMING) || (d_wintype > gr::filter::firdes::WIN_BLACKMAN_hARRIS))
>./dsp/rx_fft.cpp: d_wintype = gr::filter::firdes::WIN_HAMMING;
>./dsp/rx_fft.cpp: d_window = gr::filter::firdes::window((gr::filter::firdes::win_type)d_wintype, d_fftsize, 6.76);
>./dsp/rx_fft.cpp: * \param wintype The window type (see gr::filter::firdes::win_type).
>./dsp/rx_fft.cpp: if ((d_wintype < gr::filter::firdes::WIN_HAMMING) || (d_wintype > gr::filter::firdes::WIN_BLACKMAN_hARRIS))
>./dsp/rx_fft.cpp: d_wintype = gr::filter::firdes::WIN_HAMMING;
>./dsp/rx_fft.cpp: d_window = gr::filter::firdes::window((gr::filter::firdes::win_type)d_wintype, d_fftsize, 6.76);
>./dsp/rx_noise_blanker_cc.h: * This block implements noise blanking filters based on the noise blanker code
>./dsp/resampler_xx.h:#include <gnuradio/filter/pfb_arb_resampler_ccf.h>
>./dsp/resampler_xx.h:#include <gnuradio/filter/pfb_arb_resampler_fff.h>
>./dsp/resampler_xx.h: * of generating filter taps that can be used for the filter, as well as calculating
>./dsp/resampler_xx.h: gr::filter::pfb_arb_resampler_ccf::sptr d_filter;
>./dsp/resampler_xx.h: * of generating filter taps that can be used for the filter, as well as calculating
>./dsp/resampler_xx.h: gr::filter::pfb_arb_resampler_fff::sptr d_filter;
>./dsp/filter/filtercoef_hbf_100.h: * Half-band filter coefficients with 100 dB stop band attenuation.
>./dsp/filter/decimator.h: * Decimate by power-of-2 classes using half band filters.
>./dsp/filter/decimator.h: * 11-tap half-band filter with unrolled loop.
>./dsp/filter/decimator.h: int init_filters_70(unsigned int decimation);
>./dsp/filter/decimator.h: int init_filters_100(unsigned int decimation);
>./dsp/filter/decimator.h: int init_filters_140(unsigned int decimation);
>./dsp/filter/decimator.h: void delete_filters();
>./dsp/filter/decimator.h: CDec2 *filter_table[MAX_STAGES];
>./dsp/filter/filtercoef_hbf_140.h: * Half-band filter coefficients with 140 dB stop band attenuation.
>./dsp/filter/filtercoef_hbf_140.h:// normalized 140 dB alias free bandwidths for the filters
>./dsp/filter/filtercoef_hbf_70.h: * Half-band filter coefficients with 70 dB stop band attenuation.
>./dsp/filter/decimator.cpp: * Decimate by power-of-2 using half band filters.
>./dsp/filter/decimator.cpp:#include "filtercoef_hbf_70.h"
>./dsp/filter/decimator.cpp:#include "filtercoef_hbf_100.h"
>./dsp/filter/decimator.cpp:#include "filtercoef_hbf_140.h"
>./dsp/filter/decimator.cpp: filter_table[i] = 0;
>./dsp/filter/decimator.cpp: delete_filters();
>./dsp/filter/decimator.cpp: delete_filters();
>./dsp/filter/decimator.cpp: decim = init_filters_70(_decim);
>./dsp/filter/decimator.cpp: decim = init_filters_100(_decim);
>./dsp/filter/decimator.cpp: decim = init_filters_140(_decim);
>./dsp/filter/decimator.cpp: while (filter_table[i])
>./dsp/filter/decimator.cpp: n = filter_table[i++]->DecBy2(n, pin, pin);
>./dsp/filter/decimator.cpp:void Decimator::delete_filters()
>./dsp/filter/decimator.cpp: if (filter_table[i])
>./dsp/filter/decimator.cpp: delete filter_table[i];
>./dsp/filter/decimator.cpp: filter_table[i] = 0;
>./dsp/filter/decimator.cpp:int Decimator::init_filters_70(unsigned int decimation)
>./dsp/filter/decimator.cpp: filter_table[n++] = new CHalfBand11TapDecimateBy2(HBF_70_11);
>./dsp/filter/decimator.cpp: filter_table[n++] = new CHalfBandDecimateBy2(HBF_70_39_LENGTH, HBF_70_39);
>./dsp/filter/decimator.cpp:int Decimator::init_filters_100(unsigned int decimation)
>./dsp/filter/decimator.cpp: filter_table[n++] = new CHalfBand11TapDecimateBy2(HBF_100_11);
>./dsp/filter/decimator.cpp: filter_table[n++] = new CHalfBandDecimateBy2(HBF_100_19_LENGTH, HBF_100_19);
>./dsp/filter/decimator.cpp: filter_table[n++] = new CHalfBandDecimateBy2(HBF_100_59_LENGTH, HBF_100_59);
>./dsp/filter/decimator.cpp:int Decimator::init_filters_140(unsigned int decimation)
>./dsp/filter/decimator.cpp: filter_table[n++] = new CHalfBand11TapDecimateBy2(HBF_140_11);
>./dsp/filter/decimator.cpp: filter_table[n++] = new CHalfBandDecimateBy2(HBF_140_15_LENGTH, HBF_140_15);
>./dsp/filter/decimator.cpp: filter_table[n++] = new CHalfBandDecimateBy2(HBF_140_27_LENGTH, HBF_140_27);
>./dsp/filter/decimator.cpp: filter_table[n++] = new CHalfBandDecimateBy2(HBF_140_87_LENGTH, HBF_140_87);
>./dsp/filter/decimator.cpp: * Half band filter and decimate by 2 function.
>./dsp/filter/decimator.cpp: // perform decimation FIR filter on even samples
>./dsp/filter/decimator.cpp: * Decimate by 2 Fixed 11 Tap Halfband filter class implementation
>./dsp/filter/decimator.cpp: * Decimate by 2 Fixed 11 Tap Halfband filter class implementation
>./dsp/resampler_ff_old.cpp: /* create band pass filter */
>./dsp/resampler_ff_old.cpp: /* connect filter */
>./dsp/correct_iq_cc.cpp: d_iir = gr::filter::single_pole_iir_filter_cc::make(d_alpha, 1);
>./dsp/afsk1200/filter-i386.h: * filter-i386.h -- optimized filter routines
>./dsp/afsk1200/cafsk12.cpp:#include "filter.h"
>./dsp/afsk1200/filter.h: * filter.h -- optimized filter routines
>./dsp/afsk1200/filter.h:#include "filter-i386.h"
>./dsp/rx_demod_am.cpp: d_dcr = gr::filter::iir_filter_ffd::make(d_fftaps, d_fbtaps);
>./dsp/rx_meter.h: * make_rxfilter is the public interface for creating new instances.
>./dsp/agc_impl.cpp://adjust to cover the impulse response time of filter
>./dsp/agc_impl.cpp: // calculate fast and slow filter values.
>./dsp/rx_rds.h:#include <gnuradio/filter/fir_filter_ccc.h>
>./dsp/rx_rds.h:#include <gnuradio/filter/fir_filter_ccf.h>
>./dsp/rx_rds.h:#include <gnuradio/filter/fir_filter_fff.h>
>./dsp/rx_rds.h:#include <gnuradio/filter/freq_xlating_fir_filter_fcf.h>
>./dsp/rx_rds.h:#include <gnuradio/filter/freq_xlating_fir_filter_ccc.h>
>./dsp/rx_rds.h:#include <gnuradio/filter/freq_xlating_fir_filter_ccf.h>
>./dsp/rx_rds.h: gr::filter::fir_filter_ccc::sptr d_bpf;
>./dsp/rx_rds.h: gr::filter::fir_filter_ccf::sptr d_bpf2;
>./dsp/rx_rds.h: gr::filter::freq_xlating_fir_filter_fcf::sptr f_fxff;
>./dsp/rx_rds.h: gr::filter::freq_xlating_fir_filter_ccf::sptr f_fxff_ccf;
>./dsp/rx_demod_fm.cpp:#include <gnuradio/filter/firdes.h>
>./dsp/rx_demod_fm.cpp: d_deemph = gr::filter::iir_filter_ffd::make(d_fftaps, d_fbtaps);
>./dsp/rx_demod_fm.cpp: * \bug Assumes that IIR filter has already been constructed so that we
>./dsp/rx_demod_fm.cpp:/*! \brief Calculate taps for FM de-emph IIR filter. */
>./dsp/hbf_decim.cpp:#include "filter/decimator.h"
>./dsp/resampler_ff_old.h: * of generating filter taps that can be used for the resampler, as well as calculating
>./dsp/rx_filter.cpp:#include <gnuradio/filter/firdes.h>
>./dsp/rx_filter.cpp:#include "dsp/rx_filter.h"
>./dsp/rx_filter.cpp: * Create a new instance of rx_filter and return
>./dsp/rx_filter.cpp:rx_filter_sptr make_rx_filter(double sample_rate, double low, double high, double trans_width)
>./dsp/rx_filter.cpp: return gnuradio::get_initial_sptr(new rx_filter(sample_rate, low, high, trans_width));
>./dsp/rx_filter.cpp:rx_filter::rx_filter(double sample_rate, double low, double high, double trans_width)
>./dsp/rx_filter.cpp: : gr::hier_block2 ("rx_filter",
>./dsp/rx_filter.cpp: d_taps = gr::filter::firdes::complex_band_pass(1.0, d_sample_rate, d_low, d_high, d_trans_width);
>./dsp/rx_filter.cpp: /* create band pass filter */
>./dsp/rx_filter.cpp: d_bpf = gr::filter::fir_filter_ccc::make(1, d_taps);
>./dsp/rx_filter.cpp: /* connect filter */
>./dsp/rx_filter.cpp:rx_filter::~rx_filter ()
>./dsp/rx_filter.cpp:void rx_filter::set_param(double low, double high, double trans_width)
>./dsp/rx_filter.cpp: d_taps = gr::filter::firdes::complex_band_pass(1.0, d_sample_rate,
>./dsp/rx_filter.cpp: std::cout << "Genrating taps for new filter LO:" << d_low
>./dsp/rx_filter.cpp:void rx_filter::set_cw_offset(double offset)
>./dsp/rx_filter.cpp:/** Frequency translating filter **/
>./dsp/rx_filter.cpp: * Create a new instance of rx_xlating_filter and return
>./dsp/rx_filter.cpp:rx_xlating_filter_sptr make_rx_xlating_filter(double sample_rate, double center, double low, double high, double trans_width)
>./dsp/rx_filter.cpp: return gnuradio::get_initial_sptr(new rx_xlating_filter(sample_rate, center, low, high, trans_width));
>./dsp/rx_filter.cpp:rx_xlating_filter::rx_xlating_filter(double sample_rate, double center, double low, double high, double trans_width)
>./dsp/rx_filter.cpp: : gr::hier_block2 ("rx_xlating_filter",
>./dsp/rx_filter.cpp: d_taps = gr::filter::firdes::complex_band_pass(1.0, d_sample_rate, -d_high, -d_low, d_trans_width);
>./dsp/rx_filter.cpp: /* create band pass filter */
>./dsp/rx_filter.cpp: d_bpf = gr::filter::freq_xlating_fir_filter_ccc::make(1, d_taps, d_center, d_sample_rate);
>./dsp/rx_filter.cpp: /* connect filter */
>./dsp/rx_filter.cpp:rx_xlating_filter::~rx_xlating_filter()
>./dsp/rx_filter.cpp:void rx_xlating_filter::set_offset(double center)
>./dsp/rx_filter.cpp:void rx_xlating_filter::set_param(double low, double high, double trans_width)
>./dsp/rx_filter.cpp: d_taps = gr::filter::firdes::complex_band_pass(1.0, d_sample_rate, -d_high, -d_low, d_trans_width);
>./dsp/rx_filter.cpp:void rx_xlating_filter::set_param(double center, double low, double high, double trans_width)
>./dsp/stereo_demod.cpp: d_tone_taps = gr::filter::firdes::complex_band_pass(
>./dsp/stereo_demod.cpp: d_tone_taps = gr::filter::firdes::complex_band_pass(
>./dsp/stereo_demod.cpp: tone = gr::filter::fir_filter_fcc::make(1, d_tone_taps);
>./dsp/stereo_demod.cpp: d_pll_taps = gr::filter::firdes::band_pass(
>./dsp/stereo_demod.cpp: lo2 = gr::filter::fir_filter_fff::make(1, d_pll_taps);
=======================================================================