TopBlock(double centerFreq, double sampleRate, double freqRes, double cycFreqRes, std::string fileName) : gr_top_block("Top Block"), Np(pow2roundup((int)sampleRate/freqRes)), L(Np/4), P(pow2roundup(sampleRate/cycFreqRes/L)), N(P*L), vector_length(N), source(osmosdr_make_source_c()), /* OsmoSDR Source */ fileSource(gr_make_file_source(sizeof(float)*2, "/home/ylb/QAM16_44_1k.dat", false)), stv(gr_make_stream_to_vector(sizeof(float)*2, vector_length)), /* Stream to vector */ /* autoFam - this does most of the interesting work */ sink(make_autofam_sink(source, vector_length, centerFreq, sampleRate, freqRes, cycFreqRes, fileName)) { /* Set up the OsmoSDR Source */ source->set_sample_rate(sampleRate); source->set_center_freq(centerFreq); source->set_freq_corr(0.0); source->set_gain_mode(false); source->set_gain(30); source->set_if_gain(25.0); /* Set up the connections */ connect(fileSource, 0, stv, 0); connect(stv, 0, sink, 0); }
/*! \brief Start playback of recorded I/Q data file. * \param filename The file to play from. Must be raw file containing gr_complex samples. * \param samprate The sample rate (currently fixed at 96ksps) */ receiver::status receiver::start_iq_playback(const std::string filename, float samprate) { #if 0 if (samprate != d_bandwidth) { return STATUS_ERROR; } try { iq_src = gr_make_file_source(sizeof(gr_complex), filename.c_str(), false); } catch (std::runtime_error &e) { std::cout << "Error loading " << filename << ": " << e.what() << std::endl; return STATUS_ERROR; } tb->lock(); /* disconenct hardware source */ tb->disconnect(src, 0, nb, 0); tb->disconnect(src, 0, iq_sink, 0); /* connect I/Q source via throttle block */ tb->connect(iq_src, 0, nb, 0); tb->connect(iq_src, 0, iq_sink, 0); tb->unlock(); #endif return STATUS_OK; }