/*! \brief Public contructor. * \param input_device Input device specifier. * \param audio_device Audio output device specifier, * e.g. hw:0 when using ALSA or Portaudio. * * \todo Option to use UHD device instead of FCD. */ receiver::receiver(const std::string input_device, const std::string audio_device) : d_running(false), d_input_rate(96000.0), d_audio_rate(48000), d_rf_freq(144800000.0), d_filter_offset(0.0), d_recording_wav(false), d_sniffer_active(false), d_iq_rev(false), d_dc_cancel(false), d_iq_balance(false), d_demod(RX_DEMOD_OFF) { tb = gr_make_top_block("gqrx"); if (input_device.empty()) { // FIXME: other OS src = osmosdr_make_source_c("file=/dev/random,freq=428e6,rate=96000,repeat=true,throttle=true"); } else { input_devstr = input_device; src = osmosdr_make_source_c(input_device); } rx = make_nbrx(d_input_rate, d_audio_rate); lo = gr_make_sig_source_c(d_input_rate, GR_SIN_WAVE, 0.0, 1.0); mixer = gr_make_multiply_cc(); iq_swap = make_iq_swap_cc(false); dc_corr = make_dc_corr_cc(d_input_rate, 1.0); iq_fft = make_rx_fft_c(4096u, 0); audio_fft = make_rx_fft_f(3072u); audio_gain0 = gr_make_multiply_const_ff(0.1); audio_gain1 = gr_make_multiply_const_ff(0.1); #ifdef WITH_PULSEAUDIO //pafix audio_snk = make_pa_sink(audio_device, d_audio_rate, "GQRX", "Audio output"); #else audio_snk = audio_make_sink(d_audio_rate, audio_device, true); #endif output_devstr = audio_device; /* wav sink and source is created when rec/play is started */ audio_null_sink = gr_make_null_sink(sizeof(float)); sniffer = make_sniffer_f(); /* sniffer_rr is created at each activation. */ set_demod(RX_DEMOD_NFM); }
/*! \brief Public contructor. * \param input_device Input device specifier. * \param audio_device Audio output device specifier, * e.g. hw:0 when using ALSA or Portaudio. * * \todo Option to use UHD device instead of FCD. */ receiver::receiver(const std::string input_device, const std::string audio_device) : d_running(false), d_input_rate(96000.0), d_audio_rate(48000), d_rf_freq(144800000.0), d_filter_offset(0.0), d_recording_iq(false), d_recording_wav(false), d_sniffer_active(false), d_iq_rev(false), d_dc_cancel(false), d_iq_balance(false), d_demod(RX_DEMOD_OFF) { tb = gr::make_top_block("gqrx"); if (input_device.empty()) { // FIXME: other OS src = osmosdr::source::make("file=/dev/random,freq=428e6,rate=96000,repeat=true,throttle=true"); } else { input_devstr = input_device; src = osmosdr::source::make(input_device); } // create I/Q sink and close it iq_sink = gr::blocks::file_sink::make(sizeof(gr_complex), "/dev/null", false); iq_sink->set_unbuffered(true); iq_sink->close(); rx = make_nbrx(d_input_rate, d_audio_rate); lo = gr::analog::sig_source_c::make(d_input_rate, gr::analog::GR_SIN_WAVE, 0.0, 1.0); mixer = gr::blocks::multiply_cc::make(); iq_swap = make_iq_swap_cc(false); dc_corr = make_dc_corr_cc(d_input_rate, 1.0); iq_fft = make_rx_fft_c(4096u, 0); audio_fft = make_rx_fft_f(4096u); audio_gain0 = gr::blocks::multiply_const_ff::make(0.1); audio_gain1 = gr::blocks::multiply_const_ff::make(0.1); wav_sink = gr::blocks::wavfile_sink::make("/dev/null", 2, (unsigned int) d_audio_rate, 16); audio_udp_sink = make_udp_sink_f(); #ifdef WITH_PULSEAUDIO audio_snk = make_pa_sink(audio_device, d_audio_rate, "GQRX", "Audio output"); #else audio_snk = gr::audio::sink::make(d_audio_rate, audio_device, true); #endif output_devstr = audio_device; /* wav sink and source is created when rec/play is started */ audio_null_sink0 = gr::blocks::null_sink::make(sizeof(float)); audio_null_sink1 = gr::blocks::null_sink::make(sizeof(float)); sniffer = make_sniffer_f(); /* sniffer_rr is created at each activation. */ set_demod(RX_DEMOD_NFM); #ifndef QT_NO_DEBUG_OUTPUT gr::prefs pref; std::cout << "Using audio backend: " << pref.get_string("audio", "audio_module", "N/A") << std::endl; #endif }
/** * @brief Public contructor. * @param input_device Input device specifier. * @param audio_device Audio output device specifier, * e.g. hw:0 when using ALSA or Portaudio. */ receiver::receiver(const std::string input_device, const std::string audio_device, unsigned int decimation) : d_running(false), d_input_rate(96000.0), d_audio_rate(48000), d_decim(decimation), d_rf_freq(144800000.0), d_filter_offset(0.0), d_cw_offset(0.0), d_recording_iq(false), d_recording_wav(false), d_sniffer_active(false), d_iq_rev(false), d_dc_cancel(false), d_iq_balance(false), d_demod(RX_DEMOD_OFF) { tb = gr::make_top_block("gqrx"); if (input_device.empty()) { src = osmosdr::source::make("file="+get_random_file()+",freq=428e6,rate=96000,repeat=true,throttle=true"); } else { input_devstr = input_device; src = osmosdr::source::make(input_device); } // input decimator if (d_decim >= 2) { try { input_decim = make_hbf_decim(d_decim); } catch (std::range_error &e) { std::cout << "Error creating input decimator " << d_decim << ": " << e.what() << std::endl << "Using decimation 1." << std::endl; d_decim = 1; } d_quad_rate = d_input_rate / (double)d_decim; } else { d_quad_rate = d_input_rate; } // create I/Q sink and close it iq_sink = gr::blocks::file_sink::make(sizeof(gr_complex), get_null_file().c_str(), true); iq_sink->set_unbuffered(true); iq_sink->close(); rx = make_nbrx(d_quad_rate, d_audio_rate); lo = gr::analog::sig_source_c::make(d_quad_rate, gr::analog::GR_SIN_WAVE, 0.0, 1.0); mixer = gr::blocks::multiply_cc::make(); iq_swap = make_iq_swap_cc(false); dc_corr = make_dc_corr_cc(d_quad_rate, 1.0); iq_fft = make_rx_fft_c(8192u, 0); audio_fft = make_rx_fft_f(8192u); audio_gain0 = gr::blocks::multiply_const_ff::make(0.1); audio_gain1 = gr::blocks::multiply_const_ff::make(0.1); wav_sink = gr::blocks::wavfile_sink::make(get_null_file().c_str(), 2, (unsigned int) d_audio_rate, 16); audio_udp_sink = make_udp_sink_f(); #ifdef WITH_PULSEAUDIO audio_snk = make_pa_sink(audio_device, d_audio_rate, "GQRX", "Audio output"); #else audio_snk = gr::audio::sink::make(d_audio_rate, audio_device, true); #endif output_devstr = audio_device; /* wav sink and source is created when rec/play is started */ audio_null_sink0 = gr::blocks::null_sink::make(sizeof(float)); audio_null_sink1 = gr::blocks::null_sink::make(sizeof(float)); sniffer = make_sniffer_f(); /* sniffer_rr is created at each activation. */ set_demod(RX_DEMOD_NFM); #ifndef QT_NO_DEBUG_OUTPUT gr::prefs pref; std::cout << "Using audio backend: " << pref.get_string("audio", "audio_module", "N/A") << std::endl; #endif }