|
From: | Luke Berndt |
Subject: | [Discuss-gnuradio] Works with GR 3.6, breaks with 3.7 |
Date: | Mon, 13 Oct 2014 13:38:28 -0400 |
I have a GnuRadio C++ program that decodes and records a SmartNet Trunked radio system. It is running great under GnuRadio 3.6.5.1, but it doesn’t seem to be working under 3.7.6. 3.6 is installed in /usr/local and 3.7.6 was installed in my home directory using PyBombs. My updated program compiles against 3.7 with no problem and runs. It will pick up a few of the trunking commands, so it is working, but the ratios is about 1 to 100 compared to 3.6. I also tried running it in a Ubuntu VM with 3.7 installed at /usr/local and had the same results. I corrected for the change with XlatingFirFilter in 3.7, so it is the opposite offset of 3.6. It looks like it could be a tuning error though, the flow graph seems to be failing mostly at the CRC check. Did anything else change with Blocks in 3.7? I looked at gr-osmosdr but I didn’t notice huge discrepancies between the 3.6 and 3.7 branches. Are there some obvious things I could be missing? I feel like this is something small and stupid that I missing. The diff between the two versions is here, smartness.cc is the main file that decodes the control channel. As you can see, there is not that much different: Here is the central code block that does it. Anything obviously dumb here? float samples_per_second = samp_rate; float syms_per_sec = 3600; float gain_mu = 0.01; float mu=0.5; float omega_relative_limit = 0.3; float offset = chan_freq - center_freq; // have to reverse it for 3.7 because it swapped in the switch. float clockrec_oversample = 3; int decim = int(samples_per_second / (syms_per_sec * clockrec_oversample)); float sps = samples_per_second/decim/syms_per_sec; const double pi = boost::math::constants::pi<double>(); cout << "Control channel offset: " << offset << endl; cout << "Decim: " << decim << endl; cout << "Samples per symbol: " << sps << endl; std::vector<float> lpf_taps; init_loggers(max_loggers, center_freq, samp_rate); gr::msg_queue::sptr queue = gr::msg_queue::make(); lpf_taps = gr::filter::firdes::low_pass(1, samp_rate, 10000, 12000); gr::filter::freq_xlating_fir_filter_ccf::sptr prefilter = gr::filter::freq_xlating_fir_filter_ccf::make(decim, lpf_taps, offset, samp_rate); gr::digital::fll_band_edge_cc::sptr carriertrack = gr::digital::fll_band_edge_cc::make(sps, 0.6, 64, 0.35); gr::analog::pll_freqdet_cf::sptr pll_demod = gr::analog::pll_freqdet_cf::make(2.0 / clockrec_oversample, 2*pi/clockrec_oversample, -2*pi/clockrec_oversample); gr::digital::clock_recovery_mm_ff::sptr softbits = gr::digital::clock_recovery_mm_ff::make(sps, 0.25 * gain_mu * gain_mu, mu, gain_mu, omega_relative_limit); gr::digital::binary_slicer_fb::sptr slicer = gr::digital::binary_slicer_fb::make(); gr::digital::correlate_access_code_tag_bb::sptr start_correlator = gr::digital::correlate_access_code_tag_bb::make("10101100",0,"smartnet_preamble"); smartnet_deinterleave_sptr deinterleave = smartnet_make_deinterleave(); smartnet_crc_sptr crc = smartnet_make_crc(queue); tb->connect(src,0,prefilter,0); tb->connect(prefilter,0,carriertrack,0); tb->connect(carriertrack, 0, pll_demod, 0); tb->connect(pll_demod, 0, softbits, 0); tb->connect(softbits, 0, slicer, 0); tb->connect(slicer, 0, start_correlator, 0); tb->connect(start_correlator, 0, deinterleave, 0); tb->connect(deinterleave, 0, crc, 0); tb->start(); |
[Prev in Thread] | Current Thread | [Next in Thread] |