summaryrefslogtreecommitdiff
path: root/gr-digital
diff options
context:
space:
mode:
Diffstat (limited to 'gr-digital')
-rw-r--r--gr-digital/examples/CMakeLists.txt1
-rwxr-xr-xgr-digital/examples/berawgn.py104
-rw-r--r--gr-digital/examples/demod/ber_simulation.grc305
-rw-r--r--gr-digital/examples/demod/digital_freq_lock.grc806
-rw-r--r--gr-digital/examples/demod/dpsk_loopback.grc198
-rw-r--r--gr-digital/examples/demod/gfsk_loopback.grc646
-rw-r--r--gr-digital/examples/demod/mpsk_demod.grc10
-rw-r--r--gr-digital/examples/demod/pam_sync.grc1117
-rw-r--r--gr-digital/examples/demod/pam_timing.grc370
-rw-r--r--gr-digital/grc/digital_dxpsk_demod.xml14
-rw-r--r--gr-digital/grc/digital_dxpsk_mod.xml10
-rw-r--r--gr-digital/grc/digital_gfsk_demod.xml95
-rw-r--r--gr-digital/grc/digital_gfsk_mod.xml74
-rw-r--r--gr-digital/include/digital_fll_band_edge_cc.h40
-rw-r--r--gr-digital/lib/digital_fll_band_edge_cc.cc70
-rw-r--r--gr-digital/python/CMakeLists.txt1
-rw-r--r--gr-digital/python/__init__.py1
-rw-r--r--gr-digital/python/gfsk.py306
18 files changed, 2364 insertions, 1804 deletions
diff --git a/gr-digital/examples/CMakeLists.txt b/gr-digital/examples/CMakeLists.txt
index 33d257e59..63e1eba4e 100644
--- a/gr-digital/examples/CMakeLists.txt
+++ b/gr-digital/examples/CMakeLists.txt
@@ -71,6 +71,7 @@ install(
demod/pam_timing.grc
demod/ber_simulation.grc
demod/dpsk_loopback.grc
+ demod/gfsk_loopback.grc
DESTINATION ${GR_PKG_DIGITAL_EXAMPLES_DIR}/demod
COMPONENT "digital_python"
)
diff --git a/gr-digital/examples/berawgn.py b/gr-digital/examples/berawgn.py
new file mode 100755
index 000000000..d58dfbaae
--- /dev/null
+++ b/gr-digital/examples/berawgn.py
@@ -0,0 +1,104 @@
+#!/usr/bin/env python
+"""
+BER simulation for QPSK signals, compare to theoretical values.
+Change the N_BITS value to simulate more bits per Eb/N0 value,
+thus allowing to check for lower BER values.
+
+Lower values will work faster, higher values will use a lot of RAM.
+Also, this app isn't highly optimized--the flow graph is completely
+reinstantiated for every Eb/N0 value.
+Of course, expect the maximum value for BER to be one order of
+magnitude below what you chose for N_BITS.
+"""
+
+
+import math
+import numpy
+from scipy.special import erfc
+import pylab
+from gnuradio import gr, digital
+
+# Best to choose powers of 10
+N_BITS = 1e7
+RAND_SEED = 42
+
+def berawgn(EbN0):
+ """ Calculates theoretical bit error rate in AWGN (for BPSK and given Eb/N0) """
+ return 0.5 * erfc(math.sqrt(10**(float(EbN0)/10)))
+
+class BitErrors(gr.hier_block2):
+ """ Two inputs: true and received bits. We compare them and
+ add up the number of incorrect bits. Because integrate_ff()
+ can only add up a certain number of values, the output is
+ not a scalar, but a sequence of values, the sum of which is
+ the BER. """
+ def __init__(self, bits_per_byte):
+ gr.hier_block2.__init__(self, "BitErrors",
+ gr.io_signature(2, 2, gr.sizeof_char),
+ gr.io_signature(1, 1, gr.sizeof_int))
+
+ # Bit comparison
+ comp = gr.xor_bb()
+ intdump_decim = 100000
+ if N_BITS < intdump_decim:
+ intdump_decim = int(N_BITS)
+ self.connect(self,
+ comp,
+ gr.unpack_k_bits_bb(bits_per_byte),
+ gr.uchar_to_float(),
+ gr.integrate_ff(intdump_decim),
+ gr.multiply_const_ff(1.0/N_BITS),
+ self)
+ self.connect((self, 1), (comp, 1))
+
+class BERAWGNSimu(gr.top_block):
+ " This contains the simulation flow graph "
+ def __init__(self, EbN0):
+ gr.top_block.__init__(self)
+ self.const = digital.qpsk_constellation()
+ # Source is N_BITS bits, non-repeated
+ data = map(int, numpy.random.randint(0, self.const.arity(), N_BITS/self.const.bits_per_symbol()))
+ src = gr.vector_source_b(data, False)
+ mod = gr.chunks_to_symbols_bc((self.const.points()), 1)
+ add = gr.add_vcc()
+ noise = gr.noise_source_c(gr.GR_GAUSSIAN,
+ self.EbN0_to_noise_voltage(EbN0),
+ RAND_SEED)
+ demod = digital.constellation_decoder_cb(self.const.base())
+ ber = BitErrors(self.const.bits_per_symbol())
+ self.sink = gr.vector_sink_f()
+ self.connect(src, mod, add, demod, ber, self.sink)
+ self.connect(noise, (add, 1))
+ self.connect(src, (ber, 1))
+
+ def EbN0_to_noise_voltage(self, EbN0):
+ """ Converts Eb/N0 to a single-sided noise voltage (assuming unit symbol power) """
+ return 1.0 / math.sqrt(2.0 * self.const.bits_per_symbol() * 10**(float(EbN0)/10))
+
+
+def simulate_ber(EbN0):
+ """ All the work's done here: create flow graph, run, read out BER """
+ print "Eb/N0 = %d dB" % EbN0
+ fg = BERAWGNSimu(EbN0)
+ fg.run()
+ return numpy.sum(fg.sink.data())
+
+if __name__ == "__main__":
+ EbN0_min = 0
+ EbN0_max = 15
+ EbN0_range = range(EbN0_min, EbN0_max+1)
+ ber_theory = [berawgn(x) for x in EbN0_range]
+ print "Simulating..."
+ ber_simu = [simulate_ber(x) for x in EbN0_range]
+
+ f = pylab.figure()
+ s = f.add_subplot(1,1,1)
+ s.semilogy(EbN0_range, ber_theory, 'g-.', label="Theoretical")
+ s.semilogy(EbN0_range, ber_simu, 'b-o', label="Simulated")
+ s.set_title('BER Simulation')
+ s.set_xlabel('Eb/N0 (dB)')
+ s.set_ylabel('BER')
+ s.legend()
+ s.grid()
+ pylab.show()
+
diff --git a/gr-digital/examples/demod/ber_simulation.grc b/gr-digital/examples/demod/ber_simulation.grc
index 6a9361ed1..b7c6a624b 100644
--- a/gr-digital/examples/demod/ber_simulation.grc
+++ b/gr-digital/examples/demod/ber_simulation.grc
@@ -1,6 +1,6 @@
<?xml version='1.0' encoding='ASCII'?>
<flow_graph>
- <timestamp>Tue Apr 3 18:11:51 2012</timestamp>
+ <timestamp>Thu Jul 5 15:57:06 2012</timestamp>
<block>
<key>options</key>
<param>
@@ -44,6 +44,10 @@
<value>True</value>
</param>
<param>
+ <key>max_nouts</key>
+ <value>0</value>
+ </param>
+ <param>
<key>realtime_scheduling</key>
<value></value>
</param>
@@ -57,10 +61,41 @@
</param>
</block>
<block>
- <key>gr_noise_source_x</key>
+ <key>gr_throttle</key>
<param>
<key>id</key>
- <value>gr_noise_source_x</value>
+ <value>gr_throttle</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>type</key>
+ <value>byte</value>
+ </param>
+ <param>
+ <key>samples_per_second</key>
+ <value>samp_rate</value>
+ </param>
+ <param>
+ <key>vlen</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(284, 24)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>gr_add_xx</key>
+ <param>
+ <key>id</key>
+ <value>gr_add_xx</value>
</param>
<param>
<key>_enabled</key>
@@ -71,20 +106,39 @@
<value>complex</value>
</param>
<param>
- <key>noise_type</key>
- <value>gr.GR_GAUSSIAN</value>
+ <key>num_inputs</key>
+ <value>2</value>
</param>
<param>
- <key>amp</key>
- <value>noise</value>
+ <key>vlen</key>
+ <value>1</value>
</param>
<param>
- <key>seed</key>
- <value>42</value>
+ <key>_coordinate</key>
+ <value>(486, 151)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>digital_constellation_decoder_cb</key>
+ <param>
+ <key>id</key>
+ <value>digital_constellation_decoder_cb_0</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>constellation</key>
+ <value>const.base()</value>
</param>
<param>
<key>_coordinate</key>
- <value>(235, 379)</value>
+ <value>(618, 164)</value>
</param>
<param>
<key>_rotation</key>
@@ -171,38 +225,30 @@
</param>
<param>
<key>_coordinate</key>
- <value>(1062, 11)</value>
+ <value>(791, 228)</value>
</param>
<param>
<key>_rotation</key>
- <value>0</value>
+ <value>180</value>
</param>
</block>
<block>
- <key>gr_throttle</key>
+ <key>import</key>
<param>
<key>id</key>
- <value>gr_throttle</value>
+ <value>import</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>type</key>
- <value>byte</value>
- </param>
- <param>
- <key>samples_per_second</key>
- <value>samp_rate</value>
- </param>
- <param>
- <key>vlen</key>
- <value>1</value>
+ <key>import</key>
+ <value>import math</value>
</param>
<param>
<key>_coordinate</key>
- <value>(397, 27)</value>
+ <value>(18, 373)</value>
</param>
<param>
<key>_rotation</key>
@@ -213,7 +259,7 @@
<key>variable</key>
<param>
<key>id</key>
- <value>samp_rate</value>
+ <value>const</value>
</param>
<param>
<key>_enabled</key>
@@ -221,11 +267,11 @@
</param>
<param>
<key>value</key>
- <value>50e3</value>
+ <value>digital.qpsk_constellation()</value>
</param>
<param>
<key>_coordinate</key>
- <value>(20, 168)</value>
+ <value>(116, 310)</value>
</param>
<param>
<key>_rotation</key>
@@ -233,22 +279,22 @@
</param>
</block>
<block>
- <key>import</key>
+ <key>variable</key>
<param>
<key>id</key>
- <value>import</value>
+ <value>samp_rate</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>import</key>
- <value>import math</value>
+ <key>value</key>
+ <value>100e3</value>
</param>
<param>
<key>_coordinate</key>
- <value>(138, 168)</value>
+ <value>(16, 308)</value>
</param>
<param>
<key>_rotation</key>
@@ -271,7 +317,7 @@
</param>
<param>
<key>title</key>
- <value>"Constellation: "+str(const)</value>
+ <value>"Constellation: "+str(const.arity()) + "-PSK"</value>
</param>
<param>
<key>samp_rate</key>
@@ -323,7 +369,7 @@
</param>
<param>
<key>_coordinate</key>
- <value>(828, 368)</value>
+ <value>(623, 228)</value>
</param>
<param>
<key>_rotation</key>
@@ -331,10 +377,10 @@
</param>
</block>
<block>
- <key>gr_add_xx</key>
+ <key>blks2_error_rate</key>
<param>
<key>id</key>
- <value>gr_add_xx</value>
+ <value>blks2_error_rate</value>
</param>
<param>
<key>_enabled</key>
@@ -342,42 +388,19 @@
</param>
<param>
<key>type</key>
- <value>complex</value>
- </param>
- <param>
- <key>num_inputs</key>
- <value>2</value>
- </param>
- <param>
- <key>vlen</key>
- <value>1</value>
- </param>
- <param>
- <key>_coordinate</key>
- <value>(652, 395)</value>
- </param>
- <param>
- <key>_rotation</key>
- <value>0</value>
- </param>
- </block>
- <block>
- <key>digital_constellation_decoder_cb</key>
- <param>
- <key>id</key>
- <value>digital_constellation_decoder_cb_0</value>
+ <value>'BER'</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>win_size</key>
+ <value>int(1e7)</value>
</param>
<param>
- <key>constellation</key>
- <value>const.base()</value>
+ <key>bits_per_symbol</key>
+ <value>const.bits_per_symbol()</value>
</param>
<param>
<key>_coordinate</key>
- <value>(693, 205)</value>
+ <value>(720, 25)</value>
</param>
<param>
<key>_rotation</key>
@@ -385,45 +408,34 @@
</param>
</block>
<block>
- <key>variable</key>
+ <key>gr_noise_source_x</key>
<param>
<key>id</key>
- <value>const</value>
+ <value>gr_noise_source_x</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>value</key>
- <value>digital.qpsk_constellation()</value>
- </param>
- <param>
- <key>_coordinate</key>
- <value>(16, 461)</value>
- </param>
- <param>
- <key>_rotation</key>
- <value>0</value>
+ <key>type</key>
+ <value>complex</value>
</param>
- </block>
- <block>
- <key>variable</key>
<param>
- <key>id</key>
- <value>const_points</value>
+ <key>noise_type</key>
+ <value>gr.GR_GAUSSIAN</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>amp</key>
+ <value>1.0 / math.sqrt(2.0 * const.bits_per_symbol() * 10**(EbN0/10))</value>
</param>
<param>
- <key>value</key>
- <value>const.points()</value>
+ <key>seed</key>
+ <value>42</value>
</param>
<param>
<key>_coordinate</key>
- <value>(17, 532)</value>
+ <value>(16, 224)</value>
</param>
<param>
<key>_rotation</key>
@@ -431,38 +443,38 @@
</param>
</block>
<block>
- <key>random_source_x</key>
+ <key>gr_chunks_to_symbols_xx</key>
<param>
<key>id</key>
- <value>random_source_x</value>
+ <value>gr_chunks_to_symbols_xx</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>type</key>
+ <key>in_type</key>
<value>byte</value>
</param>
<param>
- <key>min</key>
- <value>0</value>
+ <key>out_type</key>
+ <value>complex</value>
</param>
<param>
- <key>max</key>
- <value>len(const_points)</value>
+ <key>symbol_table</key>
+ <value>const.points()</value>
</param>
<param>
- <key>num_samps</key>
- <value>1000000</value>
+ <key>dimension</key>
+ <value>1</value>
</param>
<param>
- <key>repeat</key>
- <value>False</value>
+ <key>num_ports</key>
+ <value>1</value>
</param>
<param>
<key>_coordinate</key>
- <value>(15, 244)</value>
+ <value>(240, 140)</value>
</param>
<param>
<key>_rotation</key>
@@ -470,69 +482,54 @@
</param>
</block>
<block>
- <key>gr_chunks_to_symbols_xx</key>
+ <key>variable_slider</key>
<param>
<key>id</key>
- <value>gr_chunks_to_symbols_xx</value>
+ <value>EbN0</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>in_type</key>
- <value>byte</value>
- </param>
- <param>
- <key>out_type</key>
- <value>complex</value>
- </param>
- <param>
- <key>symbol_table</key>
- <value>const_points</value>
- </param>
- <param>
- <key>dimension</key>
- <value>1</value>
+ <key>label</key>
+ <value>Eb/N0 (dB)</value>
</param>
<param>
- <key>num_ports</key>
- <value>1</value>
+ <key>value</key>
+ <value>10</value>
</param>
<param>
- <key>_coordinate</key>
- <value>(367, 260)</value>
+ <key>min</key>
+ <value>-10</value>
</param>
<param>
- <key>_rotation</key>
- <value>0</value>
+ <key>max</key>
+ <value>200</value>
</param>
- </block>
- <block>
- <key>blks2_error_rate</key>
<param>
- <key>id</key>
- <value>blks2_error_rate</value>
+ <key>num_steps</key>
+ <value>211</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>style</key>
+ <value>wx.SL_HORIZONTAL</value>
</param>
<param>
- <key>type</key>
- <value>'BER'</value>
+ <key>converver</key>
+ <value>float_converter</value>
</param>
<param>
- <key>win_size</key>
- <value>1000000</value>
+ <key>grid_pos</key>
+ <value></value>
</param>
<param>
- <key>bits_per_symbol</key>
- <value>int(math.log(len(const_points))/math.log(2))</value>
+ <key>notebook</key>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(670, 41)</value>
+ <value>(311, 309)</value>
</param>
<param>
<key>_rotation</key>
@@ -540,22 +537,18 @@
</param>
</block>
<block>
- <key>variable_slider</key>
+ <key>random_source_x</key>
<param>
<key>id</key>
- <value>noise</value>
+ <value>random_source_x</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>label</key>
- <value>AWGN Noise</value>
- </param>
- <param>
- <key>value</key>
- <value>0.10</value>
+ <key>type</key>
+ <value>byte</value>
</param>
<param>
<key>min</key>
@@ -563,31 +556,19 @@
</param>
<param>
<key>max</key>
- <value>1</value>
- </param>
- <param>
- <key>num_steps</key>
- <value>100</value>
+ <value>const.arity()</value>
</param>
<param>
- <key>style</key>
- <value>wx.SL_HORIZONTAL</value>
- </param>
- <param>
- <key>converver</key>
- <value>float_converter</value>
- </param>
- <param>
- <key>grid_pos</key>
- <value></value>
+ <key>num_samps</key>
+ <value>10000000</value>
</param>
<param>
- <key>notebook</key>
- <value></value>
+ <key>repeat</key>
+ <value>True</value>
</param>
<param>
<key>_coordinate</key>
- <value>(268, 481)</value>
+ <value>(17, 125)</value>
</param>
<param>
<key>_rotation</key>
diff --git a/gr-digital/examples/demod/digital_freq_lock.grc b/gr-digital/examples/demod/digital_freq_lock.grc
index 36037febb..df105dd7f 100644
--- a/gr-digital/examples/demod/digital_freq_lock.grc
+++ b/gr-digital/examples/demod/digital_freq_lock.grc
@@ -1,6 +1,6 @@
<?xml version='1.0' encoding='ASCII'?>
<flow_graph>
- <timestamp>Sat Mar 6 17:17:12 2010</timestamp>
+ <timestamp>Thu Jul 5 18:11:22 2012</timestamp>
<block>
<key>options</key>
<param>
@@ -44,12 +44,16 @@
<value>True</value>
</param>
<param>
+ <key>max_nouts</key>
+ <value>0</value>
+ </param>
+ <param>
<key>realtime_scheduling</key>
<value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(10, 10)</value>
+ <value>(-1, 0)</value>
</param>
<param>
<key>_rotation</key>
@@ -57,37 +61,38 @@
</param>
</block>
<block>
- <key>gr_uchar_to_float</key>
+ <key>random_source_x</key>
<param>
<key>id</key>
- <value>gr_uchar_to_float_0</value>
+ <value>random_source_x</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>_coordinate</key>
- <value>(217, 108)</value>
+ <key>type</key>
+ <value>byte</value>
</param>
<param>
- <key>_rotation</key>
+ <key>min</key>
<value>0</value>
</param>
- </block>
- <block>
- <key>gr_uchar_to_float</key>
<param>
- <key>id</key>
- <value>gr_uchar_to_float_0_0</value>
+ <key>max</key>
+ <value>256</value>
</param>
<param>
- <key>_enabled</key>
+ <key>num_samps</key>
+ <value>10000000</value>
+ </param>
+ <param>
+ <key>repeat</key>
<value>True</value>
</param>
<param>
<key>_coordinate</key>
- <value>(216, 273)</value>
+ <value>(-2, 111)</value>
</param>
<param>
<key>_rotation</key>
@@ -95,54 +100,30 @@
</param>
</block>
<block>
- <key>variable_slider</key>
+ <key>gr_throttle</key>
<param>
<key>id</key>
- <value>freq_offset</value>
+ <value>gr_throttle_0</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>label</key>
- <value>Frequency Offset</value>
- </param>
- <param>
- <key>value</key>
- <value>0</value>
- </param>
- <param>
- <key>min</key>
- <value>-0.5</value>
- </param>
- <param>
- <key>max</key>
- <value>0.5</value>
- </param>
- <param>
- <key>num_steps</key>
- <value>1000</value>
- </param>
- <param>
- <key>style</key>
- <value>wx.SL_HORIZONTAL</value>
- </param>
- <param>
- <key>converver</key>
- <value>float_converter</value>
+ <key>type</key>
+ <value>complex</value>
</param>
<param>
- <key>grid_pos</key>
- <value></value>
+ <key>samples_per_second</key>
+ <value>samp_rate</value>
</param>
<param>
- <key>notebook</key>
- <value></value>
+ <key>vlen</key>
+ <value>1</value>
</param>
<param>
<key>_coordinate</key>
- <value>(293, 684)</value>
+ <value>(456, 134)</value>
</param>
<param>
<key>_rotation</key>
@@ -150,38 +131,22 @@
</param>
</block>
<block>
- <key>random_source_x</key>
+ <key>variable</key>
<param>
<key>id</key>
- <value>random_source_x_0</value>
+ <value>sps</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>type</key>
- <value>byte</value>
- </param>
- <param>
- <key>min</key>
- <value>0</value>
- </param>
- <param>
- <key>max</key>
- <value>pam_amp</value>
- </param>
- <param>
- <key>num_samps</key>
- <value>10000</value>
- </param>
- <param>
- <key>repeat</key>
- <value>True</value>
+ <key>value</key>
+ <value>4</value>
</param>
<param>
<key>_coordinate</key>
- <value>(13, 80)</value>
+ <value>(166, -2)</value>
</param>
<param>
<key>_rotation</key>
@@ -189,38 +154,22 @@
</param>
</block>
<block>
- <key>random_source_x</key>
+ <key>variable</key>
<param>
<key>id</key>
- <value>random_source_x_0_0</value>
+ <value>rolloff</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>type</key>
- <value>byte</value>
- </param>
- <param>
- <key>min</key>
- <value>0</value>
- </param>
- <param>
- <key>max</key>
- <value>pam_amp</value>
- </param>
- <param>
- <key>num_samps</key>
- <value>10000</value>
- </param>
- <param>
- <key>repeat</key>
- <value>True</value>
+ <key>value</key>
+ <value>0.35</value>
</param>
<param>
<key>_coordinate</key>
- <value>(15, 245)</value>
+ <value>(231, 0)</value>
</param>
<param>
<key>_rotation</key>
@@ -228,10 +177,10 @@
</param>
</block>
<block>
- <key>const_source_x</key>
+ <key>digital_fll_band_edge_cc</key>
<param>
<key>id</key>
- <value>const_source_x_0</value>
+ <value>digital_fll_band_edge_cc_0</value>
</param>
<param>
<key>_enabled</key>
@@ -239,42 +188,27 @@
</param>
<param>
<key>type</key>
- <value>float</value>
- </param>
- <param>
- <key>const</key>
- <value>-0.5*(pam_amp-1)</value>
- </param>
- <param>
- <key>_coordinate</key>
- <value>(213, 197)</value>
- </param>
- <param>
- <key>_rotation</key>
- <value>0</value>
+ <value>cc</value>
</param>
- </block>
- <block>
- <key>const_source_x</key>
<param>
- <key>id</key>
- <value>const_source_x_0_0</value>
+ <key>samps_per_sym</key>
+ <value>sps</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>rolloff</key>
+ <value>rolloff</value>
</param>
<param>
- <key>type</key>
- <value>float</value>
+ <key>filter_size</key>
+ <value>44</value>
</param>
<param>
- <key>const</key>
- <value>-0.5*(pam_amp-1)</value>
+ <key>w</key>
+ <value>freq_bw</value>
</param>
<param>
<key>_coordinate</key>
- <value>(200, 360)</value>
+ <value>(81, 248)</value>
</param>
<param>
<key>_rotation</key>
@@ -282,61 +216,54 @@
</param>
</block>
<block>
- <key>gr_add_xx</key>
+ <key>variable_slider</key>
<param>
<key>id</key>
- <value>gr_add_xx_0</value>
+ <value>freq_bw</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>type</key>
- <value>float</value>
+ <key>label</key>
+ <value>FLL Loop Bandwidth</value>
</param>
<param>
- <key>num_inputs</key>
- <value>2</value>
+ <key>value</key>
+ <value>0</value>
</param>
<param>
- <key>vlen</key>
- <value>1</value>
+ <key>min</key>
+ <value>0</value>
</param>
<param>
- <key>_coordinate</key>
- <value>(440, 167)</value>
+ <key>max</key>
+ <value>0.1</value>
</param>
<param>
- <key>_rotation</key>
- <value>0</value>
- </param>
- </block>
- <block>
- <key>gr_add_xx</key>
- <param>
- <key>id</key>
- <value>gr_add_xx_0_1</value>
+ <key>num_steps</key>
+ <value>1000</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>style</key>
+ <value>wx.SL_HORIZONTAL</value>
</param>
<param>
- <key>type</key>
- <value>float</value>
+ <key>converver</key>
+ <value>float_converter</value>
</param>
<param>
- <key>num_inputs</key>
- <value>2</value>
+ <key>grid_pos</key>
+ <value></value>
</param>
<param>
- <key>vlen</key>
- <value>1</value>
+ <key>notebook</key>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(430, 330)</value>
+ <value>(80, 382)</value>
</param>
<param>
<key>_rotation</key>
@@ -347,7 +274,7 @@
<key>variable</key>
<param>
<key>id</key>
- <value>nfilts</value>
+ <value>samp_rate</value>
</param>
<param>
<key>_enabled</key>
@@ -355,11 +282,11 @@
</param>
<param>
<key>value</key>
- <value>32</value>
+ <value>32000</value>
</param>
<param>
<key>_coordinate</key>
- <value>(435, 686)</value>
+ <value>(439, -1)</value>
</param>
<param>
<key>_rotation</key>
@@ -414,7 +341,7 @@
</param>
<param>
<key>_coordinate</key>
- <value>(168, 684)</value>
+ <value>(553, 0)</value>
</param>
<param>
<key>_rotation</key>
@@ -422,91 +349,54 @@
</param>
</block>
<block>
- <key>variable</key>
+ <key>variable_slider</key>
<param>
<key>id</key>
- <value>spb_gen</value>
+ <value>freq_offset</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>value</key>
- <value>4</value>
- </param>
- <param>
- <key>_coordinate</key>
- <value>(119, 841)</value>
- </param>
- <param>
- <key>_rotation</key>
- <value>0</value>
- </param>
- </block>
- <block>
- <key>variable</key>
- <param>
- <key>id</key>
- <value>pam_amp</value>
- </param>
- <param>
- <key>_enabled</key>
- <value>True</value>
+ <key>label</key>
+ <value>Frequency Offset</value>
</param>
<param>
<key>value</key>
- <value>2</value>
- </param>
- <param>
- <key>_coordinate</key>
- <value>(223, 9)</value>
- </param>
- <param>
- <key>_rotation</key>
<value>0</value>
</param>
- </block>
- <block>
- <key>variable</key>
- <param>
- <key>id</key>
- <value>spb</value>
- </param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>min</key>
+ <value>-0.5</value>
</param>
<param>
- <key>value</key>
- <value>4.1</value>
+ <key>max</key>
+ <value>0.5</value>
</param>
<param>
- <key>_coordinate</key>
- <value>(32, 842)</value>
+ <key>num_steps</key>
+ <value>1000</value>
</param>
<param>
- <key>_rotation</key>
- <value>0</value>
+ <key>style</key>
+ <value>wx.SL_HORIZONTAL</value>
</param>
- </block>
- <block>
- <key>gr_float_to_complex</key>
<param>
- <key>id</key>
- <value>gr_float_to_complex_0</value>
+ <key>converver</key>
+ <value>float_converter</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>grid_pos</key>
+ <value></value>
</param>
<param>
- <key>vlen</key>
- <value>1</value>
+ <key>notebook</key>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(590, 184)</value>
+ <value>(673, -1)</value>
</param>
<param>
<key>_rotation</key>
@@ -514,65 +404,38 @@
</param>
</block>
<block>
- <key>gr_throttle</key>
+ <key>gr_channel_model</key>
<param>
<key>id</key>
- <value>gr_throttle_0</value>
+ <value>gr_channel_model_0</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>type</key>
- <value>complex</value>
- </param>
- <param>
- <key>samples_per_second</key>
- <value>samp_rate</value>
- </param>
- <param>
- <key>vlen</key>
- <value>1</value>
- </param>
- <param>
- <key>_coordinate</key>
- <value>(788, 197)</value>
- </param>
- <param>
- <key>_rotation</key>
- <value>0</value>
- </param>
- </block>
- <block>
- <key>notebook</key>
- <param>
- <key>id</key>
- <value>notebook_0</value>
- </param>
- <param>
- <key>_enabled</key>
- <value>True</value>
+ <key>noise_voltage</key>
+ <value>noise_amp</value>
</param>
<param>
- <key>style</key>
- <value>wx.NB_TOP</value>
+ <key>freq_offset</key>
+ <value>freq_offset</value>
</param>
<param>
- <key>labels</key>
- <value>['Freq', 'Time']</value>
+ <key>epsilon</key>
+ <value>1.0</value>
</param>
<param>
- <key>grid_pos</key>
- <value></value>
+ <key>taps</key>
+ <value>1.0</value>
</param>
<param>
- <key>notebook</key>
- <value></value>
+ <key>seed</key>
+ <value>42</value>
</param>
<param>
<key>_coordinate</key>
- <value>(216, 845)</value>
+ <value>(649, 104)</value>
</param>
<param>
<key>_rotation</key>
@@ -638,8 +501,16 @@
<value>notebook_0,1</value>
</param>
<param>
+ <key>trig_mode</key>
+ <value>gr.gr_TRIG_MODE_AUTO</value>
+ </param>
+ <param>
+ <key>y_axis_label</key>
+ <value>Counts</value>
+ </param>
+ <param>
<key>_coordinate</key>
- <value>(1123, 392)</value>
+ <value>(875, 0)</value>
</param>
<param>
<key>_rotation</key>
@@ -725,8 +596,59 @@
<value>notebook_0,0</value>
</param>
<param>
+ <key>freqvar</key>
+ <value>None</value>
+ </param>
+ <param>
<key>_coordinate</key>
- <value>(1122, 473)</value>
+ <value>(875, 108)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>digital_psk_mod</key>
+ <param>
+ <key>id</key>
+ <value>digital_psk_mod_0</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>constellation_points</key>
+ <value>2</value>
+ </param>
+ <param>
+ <key>mod_code</key>
+ <value>"gray"</value>
+ </param>
+ <param>
+ <key>differential</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>samples_per_symbol</key>
+ <value>sps</value>
+ </param>
+ <param>
+ <key>excess_bw</key>
+ <value>0.35</value>
+ </param>
+ <param>
+ <key>verbose</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>log</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(194, 104)</value>
</param>
<param>
<key>_rotation</key>
@@ -792,8 +714,16 @@
<value>notebook_0,1</value>
</param>
<param>
+ <key>trig_mode</key>
+ <value>gr.gr_TRIG_MODE_AUTO</value>
+ </param>
+ <param>
+ <key>y_axis_label</key>
+ <value>Counts</value>
+ </param>
+ <param>
<key>_coordinate</key>
- <value>(1122, 680)</value>
+ <value>(439, 289)</value>
</param>
<param>
<key>_rotation</key>
@@ -879,233 +809,12 @@
<value>notebook_0,0</value>
</param>
<param>
- <key>_coordinate</key>
- <value>(1121, 762)</value>
- </param>
- <param>
- <key>_rotation</key>
- <value>0</value>
- </param>
- </block>
- <block>
- <key>variable</key>
- <param>
- <key>id</key>
- <value>samp_rate</value>
- </param>
- <param>
- <key>_enabled</key>
- <value>True</value>
- </param>
- <param>
- <key>value</key>
- <value>32000</value>
- </param>
- <param>
- <key>_coordinate</key>
- <value>(128, 9)</value>
- </param>
- <param>
- <key>_rotation</key>
- <value>0</value>
- </param>
- </block>
- <block>
- <key>variable</key>
- <param>
- <key>id</key>
- <value>sig_amp</value>
- </param>
- <param>
- <key>_enabled</key>
- <value>True</value>
- </param>
- <param>
- <key>value</key>
- <value>1</value>
- </param>
- <param>
- <key>_coordinate</key>
- <value>(315, 9)</value>
- </param>
- <param>
- <key>_rotation</key>
- <value>0</value>
- </param>
- </block>
- <block>
- <key>variable</key>
- <param>
- <key>id</key>
- <value>rolloff</value>
- </param>
- <param>
- <key>_enabled</key>
- <value>True</value>
- </param>
- <param>
- <key>value</key>
- <value>0.35</value>
- </param>
- <param>
- <key>_coordinate</key>
- <value>(398, 12)</value>
- </param>
- <param>
- <key>_rotation</key>
- <value>0</value>
- </param>
- </block>
- <block>
- <key>variable</key>
- <param>
- <key>id</key>
- <value>rrctaps</value>
- </param>
- <param>
- <key>_enabled</key>
- <value>True</value>
- </param>
- <param>
- <key>value</key>
- <value>firdes.root_raised_cosine(nfilts,1.0,1.0/(spb*nfilts), .35, int(11*spb*nfilts))</value>
- </param>
- <param>
- <key>_coordinate</key>
- <value>(826, 61)</value>
- </param>
- <param>
- <key>_rotation</key>
- <value>0</value>
- </param>
- </block>
- <block>
- <key>root_raised_cosine_filter</key>
- <param>
- <key>id</key>
- <value>root_raised_cosine_filter_0</value>
- </param>
- <param>
- <key>_enabled</key>
- <value>True</value>
- </param>
- <param>
- <key>type</key>
- <value>interp_fir_filter_ccf</value>
- </param>
- <param>
- <key>decim</key>
- <value>1</value>
- </param>
- <param>
- <key>interp</key>
- <value>spb_gen</value>
- </param>
- <param>
- <key>gain</key>
- <value>2*spb_gen</value>
- </param>
- <param>
- <key>samp_rate</key>
- <value>1.0</value>
- </param>
- <param>
- <key>sym_rate</key>
- <value>1./spb_gen</value>
- </param>
- <param>
- <key>alpha</key>
- <value>rolloff</value>
- </param>
- <param>
- <key>ntaps</key>
- <value>44</value>
- </param>
- <param>
- <key>_coordinate</key>
- <value>(978, 157)</value>
- </param>
- <param>
- <key>_rotation</key>
- <value>0</value>
- </param>
- </block>
- <block>
- <key>gr_fll_band_edge_cc</key>
- <param>
- <key>id</key>
- <value>gr_fll_band_edge_cc_0</value>
- </param>
- <param>
- <key>_enabled</key>
- <value>True</value>
- </param>
- <param>
- <key>type</key>
- <value>cc</value>
- </param>
- <param>
- <key>samps_per_sym</key>
- <value>spb_gen</value>
- </param>
- <param>
- <key>rolloff</key>
- <value>rolloff</value>
- </param>
- <param>
- <key>filter_size</key>
- <value>44</value>
- </param>
- <param>
- <key>alpha</key>
- <value>alpha</value>
- </param>
- <param>
- <key>beta</key>
- <value>beta</value>
- </param>
- <param>
- <key>_coordinate</key>
- <value>(874, 664)</value>
- </param>
- <param>
- <key>_rotation</key>
- <value>0</value>
- </param>
- </block>
- <block>
- <key>gr_channel_model</key>
- <param>
- <key>id</key>
- <value>gr_channel_model_0</value>
- </param>
- <param>
- <key>_enabled</key>
- <value>True</value>
- </param>
- <param>
- <key>noise_voltage</key>
- <value>noise_amp</value>
- </param>
- <param>
- <key>freq_offset</key>
- <value>freq_offset</value>
- </param>
- <param>
- <key>epsilon</key>
- <value>1.0</value>
- </param>
- <param>
- <key>taps</key>
- <value>1.0</value>
- </param>
- <param>
- <key>seed</key>
- <value>42</value>
+ <key>freqvar</key>
+ <value>None</value>
</param>
<param>
<key>_coordinate</key>
- <value>(618, 376)</value>
+ <value>(439, 423)</value>
</param>
<param>
<key>_rotation</key>
@@ -1113,97 +822,22 @@
</param>
</block>
<block>
- <key>variable_slider</key>
- <param>
- <key>id</key>
- <value>beta</value>
- </param>
- <param>
- <key>_enabled</key>
- <value>True</value>
- </param>
- <param>
- <key>label</key>
- <value>Freq Beta</value>
- </param>
- <param>
- <key>value</key>
- <value>0</value>
- </param>
- <param>
- <key>min</key>
- <value>0.0</value>
- </param>
- <param>
- <key>max</key>
- <value>0.01</value>
- </param>
- <param>
- <key>num_steps</key>
- <value>1000</value>
- </param>
- <param>
- <key>style</key>
- <value>wx.SL_HORIZONTAL</value>
- </param>
- <param>
- <key>converver</key>
- <value>float_converter</value>
- </param>
- <param>
- <key>grid_pos</key>
- <value></value>
- </param>
- <param>
- <key>notebook</key>
- <value></value>
- </param>
- <param>
- <key>_coordinate</key>
- <value>(668, 5)</value>
- </param>
- <param>
- <key>_rotation</key>
- <value>180</value>
- </param>
- </block>
- <block>
- <key>variable_slider</key>
+ <key>notebook</key>
<param>
<key>id</key>
- <value>alpha</value>
+ <value>notebook_0</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>label</key>
- <value>Freq Alpha</value>
- </param>
- <param>
- <key>value</key>
- <value>0</value>
- </param>
- <param>
- <key>min</key>
- <value>0</value>
- </param>
- <param>
- <key>max</key>
- <value>0.1</value>
- </param>
- <param>
- <key>num_steps</key>
- <value>1000</value>
- </param>
- <param>
<key>style</key>
- <value>wx.SL_HORIZONTAL</value>
+ <value>wx.NB_TOP</value>
</param>
<param>
- <key>converver</key>
- <value>float_converter</value>
+ <key>labels</key>
+ <value>['Freq', 'Time']</value>
</param>
<param>
<key>grid_pos</key>
@@ -1215,7 +849,7 @@
</param>
<param>
<key>_coordinate</key>
- <value>(552, 4)</value>
+ <value>(114, 521)</value>
</param>
<param>
<key>_rotation</key>
@@ -1223,97 +857,49 @@
</param>
</block>
<connection>
- <source_block_id>random_source_x_0</source_block_id>
- <sink_block_id>gr_uchar_to_float_0</sink_block_id>
- <source_key>0</source_key>
- <sink_key>0</sink_key>
- </connection>
- <connection>
- <source_block_id>gr_uchar_to_float_0</source_block_id>
- <sink_block_id>gr_add_xx_0</sink_block_id>
- <source_key>0</source_key>
- <sink_key>0</sink_key>
- </connection>
- <connection>
- <source_block_id>const_source_x_0</source_block_id>
- <sink_block_id>gr_add_xx_0</sink_block_id>
- <source_key>0</source_key>
- <sink_key>1</sink_key>
- </connection>
- <connection>
- <source_block_id>gr_uchar_to_float_0_0</source_block_id>
- <sink_block_id>gr_add_xx_0_1</sink_block_id>
+ <source_block_id>gr_channel_model_0</source_block_id>
+ <sink_block_id>wxgui_scopesink2_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>const_source_x_0_0</source_block_id>
- <sink_block_id>gr_add_xx_0_1</sink_block_id>
- <source_key>0</source_key>
- <sink_key>1</sink_key>
- </connection>
- <connection>
- <source_block_id>random_source_x_0_0</source_block_id>
- <sink_block_id>gr_uchar_to_float_0_0</sink_block_id>
+ <source_block_id>gr_channel_model_0</source_block_id>
+ <sink_block_id>wxgui_fftsink2_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>gr_add_xx_0</source_block_id>
- <sink_block_id>gr_float_to_complex_0</sink_block_id>
+ <source_block_id>random_source_x</source_block_id>
+ <sink_block_id>digital_psk_mod_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>gr_add_xx_0_1</source_block_id>
- <sink_block_id>gr_float_to_complex_0</sink_block_id>
- <source_key>0</source_key>
- <sink_key>1</sink_key>
- </connection>
- <connection>
- <source_block_id>gr_float_to_complex_0</source_block_id>
+ <source_block_id>digital_psk_mod_0</source_block_id>
<sink_block_id>gr_throttle_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
<source_block_id>gr_throttle_0</source_block_id>
- <sink_block_id>root_raised_cosine_filter_0</sink_block_id>
- <source_key>0</source_key>
- <sink_key>0</sink_key>
- </connection>
- <connection>
- <source_block_id>gr_channel_model_0</source_block_id>
- <sink_block_id>wxgui_scopesink2_0</sink_block_id>
- <source_key>0</source_key>
- <sink_key>0</sink_key>
- </connection>
- <connection>
- <source_block_id>root_raised_cosine_filter_0</source_block_id>
<sink_block_id>gr_channel_model_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
<source_block_id>gr_channel_model_0</source_block_id>
- <sink_block_id>wxgui_fftsink2_0</sink_block_id>
- <source_key>0</source_key>
- <sink_key>0</sink_key>
- </connection>
- <connection>
- <source_block_id>gr_channel_model_0</source_block_id>
- <sink_block_id>gr_fll_band_edge_cc_0</sink_block_id>
+ <sink_block_id>digital_fll_band_edge_cc_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>gr_fll_band_edge_cc_0</source_block_id>
+ <source_block_id>digital_fll_band_edge_cc_0</source_block_id>
<sink_block_id>wxgui_scopesink2_0_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>gr_fll_band_edge_cc_0</source_block_id>
+ <source_block_id>digital_fll_band_edge_cc_0</source_block_id>
<sink_block_id>wxgui_fftsink2_0_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
diff --git a/gr-digital/examples/demod/dpsk_loopback.grc b/gr-digital/examples/demod/dpsk_loopback.grc
index aef6a7738..c9867bea2 100644
--- a/gr-digital/examples/demod/dpsk_loopback.grc
+++ b/gr-digital/examples/demod/dpsk_loopback.grc
@@ -1,6 +1,6 @@
<?xml version='1.0' encoding='ASCII'?>
<flow_graph>
- <timestamp>Tue Apr 3 18:03:52 2012</timestamp>
+ <timestamp>Thu Jul 5 16:26:53 2012</timestamp>
<block>
<key>options</key>
<param>
@@ -17,11 +17,11 @@
</param>
<param>
<key>author</key>
- <value>Example</value>
+ <value>GNU Radio</value>
</param>
<param>
<key>description</key>
- <value>gnuradio flow graph</value>
+ <value>Encode a signal into a packet, modulate, demodulate, decode and show it's the same data.</value>
</param>
<param>
<key>window_size</key>
@@ -44,6 +44,10 @@
<value>True</value>
</param>
<param>
+ <key>max_nouts</key>
+ <value>0</value>
+ </param>
+ <param>
<key>realtime_scheduling</key>
<value></value>
</param>
@@ -72,7 +76,7 @@
</param>
<param>
<key>_coordinate</key>
- <value>(10, 170)</value>
+ <value>(11, 120)</value>
</param>
<param>
<key>_rotation</key>
@@ -127,7 +131,7 @@
</param>
<param>
<key>_coordinate</key>
- <value>(12, 257)</value>
+ <value>(13, 188)</value>
</param>
<param>
<key>_rotation</key>
@@ -135,10 +139,10 @@
</param>
</block>
<block>
- <key>gr_throttle</key>
+ <key>gr_sig_source_x</key>
<param>
<key>id</key>
- <value>gr_throttle_0_0</value>
+ <value>gr_sig_source_x_0</value>
</param>
<param>
<key>_enabled</key>
@@ -149,16 +153,28 @@
<value>float</value>
</param>
<param>
- <key>samples_per_second</key>
+ <key>samp_rate</key>
<value>samp_rate</value>
</param>
<param>
- <key>vlen</key>
+ <key>waveform</key>
+ <value>gr.GR_COS_WAVE</value>
+ </param>
+ <param>
+ <key>freq</key>
+ <value>freq</value>
+ </param>
+ <param>
+ <key>amp</key>
<value>1</value>
</param>
<param>
+ <key>offset</key>
+ <value>0</value>
+ </param>
+ <param>
<key>_coordinate</key>
- <value>(225, 174)</value>
+ <value>(184, 9)</value>
</param>
<param>
<key>_rotation</key>
@@ -166,10 +182,10 @@
</param>
</block>
<block>
- <key>gr_sig_source_x</key>
+ <key>digital_dxpsk_mod</key>
<param>
<key>id</key>
- <value>gr_sig_source_x_0</value>
+ <value>digital_dxpsk_mod_1</value>
</param>
<param>
<key>_enabled</key>
@@ -177,31 +193,31 @@
</param>
<param>
<key>type</key>
- <value>float</value>
+ <value>dbpsk</value>
</param>
<param>
- <key>samp_rate</key>
- <value>samp_rate</value>
+ <key>samples_per_symbol</key>
+ <value>2</value>
</param>
<param>
- <key>waveform</key>
- <value>gr.GR_COS_WAVE</value>
+ <key>excess_bw</key>
+ <value>0.35</value>
</param>
<param>
- <key>freq</key>
- <value>freq</value>
+ <key>gray_coded</key>
+ <value>True</value>
</param>
<param>
- <key>amp</key>
- <value>1</value>
+ <key>verbose</key>
+ <value>False</value>
</param>
<param>
- <key>offset</key>
- <value>0</value>
+ <key>log</key>
+ <value>False</value>
</param>
<param>
<key>_coordinate</key>
- <value>(203, 8)</value>
+ <value>(745, 16)</value>
</param>
<param>
<key>_rotation</key>
@@ -209,10 +225,10 @@
</param>
</block>
<block>
- <key>blks2_packet_decoder</key>
+ <key>gr_throttle</key>
<param>
<key>id</key>
- <value>blks2_packet_decoder_0</value>
+ <value>gr_throttle_0_0</value>
</param>
<param>
<key>_enabled</key>
@@ -223,16 +239,16 @@
<value>float</value>
</param>
<param>
- <key>access_code</key>
- <value></value>
+ <key>samples_per_second</key>
+ <value>samp_rate</value>
</param>
<param>
- <key>threshold</key>
- <value>-1</value>
+ <key>vlen</key>
+ <value>1</value>
</param>
<param>
<key>_coordinate</key>
- <value>(551, 65)</value>
+ <value>(358, 39)</value>
</param>
<param>
<key>_rotation</key>
@@ -240,10 +256,10 @@
</param>
</block>
<block>
- <key>digital_dxpsk_demod</key>
+ <key>blks2_packet_encoder</key>
<param>
<key>id</key>
- <value>digital_dxpsk_demod_0</value>
+ <value>blks2_packet_encoder_0</value>
</param>
<param>
<key>_enabled</key>
@@ -251,51 +267,31 @@
</param>
<param>
<key>type</key>
- <value>dbpsk</value>
+ <value>float</value>
</param>
<param>
<key>samples_per_symbol</key>
<value>2</value>
</param>
<param>
- <key>excess_bw</key>
- <value>0.35</value>
- </param>
- <param>
- <key>freq_bw</key>
- <value>6.28/100.0</value>
- </param>
- <param>
- <key>phase_bw</key>
- <value>6.28/100.0</value>
- </param>
- <param>
- <key>timing_bw</key>
- <value>6.28/100.0</value>
+ <key>bits_per_symbol</key>
+ <value>1</value>
</param>
<param>
- <key>omega_relative_limit</key>
- <value>0.005</value>
+ <key>access_code</key>
+ <value></value>
</param>
<param>
- <key>gray_coded</key>
+ <key>pad_for_usrp</key>
<value>True</value>
</param>
<param>
- <key>verbose</key>
- <value>False</value>
- </param>
- <param>
- <key>log</key>
- <value>False</value>
- </param>
- <param>
- <key>sync_out</key>
- <value>False</value>
+ <key>payload_length</key>
+ <value>0</value>
</param>
<param>
<key>_coordinate</key>
- <value>(639, 254)</value>
+ <value>(541, 9)</value>
</param>
<param>
<key>_rotation</key>
@@ -303,10 +299,10 @@
</param>
</block>
<block>
- <key>digital_dxpsk_mod</key>
+ <key>digital_dxpsk_demod</key>
<param>
<key>id</key>
- <value>digital_dxpsk_mod_0</value>
+ <value>digital_dxpsk_demod_1</value>
</param>
<param>
<key>_enabled</key>
@@ -325,6 +321,22 @@
<value>0.35</value>
</param>
<param>
+ <key>freq_bw</key>
+ <value>6.28/100.0</value>
+ </param>
+ <param>
+ <key>phase_bw</key>
+ <value>6.28/100.0</value>
+ </param>
+ <param>
+ <key>timing_bw</key>
+ <value>6.28/100.0</value>
+ </param>
+ <param>
+ <key>omega_relative_limit</key>
+ <value>0.005</value>
+ </param>
+ <param>
<key>gray_coded</key>
<value>True</value>
</param>
@@ -337,19 +349,23 @@
<value>False</value>
</param>
<param>
+ <key>sync_out</key>
+ <value>False</value>
+ </param>
+ <param>
<key>_coordinate</key>
- <value>(421, 294)</value>
+ <value>(746, 135)</value>
</param>
<param>
<key>_rotation</key>
- <value>0</value>
+ <value>180</value>
</param>
</block>
<block>
- <key>blks2_packet_encoder</key>
+ <key>blks2_packet_decoder</key>
<param>
<key>id</key>
- <value>blks2_packet_encoder_0</value>
+ <value>blks2_packet_decoder_0</value>
</param>
<param>
<key>_enabled</key>
@@ -360,32 +376,20 @@
<value>float</value>
</param>
<param>
- <key>samples_per_symbol</key>
- <value>2</value>
- </param>
- <param>
- <key>bits_per_symbol</key>
- <value>1</value>
- </param>
- <param>
<key>access_code</key>
<value></value>
</param>
<param>
- <key>pad_for_usrp</key>
- <value>True</value>
- </param>
- <param>
- <key>payload_length</key>
- <value>0</value>
+ <key>threshold</key>
+ <value>-1</value>
</param>
<param>
<key>_coordinate</key>
- <value>(216, 286)</value>
+ <value>(545, 187)</value>
</param>
<param>
<key>_rotation</key>
- <value>0</value>
+ <value>180</value>
</param>
</block>
<block>
@@ -456,46 +460,46 @@
</param>
<param>
<key>_coordinate</key>
- <value>(760, 41)</value>
+ <value>(184, 165)</value>
</param>
<param>
<key>_rotation</key>
- <value>0</value>
+ <value>180</value>
</param>
</block>
<connection>
- <source_block_id>gr_sig_source_x_0</source_block_id>
- <sink_block_id>gr_throttle_0_0</sink_block_id>
+ <source_block_id>blks2_packet_decoder_0</source_block_id>
+ <sink_block_id>wxgui_scopesink2_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>gr_throttle_0_0</source_block_id>
- <sink_block_id>blks2_packet_encoder_0</sink_block_id>
+ <source_block_id>blks2_packet_encoder_0</source_block_id>
+ <sink_block_id>digital_dxpsk_mod_1</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>blks2_packet_decoder_0</source_block_id>
- <sink_block_id>wxgui_scopesink2_0</sink_block_id>
+ <source_block_id>digital_dxpsk_mod_1</source_block_id>
+ <sink_block_id>digital_dxpsk_demod_1</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>digital_dxpsk_demod_0</source_block_id>
+ <source_block_id>digital_dxpsk_demod_1</source_block_id>
<sink_block_id>blks2_packet_decoder_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>digital_dxpsk_mod_0</source_block_id>
- <sink_block_id>digital_dxpsk_demod_0</sink_block_id>
+ <source_block_id>gr_throttle_0_0</source_block_id>
+ <sink_block_id>blks2_packet_encoder_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>blks2_packet_encoder_0</source_block_id>
- <sink_block_id>digital_dxpsk_mod_0</sink_block_id>
+ <source_block_id>gr_sig_source_x_0</source_block_id>
+ <sink_block_id>gr_throttle_0_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
diff --git a/gr-digital/examples/demod/gfsk_loopback.grc b/gr-digital/examples/demod/gfsk_loopback.grc
new file mode 100644
index 000000000..f74a83526
--- /dev/null
+++ b/gr-digital/examples/demod/gfsk_loopback.grc
@@ -0,0 +1,646 @@
+<?xml version='1.0' encoding='ASCII'?>
+<flow_graph>
+ <timestamp>Sun Jul 8 16:56:18 2012</timestamp>
+ <block>
+ <key>variable_slider</key>
+ <param>
+ <key>id</key>
+ <value>freq</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>label</key>
+ <value>Frequency (Hz)</value>
+ </param>
+ <param>
+ <key>value</key>
+ <value>500</value>
+ </param>
+ <param>
+ <key>min</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>max</key>
+ <value>samp_rate/2</value>
+ </param>
+ <param>
+ <key>num_steps</key>
+ <value>100</value>
+ </param>
+ <param>
+ <key>style</key>
+ <value>wx.SL_HORIZONTAL</value>
+ </param>
+ <param>
+ <key>converver</key>
+ <value>float_converter</value>
+ </param>
+ <param>
+ <key>grid_pos</key>
+ <value></value>
+ </param>
+ <param>
+ <key>notebook</key>
+ <value></value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(34, 241)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>gr_sig_source_x</key>
+ <param>
+ <key>id</key>
+ <value>gr_sig_source_x_0</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>type</key>
+ <value>float</value>
+ </param>
+ <param>
+ <key>samp_rate</key>
+ <value>samp_rate</value>
+ </param>
+ <param>
+ <key>waveform</key>
+ <value>gr.GR_COS_WAVE</value>
+ </param>
+ <param>
+ <key>freq</key>
+ <value>freq</value>
+ </param>
+ <param>
+ <key>amp</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>offset</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(215, 26)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>gr_throttle</key>
+ <param>
+ <key>id</key>
+ <value>gr_throttle_0_0</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>type</key>
+ <value>float</value>
+ </param>
+ <param>
+ <key>samples_per_second</key>
+ <value>samp_rate</value>
+ </param>
+ <param>
+ <key>vlen</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(272.5, 142.0)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>blks2_packet_encoder</key>
+ <param>
+ <key>id</key>
+ <value>blks2_packet_encoder_0</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>type</key>
+ <value>float</value>
+ </param>
+ <param>
+ <key>samples_per_symbol</key>
+ <value>2</value>
+ </param>
+ <param>
+ <key>bits_per_symbol</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>access_code</key>
+ <value></value>
+ </param>
+ <param>
+ <key>pad_for_usrp</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>payload_length</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(261, 227)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>variable</key>
+ <param>
+ <key>id</key>
+ <value>samp_rate</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>value</key>
+ <value>10000</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(10, 170)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>digital_gfsk_demod</key>
+ <param>
+ <key>id</key>
+ <value>digital_gfsk_demod_0</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>samples_per_symbol</key>
+ <value>sps</value>
+ </param>
+ <param>
+ <key>sensitivity</key>
+ <value>fm_sensitivity</value>
+ </param>
+ <param>
+ <key>gain_mu</key>
+ <value>0.175</value>
+ </param>
+ <param>
+ <key>mu</key>
+ <value>0.5</value>
+ </param>
+ <param>
+ <key>omega_relative_limit</key>
+ <value>0.005</value>
+ </param>
+ <param>
+ <key>freq_error</key>
+ <value>0.0</value>
+ </param>
+ <param>
+ <key>verbose</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>log</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(669, 257)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>variable</key>
+ <param>
+ <key>id</key>
+ <value>sps</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>value</key>
+ <value>8</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(47, 445)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>digital_gfsk_mod</key>
+ <param>
+ <key>id</key>
+ <value>digital_gfsk_mod_0</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>samples_per_symbol</key>
+ <value>sps</value>
+ </param>
+ <param>
+ <key>sensitivity</key>
+ <value>fm_sensitivity</value>
+ </param>
+ <param>
+ <key>bt</key>
+ <value>0.35</value>
+ </param>
+ <param>
+ <key>verbose</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>log</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(456, 277)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>variable</key>
+ <param>
+ <key>id</key>
+ <value>fm_sensitivity</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>value</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(40, 366)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>blks2_packet_decoder</key>
+ <param>
+ <key>id</key>
+ <value>blks2_packet_decoder_0</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>type</key>
+ <value>float</value>
+ </param>
+ <param>
+ <key>access_code</key>
+ <value></value>
+ </param>
+ <param>
+ <key>threshold</key>
+ <value>-1</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(705, 130)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>gr_quadrature_demod_cf</key>
+ <param>
+ <key>id</key>
+ <value>gr_quadrature_demod_cf_0</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>gain</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(627, 417)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>options</key>
+ <param>
+ <key>id</key>
+ <value>gfsk_loopback</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>title</key>
+ <value></value>
+ </param>
+ <param>
+ <key>author</key>
+ <value></value>
+ </param>
+ <param>
+ <key>description</key>
+ <value></value>
+ </param>
+ <param>
+ <key>window_size</key>
+ <value>1280, 1024</value>
+ </param>
+ <param>
+ <key>generate_options</key>
+ <value>wx_gui</value>
+ </param>
+ <param>
+ <key>category</key>
+ <value>Custom</value>
+ </param>
+ <param>
+ <key>run_options</key>
+ <value>prompt</value>
+ </param>
+ <param>
+ <key>run</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>max_nouts</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>realtime_scheduling</key>
+ <value></value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(10, 10)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>wxgui_scopesink2</key>
+ <param>
+ <key>id</key>
+ <value>wxgui_scopesink2_0</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>type</key>
+ <value>float</value>
+ </param>
+ <param>
+ <key>title</key>
+ <value>Scope Plot</value>
+ </param>
+ <param>
+ <key>samp_rate</key>
+ <value>samp_rate</value>
+ </param>
+ <param>
+ <key>v_scale</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>v_offset</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>t_scale</key>
+ <value>1./freq</value>
+ </param>
+ <param>
+ <key>ac_couple</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>xy_mode</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>num_inputs</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>win_size</key>
+ <value></value>
+ </param>
+ <param>
+ <key>grid_pos</key>
+ <value></value>
+ </param>
+ <param>
+ <key>notebook</key>
+ <value></value>
+ </param>
+ <param>
+ <key>trig_mode</key>
+ <value>gr.gr_TRIG_MODE_AUTO</value>
+ </param>
+ <param>
+ <key>y_axis_label</key>
+ <value>Counts</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(907, 59)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>wxgui_scopesink2</key>
+ <param>
+ <key>id</key>
+ <value>wxgui_scopesink2_1</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>type</key>
+ <value>float</value>
+ </param>
+ <param>
+ <key>title</key>
+ <value>Scope Plot</value>
+ </param>
+ <param>
+ <key>samp_rate</key>
+ <value>samp_rate</value>
+ </param>
+ <param>
+ <key>v_scale</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>v_offset</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>t_scale</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>ac_couple</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>xy_mode</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>num_inputs</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>win_size</key>
+ <value></value>
+ </param>
+ <param>
+ <key>grid_pos</key>
+ <value></value>
+ </param>
+ <param>
+ <key>notebook</key>
+ <value></value>
+ </param>
+ <param>
+ <key>trig_mode</key>
+ <value>gr.gr_TRIG_MODE_AUTO</value>
+ </param>
+ <param>
+ <key>y_axis_label</key>
+ <value>Counts</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(853, 400)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <connection>
+ <source_block_id>digital_gfsk_mod_0</source_block_id>
+ <sink_block_id>digital_gfsk_demod_0</sink_block_id>
+ <source_key>0</source_key>
+ <sink_key>0</sink_key>
+ </connection>
+ <connection>
+ <source_block_id>gr_sig_source_x_0</source_block_id>
+ <sink_block_id>gr_throttle_0_0</sink_block_id>
+ <source_key>0</source_key>
+ <sink_key>0</sink_key>
+ </connection>
+ <connection>
+ <source_block_id>gr_throttle_0_0</source_block_id>
+ <sink_block_id>blks2_packet_encoder_0</sink_block_id>
+ <source_key>0</source_key>
+ <sink_key>0</sink_key>
+ </connection>
+ <connection>
+ <source_block_id>blks2_packet_encoder_0</source_block_id>
+ <sink_block_id>digital_gfsk_mod_0</sink_block_id>
+ <source_key>0</source_key>
+ <sink_key>0</sink_key>
+ </connection>
+ <connection>
+ <source_block_id>digital_gfsk_demod_0</source_block_id>
+ <sink_block_id>blks2_packet_decoder_0</sink_block_id>
+ <source_key>0</source_key>
+ <sink_key>0</sink_key>
+ </connection>
+ <connection>
+ <source_block_id>blks2_packet_decoder_0</source_block_id>
+ <sink_block_id>wxgui_scopesink2_0</sink_block_id>
+ <source_key>0</source_key>
+ <sink_key>0</sink_key>
+ </connection>
+ <connection>
+ <source_block_id>digital_gfsk_mod_0</source_block_id>
+ <sink_block_id>gr_quadrature_demod_cf_0</sink_block_id>
+ <source_key>0</source_key>
+ <sink_key>0</sink_key>
+ </connection>
+ <connection>
+ <source_block_id>gr_quadrature_demod_cf_0</source_block_id>
+ <sink_block_id>wxgui_scopesink2_1</sink_block_id>
+ <source_key>0</source_key>
+ <sink_key>0</sink_key>
+ </connection>
+</flow_graph>
diff --git a/gr-digital/examples/demod/mpsk_demod.grc b/gr-digital/examples/demod/mpsk_demod.grc
index d7cca9661..b718fb68a 100644
--- a/gr-digital/examples/demod/mpsk_demod.grc
+++ b/gr-digital/examples/demod/mpsk_demod.grc
@@ -1,6 +1,6 @@
<?xml version='1.0' encoding='ASCII'?>
<flow_graph>
- <timestamp>Tue Apr 3 18:01:57 2012</timestamp>
+ <timestamp>Thu Jul 5 16:28:45 2012</timestamp>
<block>
<key>options</key>
<param>
@@ -44,6 +44,10 @@
<value>True</value>
</param>
<param>
+ <key>max_nouts</key>
+ <value>0</value>
+ </param>
+ <param>
<key>realtime_scheduling</key>
<value></value>
</param>
@@ -405,6 +409,10 @@
<value>notebook, 1</value>
</param>
<param>
+ <key>freqvar</key>
+ <value>None</value>
+ </param>
+ <param>
<key>_coordinate</key>
<value>(847, 10)</value>
</param>
diff --git a/gr-digital/examples/demod/pam_sync.grc b/gr-digital/examples/demod/pam_sync.grc
index 8571995a5..f870a0b06 100644
--- a/gr-digital/examples/demod/pam_sync.grc
+++ b/gr-digital/examples/demod/pam_sync.grc
@@ -1,6 +1,6 @@
<?xml version='1.0' encoding='ASCII'?>
<flow_graph>
- <timestamp>Sat Mar 6 17:17:22 2010</timestamp>
+ <timestamp>Thu Jul 5 17:54:54 2012</timestamp>
<block>
<key>options</key>
<param>
@@ -44,12 +44,16 @@
<value>True</value>
</param>
<param>
+ <key>max_nouts</key>
+ <value>0</value>
+ </param>
+ <param>
<key>realtime_scheduling</key>
<value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(10, 10)</value>
+ <value>(-1, 0)</value>
</param>
<param>
<key>_rotation</key>
@@ -57,37 +61,22 @@
</param>
</block>
<block>
- <key>gr_uchar_to_float</key>
+ <key>variable</key>
<param>
<key>id</key>
- <value>gr_uchar_to_float_0</value>
+ <value>const</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>_coordinate</key>
- <value>(217, 108)</value>
- </param>
- <param>
- <key>_rotation</key>
- <value>0</value>
- </param>
- </block>
- <block>
- <key>gr_uchar_to_float</key>
- <param>
- <key>id</key>
- <value>gr_uchar_to_float_0_0</value>
- </param>
- <param>
- <key>_enabled</key>
- <value>True</value>
+ <key>value</key>
+ <value>digital.qpsk_constellation()</value>
</param>
<param>
<key>_coordinate</key>
- <value>(216, 273)</value>
+ <value>(336, -2)</value>
</param>
<param>
<key>_rotation</key>
@@ -98,7 +87,7 @@
<key>variable</key>
<param>
<key>id</key>
- <value>samp_rate</value>
+ <value>rrctaps</value>
</param>
<param>
<key>_enabled</key>
@@ -106,11 +95,11 @@
</param>
<param>
<key>value</key>
- <value>32000</value>
+ <value>firdes.root_raised_cosine(nfilts,1.0,1.0/(spb*nfilts), rolloff, int(11*spb*nfilts))</value>
</param>
<param>
<key>_coordinate</key>
- <value>(128, 9)</value>
+ <value>(686, -1)</value>
</param>
<param>
<key>_rotation</key>
@@ -118,54 +107,22 @@
</param>
</block>
<block>
- <key>variable_slider</key>
+ <key>variable</key>
<param>
<key>id</key>
- <value>freq_offset</value>
+ <value>rolloff</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>label</key>
- <value>Frequency Offset</value>
- </param>
- <param>
<key>value</key>
- <value>0</value>
- </param>
- <param>
- <key>min</key>
- <value>-0.5</value>
- </param>
- <param>
- <key>max</key>
- <value>0.5</value>
- </param>
- <param>
- <key>num_steps</key>
- <value>1000</value>
- </param>
- <param>
- <key>style</key>
- <value>wx.SL_HORIZONTAL</value>
- </param>
- <param>
- <key>converver</key>
- <value>float_converter</value>
- </param>
- <param>
- <key>grid_pos</key>
- <value></value>
- </param>
- <param>
- <key>notebook</key>
- <value></value>
+ <value>0.35</value>
</param>
<param>
<key>_coordinate</key>
- <value>(293, 684)</value>
+ <value>(607, -1)</value>
</param>
<param>
<key>_rotation</key>
@@ -173,38 +130,22 @@
</param>
</block>
<block>
- <key>random_source_x</key>
+ <key>variable</key>
<param>
<key>id</key>
- <value>random_source_x_0</value>
+ <value>spb</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>type</key>
- <value>byte</value>
- </param>
- <param>
- <key>min</key>
- <value>0</value>
- </param>
- <param>
- <key>max</key>
- <value>pam_amp</value>
- </param>
- <param>
- <key>num_samps</key>
- <value>10000</value>
- </param>
- <param>
- <key>repeat</key>
- <value>True</value>
+ <key>value</key>
+ <value>4.0</value>
</param>
<param>
<key>_coordinate</key>
- <value>(13, 80)</value>
+ <value>(542, -1)</value>
</param>
<param>
<key>_rotation</key>
@@ -212,38 +153,22 @@
</param>
</block>
<block>
- <key>random_source_x</key>
+ <key>variable</key>
<param>
<key>id</key>
- <value>random_source_x_0_0</value>
+ <value>sig_amp</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>type</key>
- <value>byte</value>
- </param>
- <param>
- <key>min</key>
- <value>0</value>
- </param>
- <param>
- <key>max</key>
- <value>pam_amp</value>
- </param>
- <param>
- <key>num_samps</key>
- <value>10000</value>
- </param>
- <param>
- <key>repeat</key>
- <value>True</value>
+ <key>value</key>
+ <value>1.0</value>
</param>
<param>
<key>_coordinate</key>
- <value>(15, 245)</value>
+ <value>(861, 0)</value>
</param>
<param>
<key>_rotation</key>
@@ -251,26 +176,22 @@
</param>
</block>
<block>
- <key>const_source_x</key>
+ <key>virtual_sink</key>
<param>
<key>id</key>
- <value>const_source_x_0</value>
+ <value>virtual_sink_0</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>type</key>
- <value>float</value>
- </param>
- <param>
- <key>const</key>
- <value>-0.5*(pam_amp-1)</value>
+ <key>stream_id</key>
+ <value>input_signal_probe</value>
</param>
<param>
<key>_coordinate</key>
- <value>(213, 197)</value>
+ <value>(330, 183)</value>
</param>
<param>
<key>_rotation</key>
@@ -278,10 +199,10 @@
</param>
</block>
<block>
- <key>const_source_x</key>
+ <key>gr_pfb_clock_sync_xxx</key>
<param>
<key>id</key>
- <value>const_source_x_0_0</value>
+ <value>gr_pfb_clock_sync_xxx_0</value>
</param>
<param>
<key>_enabled</key>
@@ -289,46 +210,43 @@
</param>
<param>
<key>type</key>
- <value>float</value>
+ <value>ccf</value>
</param>
<param>
- <key>const</key>
- <value>-0.5*(pam_amp-1)</value>
+ <key>sps</key>
+ <value>spb</value>
</param>
<param>
- <key>_coordinate</key>
- <value>(200, 360)</value>
+ <key>alpha</key>
+ <value>time_alpha</value>
</param>
<param>
- <key>_rotation</key>
- <value>0</value>
+ <key>beta</key>
+ <value>time_beta</value>
</param>
- </block>
- <block>
- <key>gr_add_xx</key>
<param>
- <key>id</key>
- <value>gr_add_xx_0</value>
+ <key>taps</key>
+ <value>rrctaps</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>filter_size</key>
+ <value>nfilts</value>
</param>
<param>
- <key>type</key>
- <value>float</value>
+ <key>init_phase</key>
+ <value>16</value>
</param>
<param>
- <key>num_inputs</key>
- <value>2</value>
+ <key>max_dev</key>
+ <value>1.5</value>
</param>
<param>
- <key>vlen</key>
+ <key>osps</key>
<value>1</value>
</param>
<param>
<key>_coordinate</key>
- <value>(440, 167)</value>
+ <value>(598, 241)</value>
</param>
<param>
<key>_rotation</key>
@@ -336,10 +254,10 @@
</param>
</block>
<block>
- <key>gr_add_xx</key>
+ <key>digital_fll_band_edge_cc</key>
<param>
<key>id</key>
- <value>gr_add_xx_0_1</value>
+ <value>digital_fll_band_edge_cc_0</value>
</param>
<param>
<key>_enabled</key>
@@ -347,19 +265,27 @@
</param>
<param>
<key>type</key>
- <value>float</value>
+ <value>cc</value>
</param>
<param>
- <key>num_inputs</key>
- <value>2</value>
+ <key>samps_per_sym</key>
+ <value>spb</value>
</param>
<param>
- <key>vlen</key>
- <value>1</value>
+ <key>rolloff</key>
+ <value>rolloff</value>
+ </param>
+ <param>
+ <key>filter_size</key>
+ <value>44</value>
+ </param>
+ <param>
+ <key>w</key>
+ <value>freq_bw</value>
</param>
<param>
<key>_coordinate</key>
- <value>(430, 330)</value>
+ <value>(331, 239)</value>
</param>
<param>
<key>_rotation</key>
@@ -382,7 +308,7 @@
</param>
<param>
<key>_coordinate</key>
- <value>(435, 686)</value>
+ <value>(598, 186)</value>
</param>
<param>
<key>_rotation</key>
@@ -390,54 +316,22 @@
</param>
</block>
<block>
- <key>variable_slider</key>
+ <key>variable</key>
<param>
<key>id</key>
- <value>noise_amp</value>
+ <value>samp_rate</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>label</key>
- <value>Channel Noise</value>
- </param>
- <param>
<key>value</key>
- <value>0</value>
- </param>
- <param>
- <key>min</key>
- <value>0</value>
- </param>
- <param>
- <key>max</key>
- <value>1.0</value>
- </param>
- <param>
- <key>num_steps</key>
- <value>1000</value>
- </param>
- <param>
- <key>style</key>
- <value>wx.SL_HORIZONTAL</value>
- </param>
- <param>
- <key>converver</key>
- <value>float_converter</value>
- </param>
- <param>
- <key>grid_pos</key>
- <value></value>
- </param>
- <param>
- <key>notebook</key>
- <value></value>
+ <value>128000</value>
</param>
<param>
<key>_coordinate</key>
- <value>(168, 684)</value>
+ <value>(193, -1)</value>
</param>
<param>
<key>_rotation</key>
@@ -445,77 +339,38 @@
</param>
</block>
<block>
- <key>variable_slider</key>
+ <key>random_source_x</key>
<param>
<key>id</key>
- <value>interpratio</value>
+ <value>random_source_x</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>label</key>
- <value>Timing Offset</value>
- </param>
- <param>
- <key>value</key>
- <value>1.00</value>
+ <key>type</key>
+ <value>byte</value>
</param>
<param>
<key>min</key>
- <value>0.99</value>
+ <value>0</value>
</param>
<param>
<key>max</key>
- <value>1.01</value>
- </param>
- <param>
- <key>num_steps</key>
- <value>1000</value>
- </param>
- <param>
- <key>style</key>
- <value>wx.SL_HORIZONTAL</value>
+ <value>const.arity()</value>
</param>
<param>
- <key>converver</key>
- <value>float_converter</value>
- </param>
- <param>
- <key>grid_pos</key>
- <value></value>
- </param>
- <param>
- <key>notebook</key>
- <value></value>
- </param>
- <param>
- <key>_coordinate</key>
- <value>(40, 684)</value>
- </param>
- <param>
- <key>_rotation</key>
- <value>180</value>
- </param>
- </block>
- <block>
- <key>variable</key>
- <param>
- <key>id</key>
- <value>pam_amp</value>
+ <key>num_samps</key>
+ <value>10000000</value>
</param>
<param>
- <key>_enabled</key>
+ <key>repeat</key>
<value>True</value>
</param>
<param>
- <key>value</key>
- <value>2</value>
- </param>
- <param>
<key>_coordinate</key>
- <value>(223, 9)</value>
+ <value>(0, 72)</value>
</param>
<param>
<key>_rotation</key>
@@ -523,45 +378,38 @@
</param>
</block>
<block>
- <key>variable</key>
+ <key>gr_chunks_to_symbols_xx</key>
<param>
<key>id</key>
- <value>sig_amp</value>
+ <value>gr_chunks_to_symbols_xx</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>value</key>
- <value>1</value>
+ <key>in_type</key>
+ <value>byte</value>
</param>
<param>
- <key>_coordinate</key>
- <value>(315, 9)</value>
+ <key>out_type</key>
+ <value>complex</value>
</param>
<param>
- <key>_rotation</key>
- <value>0</value>
+ <key>symbol_table</key>
+ <value>const.points()</value>
</param>
- </block>
- <block>
- <key>variable</key>
<param>
- <key>id</key>
- <value>rolloff</value>
- </param>
- <param>
- <key>_enabled</key>
- <value>True</value>
+ <key>dimension</key>
+ <value>1</value>
</param>
<param>
- <key>value</key>
- <value>0.35</value>
+ <key>num_ports</key>
+ <value>1</value>
</param>
<param>
<key>_coordinate</key>
- <value>(397, 9)</value>
+ <value>(196, 87)</value>
</param>
<param>
<key>_rotation</key>
@@ -569,30 +417,30 @@
</param>
</block>
<block>
- <key>gr_throttle</key>
+ <key>blks2_pfb_arb_resampler_ccf</key>
<param>
<key>id</key>
- <value>gr_throttle_0</value>
+ <value>blks2_pfb_arb_resampler_ccf_0</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>type</key>
- <value>complex</value>
+ <key>rate</key>
+ <value>spb</value>
</param>
<param>
- <key>samples_per_second</key>
- <value>samp_rate</value>
+ <key>taps</key>
+ <value>firdes.root_raised_cosine(32, 32, 1.0, 0.35, 44*32)</value>
</param>
<param>
- <key>vlen</key>
- <value>1</value>
+ <key>size</key>
+ <value>32</value>
</param>
<param>
<key>_coordinate</key>
- <value>(253, 575)</value>
+ <value>(435, 80)</value>
</param>
<param>
<key>_rotation</key>
@@ -600,109 +448,69 @@
</param>
</block>
<block>
- <key>variable_slider</key>
+ <key>gr_channel_model</key>
<param>
<key>id</key>
- <value>time_beta</value>
+ <value>gr_channel_model_0</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>label</key>
- <value>Timing Beta</value>
- </param>
- <param>
- <key>value</key>
- <value>0</value>
- </param>
- <param>
- <key>min</key>
- <value>0.0</value>
- </param>
- <param>
- <key>max</key>
- <value>0.1</value>
- </param>
- <param>
- <key>num_steps</key>
- <value>1000</value>
+ <key>noise_voltage</key>
+ <value>noise_amp</value>
</param>
<param>
- <key>style</key>
- <value>wx.SL_HORIZONTAL</value>
+ <key>freq_offset</key>
+ <value>freq_offset</value>
</param>
<param>
- <key>converver</key>
- <value>float_converter</value>
+ <key>epsilon</key>
+ <value>interpratio</value>
</param>
<param>
- <key>grid_pos</key>
- <value></value>
+ <key>taps</key>
+ <value>1.0</value>
</param>
<param>
- <key>notebook</key>
- <value></value>
+ <key>seed</key>
+ <value>42</value>
</param>
<param>
<key>_coordinate</key>
- <value>(606, 8)</value>
+ <value>(46, 183)</value>
</param>
<param>
<key>_rotation</key>
- <value>180</value>
+ <value>0</value>
</param>
</block>
<block>
- <key>variable_slider</key>
+ <key>gr_multiply_const_vxx</key>
<param>
<key>id</key>
- <value>time_alpha</value>
+ <value>gr_multiply_const_vxx_0</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>label</key>
- <value>Timing Alpha</value>
- </param>
- <param>
- <key>value</key>
- <value>0</value>
+ <key>type</key>
+ <value>complex</value>
</param>
<param>
- <key>min</key>
- <value>0</value>
+ <key>const</key>
+ <value>sig_amp</value>
</param>
<param>
- <key>max</key>
+ <key>vlen</key>
<value>1</value>
</param>
<param>
- <key>num_steps</key>
- <value>1000</value>
- </param>
- <param>
- <key>style</key>
- <value>wx.SL_HORIZONTAL</value>
- </param>
- <param>
- <key>converver</key>
- <value>float_converter</value>
- </param>
- <param>
- <key>grid_pos</key>
- <value></value>
- </param>
- <param>
- <key>notebook</key>
- <value></value>
- </param>
- <param>
<key>_coordinate</key>
- <value>(490, 8)</value>
+ <value>(659, 95)</value>
</param>
<param>
<key>_rotation</key>
@@ -710,54 +518,30 @@
</param>
</block>
<block>
- <key>variable_slider</key>
+ <key>gr_throttle</key>
<param>
<key>id</key>
- <value>phase_alpha</value>
+ <value>gr_throttle_0</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>label</key>
- <value>Phase Alpha</value>
- </param>
- <param>
- <key>value</key>
- <value>0</value>
- </param>
- <param>
- <key>min</key>
- <value>0</value>
- </param>
- <param>
- <key>max</key>
- <value>0.1</value>
- </param>
- <param>
- <key>num_steps</key>
- <value>1000</value>
- </param>
- <param>
- <key>style</key>
- <value>wx.SL_HORIZONTAL</value>
- </param>
- <param>
- <key>converver</key>
- <value>float_converter</value>
+ <key>type</key>
+ <value>complex</value>
</param>
<param>
- <key>grid_pos</key>
- <value></value>
+ <key>samples_per_second</key>
+ <value>samp_rate</value>
</param>
<param>
- <key>notebook</key>
- <value></value>
+ <key>vlen</key>
+ <value>1</value>
</param>
<param>
<key>_coordinate</key>
- <value>(953, 8)</value>
+ <value>(857, 95)</value>
</param>
<param>
<key>_rotation</key>
@@ -765,85 +549,41 @@
</param>
</block>
<block>
- <key>variable_slider</key>
+ <key>virtual_source</key>
<param>
<key>id</key>
- <value>phase_beta</value>
+ <value>virtual_source_0</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>label</key>
- <value>Phase Beta</value>
- </param>
- <param>
- <key>value</key>
- <value>0</value>
- </param>
- <param>
- <key>min</key>
- <value>0.0</value>
- </param>
- <param>
- <key>max</key>
- <value>0.01</value>
- </param>
- <param>
- <key>num_steps</key>
- <value>1000</value>
- </param>
- <param>
- <key>style</key>
- <value>wx.SL_HORIZONTAL</value>
- </param>
- <param>
- <key>converver</key>
- <value>float_converter</value>
- </param>
- <param>
- <key>grid_pos</key>
- <value></value>
- </param>
- <param>
- <key>notebook</key>
- <value></value>
+ <key>stream_id</key>
+ <value>input_signal_probe</value>
</param>
<param>
<key>_coordinate</key>
- <value>(1066, 8)</value>
+ <value>(835, 562)</value>
</param>
<param>
<key>_rotation</key>
- <value>180</value>
+ <value>0</value>
</param>
</block>
<block>
- <key>gr_costas_loop_cc</key>
+ <key>digital_costas_loop_cc</key>
<param>
<key>id</key>
- <value>gr_costas_loop_cc_0</value>
+ <value>digital_costas_loop_cc_0</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>alpha</key>
- <value>phase_alpha</value>
- </param>
- <param>
- <key>beta</key>
- <value>phase_beta</value>
- </param>
- <param>
- <key>max_freq</key>
- <value>0.2</value>
- </param>
- <param>
- <key>min_freq</key>
- <value>-0.2</value>
+ <key>w</key>
+ <value>phase_bw</value>
</param>
<param>
<key>order</key>
@@ -851,7 +591,7 @@
</param>
<param>
<key>_coordinate</key>
- <value>(915, 560)</value>
+ <value>(866, 246)</value>
</param>
<param>
<key>_rotation</key>
@@ -862,7 +602,7 @@
<key>wxgui_scopesink2</key>
<param>
<key>id</key>
- <value>wxgui_scopesink2_0</value>
+ <value>wxgui_scopesink2_0_0_1</value>
</param>
<param>
<key>_enabled</key>
@@ -874,7 +614,7 @@
</param>
<param>
<key>title</key>
- <value>Input Signal</value>
+ <value>Pre-sync Signal</value>
</param>
<param>
<key>samp_rate</key>
@@ -882,7 +622,7 @@
</param>
<param>
<key>v_scale</key>
- <value>0</value>
+ <value>.5</value>
</param>
<param>
<key>v_offset</key>
@@ -914,34 +654,19 @@
</param>
<param>
<key>notebook</key>
- <value>notebook_0,0</value>
- </param>
- <param>
- <key>_coordinate</key>
- <value>(1116, 559)</value>
+ <value>notebook_0,1</value>
</param>
<param>
- <key>_rotation</key>
- <value>0</value>
+ <key>trig_mode</key>
+ <value>gr.gr_TRIG_MODE_AUTO</value>
</param>
- </block>
- <block>
- <key>variable</key>
<param>
- <key>id</key>
- <value>rrctaps</value>
- </param>
- <param>
- <key>_enabled</key>
- <value>True</value>
- </param>
- <param>
- <key>value</key>
- <value>firdes.root_raised_cosine(nfilts,1.0,1.0/(spb*nfilts), rolloff, int(11*spb*nfilts))</value>
+ <key>y_axis_label</key>
+ <value>Counts</value>
</param>
<param>
<key>_coordinate</key>
- <value>(436, 755)</value>
+ <value>(1081, 439)</value>
</param>
<param>
<key>_rotation</key>
@@ -949,85 +674,70 @@
</param>
</block>
<block>
- <key>notebook</key>
+ <key>wxgui_fftsink2</key>
<param>
<key>id</key>
- <value>notebook_0</value>
+ <value>wxgui_fftsink2_0</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>style</key>
- <value>wx.NB_TOP</value>
- </param>
- <param>
- <key>labels</key>
- <value>['Output Signal', 'Input Signal']</value>
- </param>
- <param>
- <key>grid_pos</key>
- <value></value>
+ <key>type</key>
+ <value>complex</value>
</param>
<param>
- <key>notebook</key>
- <value></value>
+ <key>title</key>
+ <value>Received spectrum</value>
</param>
<param>
- <key>_coordinate</key>
- <value>(203, 823)</value>
+ <key>samp_rate</key>
+ <value>samp_rate</value>
</param>
<param>
- <key>_rotation</key>
+ <key>baseband_freq</key>
<value>0</value>
</param>
- </block>
- <block>
- <key>wxgui_scopesink2</key>
- <param>
- <key>id</key>
- <value>wxgui_scopesink2_0_0_1</value>
- </param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>y_per_div</key>
+ <value>10</value>
</param>
<param>
- <key>type</key>
- <value>complex</value>
+ <key>y_divs</key>
+ <value>10</value>
</param>
<param>
- <key>title</key>
- <value>Input Signal</value>
+ <key>ref_level</key>
+ <value>10</value>
</param>
<param>
- <key>samp_rate</key>
- <value>samp_rate</value>
+ <key>ref_scale</key>
+ <value>2.0</value>
</param>
<param>
- <key>v_scale</key>
- <value>.5</value>
+ <key>fft_size</key>
+ <value>1024</value>
</param>
<param>
- <key>v_offset</key>
- <value>0</value>
+ <key>fft_rate</key>
+ <value>30</value>
</param>
<param>
- <key>t_scale</key>
- <value>0</value>
+ <key>peak_hold</key>
+ <value>False</value>
</param>
<param>
- <key>ac_couple</key>
+ <key>average</key>
<value>False</value>
</param>
<param>
- <key>xy_mode</key>
- <value>False</value>
+ <key>avg_alpha</key>
+ <value>0</value>
</param>
<param>
- <key>num_inputs</key>
- <value>1</value>
+ <key>win</key>
+ <value>None</value>
</param>
<param>
<key>win_size</key>
@@ -1042,8 +752,12 @@
<value>notebook_0,1</value>
</param>
<param>
+ <key>freqvar</key>
+ <value>None</value>
+ </param>
+ <param>
<key>_coordinate</key>
- <value>(975, 312)</value>
+ <value>(1081, 563)</value>
</param>
<param>
<key>_rotation</key>
@@ -1054,7 +768,7 @@
<key>wxgui_fftsink2</key>
<param>
<key>id</key>
- <value>wxgui_fftsink2_0</value>
+ <value>wxgui_fftsink2_0_0</value>
</param>
<param>
<key>_enabled</key>
@@ -1066,7 +780,7 @@
</param>
<param>
<key>title</key>
- <value>Input Frequency</value>
+ <value>Post-sync spectrum</value>
</param>
<param>
<key>samp_rate</key>
@@ -1126,195 +840,200 @@
</param>
<param>
<key>notebook</key>
- <value>notebook_0,1</value>
+ <value>notebook_0,0</value>
+ </param>
+ <param>
+ <key>freqvar</key>
+ <value>None</value>
</param>
<param>
<key>_coordinate</key>
- <value>(1116, 355)</value>
+ <value>(347, 516)</value>
</param>
<param>
<key>_rotation</key>
- <value>0</value>
+ <value>180</value>
</param>
</block>
<block>
- <key>virtual_source</key>
+ <key>wxgui_scopesink2</key>
<param>
<key>id</key>
- <value>virtual_source_0</value>
+ <value>wxgui_scopesink2_0</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>stream_id</key>
- <value>input_signal_probe</value>
+ <key>type</key>
+ <value>complex</value>
</param>
<param>
- <key>_coordinate</key>
- <value>(801, 453)</value>
+ <key>title</key>
+ <value>Post-sync Signal</value>
</param>
<param>
- <key>_rotation</key>
- <value>0</value>
+ <key>samp_rate</key>
+ <value>samp_rate</value>
</param>
- </block>
- <block>
- <key>virtual_sink</key>
<param>
- <key>id</key>
- <value>virtual_sink_0</value>
+ <key>v_scale</key>
+ <value>0</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>v_offset</key>
+ <value>0</value>
</param>
<param>
- <key>stream_id</key>
- <value>input_signal_probe</value>
+ <key>t_scale</key>
+ <value>0</value>
</param>
<param>
- <key>_coordinate</key>
- <value>(280, 475)</value>
+ <key>ac_couple</key>
+ <value>False</value>
</param>
<param>
- <key>_rotation</key>
- <value>0</value>
+ <key>xy_mode</key>
+ <value>True</value>
</param>
- </block>
- <block>
- <key>wxgui_fftsink2</key>
<param>
- <key>id</key>
- <value>wxgui_fftsink2_0_0</value>
+ <key>num_inputs</key>
+ <value>1</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>win_size</key>
+ <value></value>
</param>
<param>
- <key>type</key>
- <value>complex</value>
+ <key>grid_pos</key>
+ <value></value>
</param>
<param>
- <key>title</key>
- <value>Output Frequency</value>
+ <key>notebook</key>
+ <value>notebook_0,0</value>
</param>
<param>
- <key>samp_rate</key>
- <value>samp_rate</value>
+ <key>trig_mode</key>
+ <value>gr.gr_TRIG_MODE_AUTO</value>
</param>
<param>
- <key>baseband_freq</key>
- <value>0</value>
+ <key>y_axis_label</key>
+ <value>Counts</value>
</param>
<param>
- <key>y_per_div</key>
- <value>10</value>
+ <key>_coordinate</key>
+ <value>(1085, 213)</value>
</param>
<param>
- <key>y_divs</key>
- <value>10</value>
+ <key>_rotation</key>
+ <value>0</value>
</param>
+ </block>
+ <block>
+ <key>variable_slider</key>
<param>
- <key>ref_level</key>
- <value>10</value>
+ <key>id</key>
+ <value>freq_bw</value>
</param>
<param>
- <key>ref_scale</key>
- <value>2.0</value>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
- <key>fft_size</key>
- <value>1024</value>
+ <key>label</key>
+ <value>FLL Bandwidth</value>
</param>
<param>
- <key>fft_rate</key>
- <value>30</value>
+ <key>value</key>
+ <value>0</value>
</param>
<param>
- <key>peak_hold</key>
- <value>False</value>
+ <key>min</key>
+ <value>0.0</value>
</param>
<param>
- <key>average</key>
- <value>False</value>
+ <key>max</key>
+ <value>0.05</value>
</param>
<param>
- <key>avg_alpha</key>
- <value>0</value>
+ <key>num_steps</key>
+ <value>1000</value>
</param>
<param>
- <key>win</key>
- <value>None</value>
+ <key>style</key>
+ <value>wx.SL_HORIZONTAL</value>
</param>
<param>
- <key>win_size</key>
- <value></value>
+ <key>converver</key>
+ <value>float_converter</value>
</param>
<param>
<key>grid_pos</key>
- <value></value>
+ <value>(4,2,1,1)</value>
</param>
<param>
<key>notebook</key>
- <value>notebook_0,0</value>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(663, 687)</value>
+ <value>(341, 373)</value>
</param>
<param>
<key>_rotation</key>
- <value>0</value>
+ <value>180</value>
</param>
</block>
<block>
- <key>gr_pfb_clock_sync_xxx</key>
+ <key>variable_slider</key>
<param>
<key>id</key>
- <value>gr_pfb_clock_sync_xxx_0</value>
+ <value>time_alpha</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>type</key>
- <value>ccf</value>
+ <key>label</key>
+ <value>Timing Alpha</value>
</param>
<param>
- <key>sps</key>
- <value>spb</value>
+ <key>value</key>
+ <value>0</value>
</param>
<param>
- <key>alpha</key>
- <value>time_alpha</value>
+ <key>min</key>
+ <value>0</value>
</param>
<param>
- <key>beta</key>
- <value>time_beta</value>
+ <key>max</key>
+ <value>1</value>
</param>
<param>
- <key>taps</key>
- <value>rrctaps</value>
+ <key>num_steps</key>
+ <value>1000</value>
</param>
<param>
- <key>filter_size</key>
- <value>nfilts</value>
+ <key>style</key>
+ <value>wx.SL_HORIZONTAL</value>
</param>
<param>
- <key>init_phase</key>
- <value>16</value>
+ <key>converver</key>
+ <value>float_converter</value>
</param>
<param>
- <key>max_dev</key>
- <value>1.5</value>
+ <key>grid_pos</key>
+ <value>(5,2,1,1)</value>
+ </param>
+ <param>
+ <key>notebook</key>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(662, 527)</value>
+ <value>(598, 388)</value>
</param>
<param>
<key>_rotation</key>
@@ -1322,92 +1041,109 @@
</param>
</block>
<block>
- <key>gr_float_to_complex</key>
+ <key>variable_slider</key>
<param>
<key>id</key>
- <value>gr_float_to_complex_0</value>
+ <value>time_beta</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>vlen</key>
- <value>1</value>
- </param>
- <param>
- <key>_coordinate</key>
- <value>(592, 184)</value>
+ <key>label</key>
+ <value>Timing Beta</value>
</param>
<param>
- <key>_rotation</key>
+ <key>value</key>
<value>0</value>
</param>
- </block>
- <block>
- <key>gr_channel_model</key>
<param>
- <key>id</key>
- <value>gr_channel_model_0</value>
+ <key>min</key>
+ <value>0.0</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>max</key>
+ <value>0.1</value>
</param>
<param>
- <key>noise_voltage</key>
- <value>noise_amp</value>
+ <key>num_steps</key>
+ <value>1000</value>
</param>
<param>
- <key>freq_offset</key>
- <value>freq_offset</value>
+ <key>style</key>
+ <value>wx.SL_HORIZONTAL</value>
</param>
<param>
- <key>epsilon</key>
- <value>interpratio</value>
+ <key>converver</key>
+ <value>float_converter</value>
</param>
<param>
- <key>taps</key>
- <value>1.0</value>
+ <key>grid_pos</key>
+ <value>(6,2,1,1)</value>
</param>
<param>
- <key>seed</key>
- <value>42</value>
+ <key>notebook</key>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(60, 443)</value>
+ <value>(708, 388)</value>
</param>
<param>
<key>_rotation</key>
- <value>0</value>
+ <value>180</value>
</param>
</block>
<block>
- <key>gr_multiply_const_vxx</key>
+ <key>variable_slider</key>
<param>
<key>id</key>
- <value>gr_multiply_const_vxx_0</value>
+ <value>phase_bw</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>type</key>
- <value>complex</value>
+ <key>label</key>
+ <value>Costas Loop (Phase) Bandwidth</value>
</param>
<param>
- <key>const</key>
- <value>sig_amp</value>
+ <key>value</key>
+ <value>0</value>
</param>
<param>
- <key>vlen</key>
- <value>1</value>
+ <key>min</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>max</key>
+ <value>0.1</value>
+ </param>
+ <param>
+ <key>num_steps</key>
+ <value>1000</value>
+ </param>
+ <param>
+ <key>style</key>
+ <value>wx.SL_HORIZONTAL</value>
+ </param>
+ <param>
+ <key>converver</key>
+ <value>float_converter</value>
+ </param>
+ <param>
+ <key>grid_pos</key>
+ <value>(7,2,1,1)</value>
+ </param>
+ <param>
+ <key>notebook</key>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(670, 322)</value>
+ <value>(866, 313)</value>
</param>
<param>
<key>_rotation</key>
@@ -1415,30 +1151,34 @@
</param>
</block>
<block>
- <key>blks2_pfb_arb_resampler_ccf</key>
+ <key>notebook</key>
<param>
<key>id</key>
- <value>blks2_pfb_arb_resampler_ccf_0</value>
+ <value>notebook_0</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>rate</key>
- <value>spb</value>
+ <key>style</key>
+ <value>wx.NB_TOP</value>
</param>
<param>
- <key>taps</key>
- <value>firdes.root_raised_cosine(32, 32, 1.0, 0.35, 44*32)</value>
+ <key>labels</key>
+ <value>['Synched Signal', 'Received Signal']</value>
</param>
<param>
- <key>size</key>
- <value>32</value>
+ <key>grid_pos</key>
+ <value>(1,1,8,1)</value>
+ </param>
+ <param>
+ <key>notebook</key>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(778, 180)</value>
+ <value>(9, 601)</value>
</param>
<param>
<key>_rotation</key>
@@ -1446,76 +1186,65 @@
</param>
</block>
<block>
- <key>gr_fll_band_edge_cc</key>
+ <key>variable_slider</key>
<param>
<key>id</key>
- <value>gr_fll_band_edge_cc_0</value>
+ <value>interpratio</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>type</key>
- <value>cc</value>
- </param>
- <param>
- <key>samps_per_sym</key>
- <value>spb</value>
- </param>
- <param>
- <key>rolloff</key>
- <value>rolloff</value>
+ <key>label</key>
+ <value>Timing Offset</value>
</param>
<param>
- <key>filter_size</key>
- <value>44</value>
+ <key>value</key>
+ <value>1.00</value>
</param>
<param>
- <key>alpha</key>
- <value>freq_alpha</value>
+ <key>min</key>
+ <value>0.99</value>
</param>
<param>
- <key>beta</key>
- <value>freq_beta</value>
+ <key>max</key>
+ <value>1.01</value>
</param>
<param>
- <key>_coordinate</key>
- <value>(429, 528)</value>
+ <key>num_steps</key>
+ <value>1000</value>
</param>
<param>
- <key>_rotation</key>
- <value>0</value>
+ <key>style</key>
+ <value>wx.SL_HORIZONTAL</value>
</param>
- </block>
- <block>
- <key>variable</key>
<param>
- <key>id</key>
- <value>spb</value>
+ <key>converver</key>
+ <value>float_converter</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>grid_pos</key>
+ <value>(3,2,1,1)</value>
</param>
<param>
- <key>value</key>
- <value>4.0</value>
+ <key>notebook</key>
+ <value></value>
</param>
<param>
<key>_coordinate</key>
- <value>(40, 829)</value>
+ <value>(60, 407)</value>
</param>
<param>
<key>_rotation</key>
- <value>0</value>
+ <value>180</value>
</param>
</block>
<block>
<key>variable_slider</key>
<param>
<key>id</key>
- <value>freq_alpha</value>
+ <value>noise_amp</value>
</param>
<param>
<key>_enabled</key>
@@ -1523,7 +1252,7 @@
</param>
<param>
<key>label</key>
- <value>Freq Alpha</value>
+ <value>Channel Noise</value>
</param>
<param>
<key>value</key>
@@ -1535,7 +1264,7 @@
</param>
<param>
<key>max</key>
- <value>0.1</value>
+ <value>1.0</value>
</param>
<param>
<key>num_steps</key>
@@ -1551,7 +1280,7 @@
</param>
<param>
<key>grid_pos</key>
- <value></value>
+ <value>(1,2,1,1)</value>
</param>
<param>
<key>notebook</key>
@@ -1559,7 +1288,7 @@
</param>
<param>
<key>_coordinate</key>
- <value>(734, 10)</value>
+ <value>(125, 284)</value>
</param>
<param>
<key>_rotation</key>
@@ -1570,7 +1299,7 @@
<key>variable_slider</key>
<param>
<key>id</key>
- <value>freq_beta</value>
+ <value>freq_offset</value>
</param>
<param>
<key>_enabled</key>
@@ -1578,7 +1307,7 @@
</param>
<param>
<key>label</key>
- <value>Freq Beta</value>
+ <value>Frequency Offset</value>
</param>
<param>
<key>value</key>
@@ -1586,11 +1315,11 @@
</param>
<param>
<key>min</key>
- <value>0.0</value>
+ <value>-0.5</value>
</param>
<param>
<key>max</key>
- <value>0.01</value>
+ <value>0.5</value>
</param>
<param>
<key>num_steps</key>
@@ -1606,7 +1335,7 @@
</param>
<param>
<key>grid_pos</key>
- <value></value>
+ <value>(2,2,1,1)</value>
</param>
<param>
<key>notebook</key>
@@ -1614,130 +1343,88 @@
</param>
<param>
<key>_coordinate</key>
- <value>(836, 9)</value>
+ <value>(6, 284)</value>
</param>
<param>
<key>_rotation</key>
- <value>180</value>
+ <value>0</value>
</param>
</block>
<connection>
- <source_block_id>random_source_x_0</source_block_id>
- <sink_block_id>gr_uchar_to_float_0</sink_block_id>
- <source_key>0</source_key>
- <sink_key>0</sink_key>
- </connection>
- <connection>
- <source_block_id>gr_uchar_to_float_0_0</source_block_id>
- <sink_block_id>gr_add_xx_0_1</sink_block_id>
- <source_key>0</source_key>
- <sink_key>0</sink_key>
- </connection>
- <connection>
- <source_block_id>const_source_x_0_0</source_block_id>
- <sink_block_id>gr_add_xx_0_1</sink_block_id>
- <source_key>0</source_key>
- <sink_key>1</sink_key>
- </connection>
- <connection>
- <source_block_id>random_source_x_0_0</source_block_id>
- <sink_block_id>gr_uchar_to_float_0_0</sink_block_id>
- <source_key>0</source_key>
- <sink_key>0</sink_key>
- </connection>
- <connection>
<source_block_id>gr_channel_model_0</source_block_id>
- <sink_block_id>gr_throttle_0</sink_block_id>
+ <sink_block_id>virtual_sink_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>gr_add_xx_0</source_block_id>
- <sink_block_id>gr_float_to_complex_0</sink_block_id>
+ <source_block_id>digital_fll_band_edge_cc_0</source_block_id>
+ <sink_block_id>gr_pfb_clock_sync_xxx_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>gr_add_xx_0_1</source_block_id>
- <sink_block_id>gr_float_to_complex_0</sink_block_id>
- <source_key>0</source_key>
- <sink_key>1</sink_key>
- </connection>
- <connection>
- <source_block_id>gr_uchar_to_float_0</source_block_id>
- <sink_block_id>gr_add_xx_0</sink_block_id>
+ <source_block_id>gr_pfb_clock_sync_xxx_0</source_block_id>
+ <sink_block_id>digital_costas_loop_cc_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>const_source_x_0</source_block_id>
- <sink_block_id>gr_add_xx_0</sink_block_id>
- <source_key>0</source_key>
- <sink_key>1</sink_key>
- </connection>
- <connection>
- <source_block_id>gr_throttle_0</source_block_id>
- <sink_block_id>gr_fll_band_edge_cc_0</sink_block_id>
+ <source_block_id>digital_costas_loop_cc_0</source_block_id>
+ <sink_block_id>wxgui_scopesink2_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>gr_fll_band_edge_cc_0</source_block_id>
- <sink_block_id>gr_pfb_clock_sync_xxx_0</sink_block_id>
+ <source_block_id>blks2_pfb_arb_resampler_ccf_0</source_block_id>
+ <sink_block_id>gr_multiply_const_vxx_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>gr_pfb_clock_sync_xxx_0</source_block_id>
- <sink_block_id>gr_costas_loop_cc_0</sink_block_id>
+ <source_block_id>gr_chunks_to_symbols_xx</source_block_id>
+ <sink_block_id>blks2_pfb_arb_resampler_ccf_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>gr_costas_loop_cc_0</source_block_id>
- <sink_block_id>wxgui_scopesink2_0</sink_block_id>
+ <source_block_id>gr_channel_model_0</source_block_id>
+ <sink_block_id>digital_fll_band_edge_cc_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>gr_fll_band_edge_cc_0</source_block_id>
+ <source_block_id>digital_fll_band_edge_cc_0</source_block_id>
<sink_block_id>wxgui_fftsink2_0_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
<source_block_id>virtual_source_0</source_block_id>
- <sink_block_id>wxgui_scopesink2_0_0_1</sink_block_id>
- <source_key>0</source_key>
- <sink_key>0</sink_key>
- </connection>
- <connection>
- <source_block_id>virtual_source_0</source_block_id>
<sink_block_id>wxgui_fftsink2_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>gr_channel_model_0</source_block_id>
- <sink_block_id>virtual_sink_0</sink_block_id>
+ <source_block_id>virtual_source_0</source_block_id>
+ <sink_block_id>wxgui_scopesink2_0_0_1</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>gr_float_to_complex_0</source_block_id>
- <sink_block_id>blks2_pfb_arb_resampler_ccf_0</sink_block_id>
+ <source_block_id>random_source_x</source_block_id>
+ <sink_block_id>gr_chunks_to_symbols_xx</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
- <source_block_id>blks2_pfb_arb_resampler_ccf_0</source_block_id>
- <sink_block_id>gr_multiply_const_vxx_0</sink_block_id>
+ <source_block_id>gr_throttle_0</source_block_id>
+ <sink_block_id>gr_channel_model_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
<source_block_id>gr_multiply_const_vxx_0</source_block_id>
- <sink_block_id>gr_channel_model_0</sink_block_id>
+ <sink_block_id>gr_throttle_0</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
diff --git a/gr-digital/examples/demod/pam_timing.grc b/gr-digital/examples/demod/pam_timing.grc
index 02130f481..14a7d403e 100644
--- a/gr-digital/examples/demod/pam_timing.grc
+++ b/gr-digital/examples/demod/pam_timing.grc
@@ -1,6 +1,6 @@
<?xml version='1.0' encoding='ASCII'?>
<flow_graph>
- <timestamp>Mon Feb 1 18:54:46 2010</timestamp>
+ <timestamp>Thu Jul 5 17:55:51 2012</timestamp>
<block>
<key>options</key>
<param>
@@ -44,6 +44,10 @@
<value>True</value>
</param>
<param>
+ <key>max_nouts</key>
+ <value>0</value>
+ </param>
+ <param>
<key>realtime_scheduling</key>
<value></value>
</param>
@@ -749,6 +753,14 @@
<value></value>
</param>
<param>
+ <key>trig_mode</key>
+ <value>gr.gr_TRIG_MODE_AUTO</value>
+ </param>
+ <param>
+ <key>y_axis_label</key>
+ <value>Counts</value>
+ </param>
+ <param>
<key>_coordinate</key>
<value>(1116, 500)</value>
</param>
@@ -792,7 +804,7 @@
<key>wxgui_scopesink2</key>
<param>
<key>id</key>
- <value>wxgui_scopesink2_0_0</value>
+ <value>wxgui_scopesink2_0_0_0</value>
</param>
<param>
<key>_enabled</key>
@@ -804,7 +816,7 @@
</param>
<param>
<key>title</key>
- <value>Error</value>
+ <value>Scope Plot</value>
</param>
<param>
<key>samp_rate</key>
@@ -812,7 +824,7 @@
</param>
<param>
<key>v_scale</key>
- <value>3</value>
+ <value>9</value>
</param>
<param>
<key>v_offset</key>
@@ -844,11 +856,42 @@
</param>
<param>
<key>notebook</key>
- <value>notebook_0,0</value>
+ <value>notebook_0,1</value>
+ </param>
+ <param>
+ <key>trig_mode</key>
+ <value>gr.gr_TRIG_MODE_AUTO</value>
+ </param>
+ <param>
+ <key>y_axis_label</key>
+ <value>Counts</value>
</param>
<param>
<key>_coordinate</key>
- <value>(1110, 651)</value>
+ <value>(1112, 881)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>variable</key>
+ <param>
+ <key>id</key>
+ <value>rrctaps</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>value</key>
+ <value>firdes.root_raised_cosine(nfilts,1.0,1.0/(spb*nfilts), .35, int(11*spb*nfilts))</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(513, 679)</value>
</param>
<param>
<key>_rotation</key>
@@ -859,7 +902,7 @@
<key>wxgui_scopesink2</key>
<param>
<key>id</key>
- <value>wxgui_scopesink2_0_0_0</value>
+ <value>wxgui_scopesink2_0_0_1</value>
</param>
<param>
<key>_enabled</key>
@@ -867,11 +910,11 @@
</param>
<param>
<key>type</key>
- <value>float</value>
+ <value>complex</value>
</param>
<param>
<key>title</key>
- <value>Scope Plot</value>
+ <value>Error</value>
</param>
<param>
<key>samp_rate</key>
@@ -879,7 +922,7 @@
</param>
<param>
<key>v_scale</key>
- <value>9</value>
+ <value>.5</value>
</param>
<param>
<key>v_offset</key>
@@ -911,11 +954,19 @@
</param>
<param>
<key>notebook</key>
- <value>notebook_0,1</value>
+ <value>notebook_0,3</value>
+ </param>
+ <param>
+ <key>trig_mode</key>
+ <value>gr.gr_TRIG_MODE_AUTO</value>
+ </param>
+ <param>
+ <key>y_axis_label</key>
+ <value>Counts</value>
</param>
<param>
<key>_coordinate</key>
- <value>(1112, 881)</value>
+ <value>(1115, 358)</value>
</param>
<param>
<key>_rotation</key>
@@ -923,22 +974,22 @@
</param>
</block>
<block>
- <key>variable</key>
+ <key>gr_float_to_complex</key>
<param>
<key>id</key>
- <value>rrctaps</value>
+ <value>gr_float_to_complex_0</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>value</key>
- <value>firdes.root_raised_cosine(nfilts,1.0,1.0/(spb*nfilts), .35, int(11*spb*nfilts))</value>
+ <key>vlen</key>
+ <value>1</value>
</param>
<param>
<key>_coordinate</key>
- <value>(513, 679)</value>
+ <value>(590, 184)</value>
</param>
<param>
<key>_rotation</key>
@@ -946,50 +997,69 @@
</param>
</block>
<block>
- <key>gr_pfb_clock_sync_xxx</key>
+ <key>blks2_pfb_arb_resampler_ccf</key>
<param>
<key>id</key>
- <value>gr_pfb_clock_sync_xxx_0</value>
+ <value>blks2_pfb_arb_resampler_ccf_0</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>type</key>
- <value>ccf</value>
+ <key>rate</key>
+ <value>spb</value>
</param>
<param>
- <key>sps</key>
- <value>spb</value>
+ <key>taps</key>
+ <value>firdes.root_raised_cosine(32, 32, 1.0, 0.35, 44*32)</value>
</param>
<param>
- <key>alpha</key>
- <value>alpha</value>
+ <key>size</key>
+ <value>32</value>
</param>
<param>
- <key>beta</key>
- <value>beta</value>
+ <key>_coordinate</key>
+ <value>(816, 181)</value>
</param>
<param>
- <key>taps</key>
- <value>rrctaps</value>
+ <key>_rotation</key>
+ <value>0</value>
</param>
+ </block>
+ <block>
+ <key>gr_channel_model</key>
<param>
- <key>filter_size</key>
- <value>nfilts</value>
+ <key>id</key>
+ <value>gr_channel_model_0</value>
</param>
<param>
- <key>init_phase</key>
- <value>16</value>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
- <key>max_dev</key>
- <value>1.5</value>
+ <key>noise_voltage</key>
+ <value>noise_amp</value>
+ </param>
+ <param>
+ <key>freq_offset</key>
+ <value>freq_offset</value>
+ </param>
+ <param>
+ <key>epsilon</key>
+ <value>interpratio</value>
+ </param>
+ <param>
+ <key>taps</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>seed</key>
+ <value>42</value>
</param>
<param>
<key>_coordinate</key>
- <value>(512, 527)</value>
+ <value>(59, 543)</value>
</param>
<param>
<key>_rotation</key>
@@ -997,10 +1067,10 @@
</param>
</block>
<block>
- <key>wxgui_scopesink2</key>
+ <key>gr_multiply_const_vxx</key>
<param>
<key>id</key>
- <value>wxgui_scopesink2_0_0_0_0</value>
+ <value>gr_multiply_const_vxx_0</value>
</param>
<param>
<key>_enabled</key>
@@ -1008,55 +1078,97 @@
</param>
<param>
<key>type</key>
- <value>float</value>
+ <value>complex</value>
</param>
<param>
- <key>title</key>
- <value>Scope Plot</value>
+ <key>const</key>
+ <value>sig_amp</value>
</param>
<param>
- <key>samp_rate</key>
- <value>samp_rate</value>
+ <key>vlen</key>
+ <value>1</value>
</param>
<param>
- <key>v_scale</key>
- <value>1.25</value>
+ <key>_coordinate</key>
+ <value>(714, 382)</value>
</param>
<param>
- <key>v_offset</key>
+ <key>_rotation</key>
<value>0</value>
</param>
+ </block>
+ <block>
+ <key>variable</key>
<param>
- <key>t_scale</key>
+ <key>id</key>
+ <value>spb</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>value</key>
+ <value>4.2563</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(42, 840)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
<value>0</value>
</param>
+ </block>
+ <block>
+ <key>gr_pfb_clock_sync_xxx</key>
<param>
- <key>ac_couple</key>
- <value>False</value>
+ <key>id</key>
+ <value>gr_pfb_clock_sync_xxx_0</value>
</param>
<param>
- <key>xy_mode</key>
- <value>False</value>
+ <key>_enabled</key>
+ <value>True</value>
</param>
<param>
- <key>num_inputs</key>
- <value>1</value>
+ <key>type</key>
+ <value>ccf</value>
</param>
<param>
- <key>win_size</key>
- <value></value>
+ <key>sps</key>
+ <value>spb</value>
</param>
<param>
- <key>grid_pos</key>
- <value></value>
+ <key>alpha</key>
+ <value>alpha</value>
</param>
<param>
- <key>notebook</key>
- <value>notebook_0,2</value>
+ <key>beta</key>
+ <value>beta</value>
+ </param>
+ <param>
+ <key>taps</key>
+ <value>rrctaps</value>
+ </param>
+ <param>
+ <key>filter_size</key>
+ <value>nfilts</value>
+ </param>
+ <param>
+ <key>init_phase</key>
+ <value>16</value>
+ </param>
+ <param>
+ <key>max_dev</key>
+ <value>1.5</value>
+ </param>
+ <param>
+ <key>osps</key>
+ <value>1</value>
</param>
<param>
<key>_coordinate</key>
- <value>(1111, 767)</value>
+ <value>(512, 527)</value>
</param>
<param>
<key>_rotation</key>
@@ -1067,7 +1179,7 @@
<key>wxgui_scopesink2</key>
<param>
<key>id</key>
- <value>wxgui_scopesink2_0_0_1</value>
+ <value>wxgui_scopesink2_0_0</value>
</param>
<param>
<key>_enabled</key>
@@ -1075,7 +1187,7 @@
</param>
<param>
<key>type</key>
- <value>complex</value>
+ <value>float</value>
</param>
<param>
<key>title</key>
@@ -1087,7 +1199,7 @@
</param>
<param>
<key>v_scale</key>
- <value>.5</value>
+ <value>3</value>
</param>
<param>
<key>v_offset</key>
@@ -1119,34 +1231,19 @@
</param>
<param>
<key>notebook</key>
- <value>notebook_0,3</value>
- </param>
- <param>
- <key>_coordinate</key>
- <value>(1115, 358)</value>
- </param>
- <param>
- <key>_rotation</key>
- <value>0</value>
- </param>
- </block>
- <block>
- <key>gr_float_to_complex</key>
- <param>
- <key>id</key>
- <value>gr_float_to_complex_0</value>
+ <value>notebook_0,0</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>trig_mode</key>
+ <value>gr.gr_TRIG_MODE_AUTO</value>
</param>
<param>
- <key>vlen</key>
- <value>1</value>
+ <key>y_axis_label</key>
+ <value>Counts</value>
</param>
<param>
<key>_coordinate</key>
- <value>(590, 184)</value>
+ <value>(1114, 615)</value>
</param>
<param>
<key>_rotation</key>
@@ -1154,123 +1251,74 @@
</param>
</block>
<block>
- <key>blks2_pfb_arb_resampler_ccf</key>
+ <key>wxgui_scopesink2</key>
<param>
<key>id</key>
- <value>blks2_pfb_arb_resampler_ccf_0</value>
+ <value>wxgui_scopesink2_0_0_0_0</value>
</param>
<param>
<key>_enabled</key>
<value>True</value>
</param>
<param>
- <key>rate</key>
- <value>spb</value>
+ <key>type</key>
+ <value>float</value>
</param>
<param>
- <key>taps</key>
- <value>firdes.root_raised_cosine(32, 32, 1.0, 0.35, 44*32)</value>
+ <key>title</key>
+ <value>Scope Plot</value>
</param>
<param>
- <key>size</key>
- <value>32</value>
+ <key>samp_rate</key>
+ <value>samp_rate</value>
</param>
<param>
- <key>_coordinate</key>
- <value>(816, 181)</value>
+ <key>v_scale</key>
+ <value>1.25</value>
</param>
<param>
- <key>_rotation</key>
+ <key>v_offset</key>
<value>0</value>
</param>
- </block>
- <block>
- <key>gr_channel_model</key>
- <param>
- <key>id</key>
- <value>gr_channel_model_0</value>
- </param>
- <param>
- <key>_enabled</key>
- <value>True</value>
- </param>
- <param>
- <key>noise_voltage</key>
- <value>noise_amp</value>
- </param>
<param>
- <key>freq_offset</key>
- <value>freq_offset</value>
- </param>
- <param>
- <key>epsilon</key>
- <value>interpratio</value>
- </param>
- <param>
- <key>taps</key>
- <value>1.0</value>
- </param>
- <param>
- <key>seed</key>
- <value>42</value>
- </param>
- <param>
- <key>_coordinate</key>
- <value>(59, 543)</value>
- </param>
- <param>
- <key>_rotation</key>
+ <key>t_scale</key>
<value>0</value>
</param>
- </block>
- <block>
- <key>gr_multiply_const_vxx</key>
<param>
- <key>id</key>
- <value>gr_multiply_const_vxx_0</value>
- </param>
- <param>
- <key>_enabled</key>
- <value>True</value>
- </param>
- <param>
- <key>type</key>
- <value>complex</value>
+ <key>ac_couple</key>
+ <value>False</value>
</param>
<param>
- <key>const</key>
- <value>sig_amp</value>
+ <key>xy_mode</key>
+ <value>False</value>
</param>
<param>
- <key>vlen</key>
+ <key>num_inputs</key>
<value>1</value>
</param>
<param>
- <key>_coordinate</key>
- <value>(714, 382)</value>
+ <key>win_size</key>
+ <value></value>
</param>
<param>
- <key>_rotation</key>
- <value>0</value>
+ <key>grid_pos</key>
+ <value></value>
</param>
- </block>
- <block>
- <key>variable</key>
<param>
- <key>id</key>
- <value>spb</value>
+ <key>notebook</key>
+ <value>notebook_0,2</value>
</param>
<param>
- <key>_enabled</key>
- <value>True</value>
+ <key>trig_mode</key>
+ <value>gr.gr_TRIG_MODE_AUTO</value>
</param>
<param>
- <key>value</key>
- <value>4.2563</value>
+ <key>y_axis_label</key>
+ <value>Counts</value>
</param>
<param>
<key>_coordinate</key>
- <value>(42, 840)</value>
+ <value>(1080, 751)</value>
</param>
<param>
<key>_rotation</key>
diff --git a/gr-digital/grc/digital_dxpsk_demod.xml b/gr-digital/grc/digital_dxpsk_demod.xml
index 6366596d9..f3e9ee6fc 100644
--- a/gr-digital/grc/digital_dxpsk_demod.xml
+++ b/gr-digital/grc/digital_dxpsk_demod.xml
@@ -36,7 +36,7 @@
freq_bw=$freq_bw,
phase_bw=$phase_bw,
timing_bw=$timing_bw,
- mod_code=$mod_code,
+ gray_coded=$gray_coded,
verbose=$verbose,
log=$log
)</make>
@@ -86,23 +86,17 @@
<type>real</type>
</param>
<param>
- <name>Omega Relative Limit</name>
- <key>omega_relative_limit</key>
- <value>0.005</value>
- <type>real</type>
- </param>
- <param>
<name>Gray Code</name>
- <key>mod_code</key>
+ <key>gray_coded</key>
<value>True</value>
<type>enum</type>
<option>
<name>Yes</name>
- <key>"gray"</key>
+ <key>True</key>
</option>
<option>
<name>No</name>
- <key>"none"</key>
+ <key>False</key>
</option>
</param>
<param>
diff --git a/gr-digital/grc/digital_dxpsk_mod.xml b/gr-digital/grc/digital_dxpsk_mod.xml
index 58e30436d..93334d27d 100644
--- a/gr-digital/grc/digital_dxpsk_mod.xml
+++ b/gr-digital/grc/digital_dxpsk_mod.xml
@@ -33,7 +33,7 @@
<make>digital.$(type)_mod(
samples_per_symbol=$samples_per_symbol,
excess_bw=$excess_bw,
- mod_code=$mod_code,
+ gray_coded=$gray_coded,
verbose=$verbose,
log=$log)
</make>
@@ -68,16 +68,16 @@
</param>
<param>
<name>Gray Code</name>
- <key>mod_code</key>
- <value>"gray"</value>
+ <key>gray_coded</key>
+ <value>True</value>
<type>enum</type>
<option>
<name>Yes</name>
- <key>"gray"</key>
+ <key>True</key>
</option>
<option>
<name>No</name>
- <key>"none"</key>
+ <key>False</key>
</option>
</param>
<param>
diff --git a/gr-digital/grc/digital_gfsk_demod.xml b/gr-digital/grc/digital_gfsk_demod.xml
new file mode 100644
index 000000000..ce3024d89
--- /dev/null
+++ b/gr-digital/grc/digital_gfsk_demod.xml
@@ -0,0 +1,95 @@
+<?xml version="1.0"?>
+<!--
+###################################################
+##GFSK Demod
+###################################################
+ -->
+<block>
+ <name>GFSK Demod</name>
+ <key>digital_gfsk_demod</key>
+ <import>from gnuradio import digital</import>
+ <make>digital.gfsk_demod(
+ samples_per_symbol=$samples_per_symbol,
+ sensitivity=$sensitivity,
+ gain_mu=$gain_mu,
+ mu=$mu,
+ omega_relative_limit=$omega_relative_limit,
+ freq_error=$freq_error,
+ verbose=$verbose,
+ log=$log,
+)</make>
+ <param>
+ <name>Samples/Symbol</name>
+ <key>samples_per_symbol</key>
+ <value>2</value>
+ <type>int</type>
+ </param>
+ <param>
+ <name>Sensitivity</name>
+ <key>sensitivity</key>
+ <value>1.0</value>
+ <type>real</type>
+ </param>
+ <param>
+ <name>Gain Mu</name>
+ <key>gain_mu</key>
+ <value>0.175</value>
+ <type>real</type>
+ </param>
+ <param>
+ <name>Mu</name>
+ <key>mu</key>
+ <value>0.5</value>
+ <type>real</type>
+ </param>
+ <param>
+ <name>Omega Relative Limit</name>
+ <key>omega_relative_limit</key>
+ <value>0.005</value>
+ <type>real</type>
+ </param>
+ <param>
+ <name>Freq Error</name>
+ <key>freq_error</key>
+ <value>0.0</value>
+ <type>real</type>
+ </param>
+ <param>
+ <name>Verbose</name>
+ <key>verbose</key>
+ <value>False</value>
+ <type>bool</type>
+ <hide>#if str($verbose) == 'False' then 'part' else 'none'#</hide>
+ <option>
+ <name>On</name>
+ <key>True</key>
+ </option>
+ <option>
+ <name>Off</name>
+ <key>False</key>
+ </option>
+ </param>
+ <param>
+ <name>Logging</name>
+ <key>log</key>
+ <value>False</value>
+ <type>bool</type>
+ <hide>#if str($log) == 'False' then 'part' else 'none'#</hide>
+ <option>
+ <name>On</name>
+ <key>True</key>
+ </option>
+ <option>
+ <name>Off</name>
+ <key>False</key>
+ </option>
+ </param>
+ <sink>
+ <name>in</name>
+ <type>complex</type>
+ </sink>
+ <source>
+ <name>out</name>
+ <type>byte</type>
+ </source>
+</block>
diff --git a/gr-digital/grc/digital_gfsk_mod.xml b/gr-digital/grc/digital_gfsk_mod.xml
new file mode 100644
index 000000000..2d6cd1ea5
--- /dev/null
+++ b/gr-digital/grc/digital_gfsk_mod.xml
@@ -0,0 +1,74 @@
+<?xml version="1.0"?>
+<!--
+###################################################
+##GFSK Mod
+###################################################
+ -->
+<block>
+ <name>GFSK Mod</name>
+ <key>digital_gfsk_mod</key>
+ <import>from gnuradio import digital</import>
+ <make>digital.gfsk_mod(
+ samples_per_symbol=$samples_per_symbol,
+ sensitivity=$sensitivity,
+ bt=$bt,
+ verbose=$verbose,
+ log=$log,
+)</make>
+ <param>
+ <name>Samples/Symbol</name>
+ <key>samples_per_symbol</key>
+ <value>2</value>
+ <type>int</type>
+ </param>
+ <param>
+ <name>Sensitivity</name>
+ <key>sensitivity</key>
+ <value>1.0</value>
+ <type>real</type>
+ </param>
+ <param>
+ <name>BT</name>
+ <key>bt</key>
+ <value>0.35</value>
+ <type>real</type>
+ </param>
+ <param>
+ <name>Verbose</name>
+ <key>verbose</key>
+ <value>False</value>
+ <type>bool</type>
+ <hide>#if str($verbose) == 'False' then 'part' else 'none'#</hide>
+ <option>
+ <name>On</name>
+ <key>True</key>
+ </option>
+ <option>
+ <name>Off</name>
+ <key>False</key>
+ </option>
+ </param>
+ <param>
+ <name>Logging</name>
+ <key>log</key>
+ <value>False</value>
+ <type>bool</type>
+ <hide>#if str($log) == 'False' then 'part' else 'none'#</hide>
+ <option>
+ <name>On</name>
+ <key>True</key>
+ </option>
+ <option>
+ <name>Off</name>
+ <key>False</key>
+ </option>
+ </param>
+ <sink>
+ <name>in</name>
+ <type>byte</type>
+ </sink>
+ <source>
+ <name>out</name>
+ <type>complex</type>
+ </source>
+</block>
diff --git a/gr-digital/include/digital_fll_band_edge_cc.h b/gr-digital/include/digital_fll_band_edge_cc.h
index c70bfc86d..68083bbae 100644
--- a/gr-digital/include/digital_fll_band_edge_cc.h
+++ b/gr-digital/include/digital_fll_band_edge_cc.h
@@ -1,6 +1,6 @@
/* -*- c++ -*- */
/*
- * Copyright 2009,2011 Free Software Foundation, Inc.
+ * Copyright 2009,2011,2012 Free Software Foundation, Inc.
*
* This file is part of GNU Radio
*
@@ -27,13 +27,19 @@
#include <digital_api.h>
#include <gr_sync_block.h>
#include <gri_control_loop.h>
+#include <gr_fir_util.h>
+#include <gr_fir_ccc.h>
+
+typedef gr_fir_ccc* (*fir_maker_t)(const std::vector<gr_complex> &taps);
+typedef gr_fir_ccc filter_t;
class digital_fll_band_edge_cc;
typedef boost::shared_ptr<digital_fll_band_edge_cc> digital_fll_band_edge_cc_sptr;
-DIGITAL_API digital_fll_band_edge_cc_sptr digital_make_fll_band_edge_cc (float samps_per_sym,
- float rolloff,
- int filter_size,
- float bandwidth);
+DIGITAL_API digital_fll_band_edge_cc_sptr
+digital_make_fll_band_edge_cc(float samps_per_sym,
+ float rolloff,
+ int filter_size,
+ float bandwidth);
/*!
* \class digital_fll_band_edge_cc
@@ -86,7 +92,8 @@ DIGITAL_API digital_fll_band_edge_cc_sptr digital_make_fll_band_edge_cc (float s
*
*/
-class DIGITAL_API digital_fll_band_edge_cc : public gr_sync_block, public gri_control_loop
+class DIGITAL_API digital_fll_band_edge_cc :
+ public gr_sync_block, public gri_control_loop
{
private:
/*!
@@ -96,10 +103,11 @@ class DIGITAL_API digital_fll_band_edge_cc : public gr_sync_block, public gri_co
* \param filter_size (int) Size (in taps) of the filter
* \param bandwidth (float) Loop bandwidth
*/
- friend DIGITAL_API digital_fll_band_edge_cc_sptr digital_make_fll_band_edge_cc (float samps_per_sym,
- float rolloff,
- int filter_size,
- float bandwidth);
+ friend DIGITAL_API digital_fll_band_edge_cc_sptr
+ digital_make_fll_band_edge_cc(float samps_per_sym,
+ float rolloff,
+ int filter_size,
+ float bandwidth);
float d_sps;
float d_rolloff;
@@ -108,6 +116,10 @@ class DIGITAL_API digital_fll_band_edge_cc : public gr_sync_block, public gri_co
std::vector<gr_complex> d_taps_lower;
std::vector<gr_complex> d_taps_upper;
bool d_updated;
+ filter_t* d_filter_lower;
+ filter_t* d_filter_upper;
+ std::vector<gr_complex> d_output_hist;
+ std::vector<gr_complex> d_fllbuffer;
/*!
* Build the FLL
@@ -130,7 +142,7 @@ class DIGITAL_API digital_fll_band_edge_cc : public gr_sync_block, public gri_co
void design_filter(float samps_per_sym, float rolloff, int filter_size);
public:
- ~digital_fll_band_edge_cc ();
+ ~digital_fll_band_edge_cc();
/*******************************************************************
SET FUNCTIONS
@@ -206,9 +218,9 @@ public:
*/
void print_taps();
- int work (int noutput_items,
- gr_vector_const_void_star &input_items,
- gr_vector_void_star &output_items);
+ int work(int noutput_items,
+ gr_vector_const_void_star &input_items,
+ gr_vector_void_star &output_items);
};
#endif
diff --git a/gr-digital/lib/digital_fll_band_edge_cc.cc b/gr-digital/lib/digital_fll_band_edge_cc.cc
index 05c092622..f2cfb1020 100644
--- a/gr-digital/lib/digital_fll_band_edge_cc.cc
+++ b/gr-digital/lib/digital_fll_band_edge_cc.cc
@@ -1,6 +1,6 @@
/* -*- c++ -*- */
/*
- * Copyright 2009-2011 Free Software Foundation, Inc.
+ * Copyright 2009-2012 Free Software Foundation, Inc.
*
* This file is part of GNU Radio
*
@@ -50,37 +50,38 @@ digital_make_fll_band_edge_cc (float samps_per_sym, float rolloff,
static int ios[] = {sizeof(gr_complex), sizeof(float), sizeof(float), sizeof(float)};
static std::vector<int> iosig(ios, ios+sizeof(ios)/sizeof(int));
-digital_fll_band_edge_cc::digital_fll_band_edge_cc (float samps_per_sym, float rolloff,
- int filter_size, float bandwidth)
- : gr_sync_block ("fll_band_edge_cc",
- gr_make_io_signature (1, 1, sizeof(gr_complex)),
- gr_make_io_signaturev (1, 4, iosig)),
+digital_fll_band_edge_cc::digital_fll_band_edge_cc(float samps_per_sym, float rolloff,
+ int filter_size, float bandwidth)
+ : gr_sync_block("fll_band_edge_cc",
+ gr_make_io_signature(1, 1, sizeof(gr_complex)),
+ gr_make_io_signaturev(1, 4, iosig)),
gri_control_loop(bandwidth, M_TWOPI*(2.0/samps_per_sym), -M_TWOPI*(2.0/samps_per_sym)),
- d_updated (false)
+ d_updated(false)
{
// Initialize samples per symbol
if(samps_per_sym <= 0) {
- throw std::out_of_range ("digital_fll_band_edge_cc: invalid number of sps. Must be > 0.");
+ throw std::out_of_range("digital_fll_band_edge_cc: invalid number of sps. Must be > 0.");
}
d_sps = samps_per_sym;
// Initialize rolloff factor
if(rolloff < 0 || rolloff > 1.0) {
- throw std::out_of_range ("digital_fll_band_edge_cc: invalid rolloff factor. Must be in [0,1].");
+ throw std::out_of_range("digital_fll_band_edge_cc: invalid rolloff factor. Must be in [0,1].");
}
d_rolloff = rolloff;
// Initialize filter length
if(filter_size <= 0) {
- throw std::out_of_range ("digital_fll_band_edge_cc: invalid filter size. Must be > 0.");
+ throw std::out_of_range("digital_fll_band_edge_cc: invalid filter size. Must be > 0.");
}
d_filter_size = filter_size;
// Build the band edge filters
design_filter(d_sps, d_rolloff, d_filter_size);
+ d_output_hist.resize(filter_size,0);
}
-digital_fll_band_edge_cc::~digital_fll_band_edge_cc ()
+digital_fll_band_edge_cc::~digital_fll_band_edge_cc()
{
}
@@ -93,7 +94,7 @@ void
digital_fll_band_edge_cc::set_samples_per_symbol(float sps)
{
if(sps <= 0) {
- throw std::out_of_range ("digital_fll_band_edge_cc: invalid number of sps. Must be > 0.");
+ throw std::out_of_range("digital_fll_band_edge_cc: invalid number of sps. Must be > 0.");
}
d_sps = sps;
design_filter(d_sps, d_rolloff, d_filter_size);
@@ -103,7 +104,7 @@ void
digital_fll_band_edge_cc::set_rolloff(float rolloff)
{
if(rolloff < 0 || rolloff > 1.0) {
- throw std::out_of_range ("digital_fll_band_edge_cc: invalid rolloff factor. Must be in [0,1].");
+ throw std::out_of_range("digital_fll_band_edge_cc: invalid rolloff factor. Must be in [0,1].");
}
d_rolloff = rolloff;
design_filter(d_sps, d_rolloff, d_filter_size);
@@ -113,7 +114,7 @@ void
digital_fll_band_edge_cc::set_filter_size(int filter_size)
{
if(filter_size <= 0) {
- throw std::out_of_range ("digital_fll_band_edge_cc: invalid filter size. Must be > 0.");
+ throw std::out_of_range("digital_fll_band_edge_cc: invalid filter size. Must be > 0.");
}
d_filter_size = filter_size;
design_filter(d_sps, d_rolloff, d_filter_size);
@@ -185,6 +186,8 @@ digital_fll_band_edge_cc::design_filter(float samps_per_sym,
// Set the history to ensure enough input items for each filter
set_history(filter_size+1);
+ d_filter_upper = gr_fir_util::create_gr_fir_ccc(d_taps_upper);
+ d_filter_lower = gr_fir_util::create_gr_fir_ccc(d_taps_lower);
}
void
@@ -206,23 +209,25 @@ digital_fll_band_edge_cc::print_taps()
}
int
-digital_fll_band_edge_cc::work (int noutput_items,
- gr_vector_const_void_star &input_items,
- gr_vector_void_star &output_items)
+digital_fll_band_edge_cc::work(int noutput_items,
+ gr_vector_const_void_star &input_items,
+ gr_vector_void_star &output_items)
{
- const gr_complex *in = (const gr_complex *) input_items[0];
- gr_complex *out = (gr_complex *) output_items[0];
+ const gr_complex *in = (const gr_complex*)input_items[0];
+ gr_complex *out = (gr_complex*)output_items[0];
+ d_fllbuffer.reserve(d_filter_size+noutput_items);
+
float *frq = NULL;
float *phs = NULL;
float *err = NULL;
if(output_items.size() == 4) {
- frq = (float *) output_items[1];
- phs = (float *) output_items[2];
- err = (float *) output_items[3];
+ frq = (float*)output_items[1];
+ phs = (float*)output_items[2];
+ err = (float*)output_items[3];
}
- if (d_updated) {
+ if(d_updated) {
d_updated = false;
return 0; // history requirements may have changed.
}
@@ -231,17 +236,19 @@ digital_fll_band_edge_cc::work (int noutput_items,
float error;
gr_complex nco_out;
gr_complex out_upper, out_lower;
+ gr_complex out_uppersse, out_lowersse;
+ copy( d_output_hist.begin(), d_output_hist.end(), d_fllbuffer.begin());
+
for(i = 0; i < noutput_items; i++) {
nco_out = gr_expj(d_phase);
- out[i+d_filter_size-1] = in[i] * nco_out;
-
+ d_fllbuffer[i+d_filter_size] = in[i] * nco_out;
// Perform the dot product of the output with the filters
out_upper = 0;
out_lower = 0;
- for(int k = 0; k < d_filter_size; k++) {
- out_upper += d_taps_upper[k] * out[i+k];
- out_lower += d_taps_lower[k] * out[i+k];
- }
+
+ out_upper = d_filter_lower->filter(&d_fllbuffer[i]);
+ out_lower = d_filter_upper->filter(&d_fllbuffer[i]);
+
error = norm(out_lower) - norm(out_upper);
advance_loop(error);
@@ -255,5 +262,10 @@ digital_fll_band_edge_cc::work (int noutput_items,
}
}
+ copy(d_fllbuffer.begin(), d_fllbuffer.begin()+noutput_items, out);
+ copy(d_fllbuffer.begin()+noutput_items,
+ d_fllbuffer.begin()+noutput_items+d_filter_size,
+ d_output_hist.begin());
+
return noutput_items;
}
diff --git a/gr-digital/python/CMakeLists.txt b/gr-digital/python/CMakeLists.txt
index c786b5a14..6a9f10295 100644
--- a/gr-digital/python/CMakeLists.txt
+++ b/gr-digital/python/CMakeLists.txt
@@ -30,6 +30,7 @@ GR_PYTHON_INSTALL(
crc.py
generic_mod_demod.py
gmsk.py
+ gfsk.py
modulation_utils.py
ofdm.py
ofdm_packet_utils.py
diff --git a/gr-digital/python/__init__.py b/gr-digital/python/__init__.py
index 7c76183c9..3fdbca769 100644
--- a/gr-digital/python/__init__.py
+++ b/gr-digital/python/__init__.py
@@ -31,6 +31,7 @@ from qam import *
from bpsk import *
from qpsk import *
from gmsk import *
+from gfsk import *
from cpm import *
from pkt import *
from crc import *
diff --git a/gr-digital/python/gfsk.py b/gr-digital/python/gfsk.py
new file mode 100644
index 000000000..c85fdf0e0
--- /dev/null
+++ b/gr-digital/python/gfsk.py
@@ -0,0 +1,306 @@
+#
+# GFSK modulation and demodulation.
+#
+#
+# Copyright 2005,2006,2007 Free Software Foundation, Inc.
+#
+# This file is part of GNU Radio
+#
+# GNU Radio is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GNU Radio is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GNU Radio; see the file COPYING. If not, write to
+# the Free Software Foundation, Inc., 51 Franklin Street,
+# Boston, MA 02110-1301, USA.
+#
+
+# See gnuradio-examples/python/digital for examples
+
+from gnuradio import gr
+import modulation_utils
+import digital_swig as digital
+from math import pi
+import numpy
+from pprint import pprint
+import inspect
+
+# default values (used in __init__ and add_options)
+_def_samples_per_symbol = 2
+_def_sensitivity = 1
+_def_bt = 0.35
+_def_verbose = False
+_def_log = False
+
+_def_gain_mu = None
+_def_mu = 0.5
+_def_freq_error = 0.0
+_def_omega_relative_limit = 0.005
+
+
+# FIXME: Figure out how to make GFSK work with pfb_arb_resampler_fff for both
+# transmit and receive so we don't require integer samples per symbol.
+
+
+# /////////////////////////////////////////////////////////////////////////////
+# GFSK modulator
+# /////////////////////////////////////////////////////////////////////////////
+
+class gfsk_mod(gr.hier_block2):
+
+ def __init__(self,
+ samples_per_symbol=_def_samples_per_symbol,
+ sensitivity=_def_sensitivity,
+ bt=_def_bt,
+ verbose=_def_verbose,
+ log=_def_log):
+ """
+ Hierarchical block for Gaussian Frequency Shift Key (GFSK)
+ modulation.
+
+ The input is a byte stream (unsigned char) and the
+ output is the complex modulated signal at baseband.
+
+ @param samples_per_symbol: samples per baud >= 2
+ @type samples_per_symbol: integer
+ @param bt: Gaussian filter bandwidth * symbol time
+ @type bt: float
+ @param verbose: Print information about modulator?
+ @type verbose: bool
+ @param debug: Print modualtion data to files?
+ @type debug: bool
+ """
+
+ gr.hier_block2.__init__(self, "gfsk_mod",
+ gr.io_signature(1, 1, gr.sizeof_char), # Input signature
+ gr.io_signature(1, 1, gr.sizeof_gr_complex)) # Output signature
+
+ samples_per_symbol = int(samples_per_symbol)
+ self._samples_per_symbol = samples_per_symbol
+ self._bt = bt
+ self._differential = False
+
+ if not isinstance(samples_per_symbol, int) or samples_per_symbol < 2:
+ raise TypeError, ("samples_per_symbol must be an integer >= 2, is %r" % (samples_per_symbol,))
+
+ ntaps = 4 * samples_per_symbol # up to 3 bits in filter at once
+ #sensitivity = (pi / 2) / samples_per_symbol # phase change per bit = pi / 2
+
+ # Turn it into NRZ data.
+ self.nrz = gr.bytes_to_syms()
+
+ # Form Gaussian filter
+ # Generate Gaussian response (Needs to be convolved with window below).
+ self.gaussian_taps = gr.firdes.gaussian(
+ 1.0, # gain
+ samples_per_symbol, # symbol_rate
+ bt, # bandwidth * symbol time
+ ntaps # number of taps
+ )
+
+ self.sqwave = (1,) * samples_per_symbol # rectangular window
+ self.taps = numpy.convolve(numpy.array(self.gaussian_taps),numpy.array(self.sqwave))
+ self.gaussian_filter = gr.interp_fir_filter_fff(samples_per_symbol, self.taps)
+
+ # FM modulation
+ self.fmmod = gr.frequency_modulator_fc(sensitivity)
+
+ # small amount of output attenuation to prevent clipping USRP sink
+ self.amp = gr.multiply_const_cc(0.999)
+
+ if verbose:
+ self._print_verbage()
+
+ if log:
+ self._setup_logging()
+
+ # Connect & Initialize base class
+ self.connect(self, self.nrz, self.gaussian_filter, self.fmmod, self.amp, self)
+
+ def samples_per_symbol(self):
+ return self._samples_per_symbol
+
+ def bits_per_symbol(self=None): # staticmethod that's also callable on an instance
+ return 1
+ bits_per_symbol = staticmethod(bits_per_symbol) # make it a static method.
+
+
+ def _print_verbage(self):
+ print "bits per symbol = %d" % self.bits_per_symbol()
+ print "Gaussian filter bt = %.2f" % self._bt
+
+
+ def _setup_logging(self):
+ print "Modulation logging turned on."
+ self.connect(self.nrz,
+ gr.file_sink(gr.sizeof_float, "nrz.dat"))
+ self.connect(self.gaussian_filter,
+ gr.file_sink(gr.sizeof_float, "gaussian_filter.dat"))
+ self.connect(self.fmmod,
+ gr.file_sink(gr.sizeof_gr_complex, "fmmod.dat"))
+
+
+ def add_options(parser):
+ """
+ Adds GFSK modulation-specific options to the standard parser
+ """
+ parser.add_option("", "--bt", type="float", default=_def_bt,
+ help="set bandwidth-time product [default=%default] (GFSK)")
+ add_options=staticmethod(add_options)
+
+
+ def extract_kwargs_from_options(options):
+ """
+ Given command line options, create dictionary suitable for passing to __init__
+ """
+ return modulation_utils.extract_kwargs_from_options(gfsk_mod.__init__,
+ ('self',), options)
+ extract_kwargs_from_options=staticmethod(extract_kwargs_from_options)
+
+
+
+# /////////////////////////////////////////////////////////////////////////////
+# GFSK demodulator
+# /////////////////////////////////////////////////////////////////////////////
+
+class gfsk_demod(gr.hier_block2):
+
+ def __init__(self,
+ samples_per_symbol=_def_samples_per_symbol,
+ sensitivity=_def_sensitivity,
+ gain_mu=_def_gain_mu,
+ mu=_def_mu,
+ omega_relative_limit=_def_omega_relative_limit,
+ freq_error=_def_freq_error,
+ verbose=_def_verbose,
+ log=_def_log):
+ """
+ Hierarchical block for Gaussian Minimum Shift Key (GFSK)
+ demodulation.
+
+ The input is the complex modulated signal at baseband.
+ The output is a stream of bits packed 1 bit per byte (the LSB)
+
+ @param samples_per_symbol: samples per baud
+ @type samples_per_symbol: integer
+ @param verbose: Print information about modulator?
+ @type verbose: bool
+ @param log: Print modualtion data to files?
+ @type log: bool
+
+ Clock recovery parameters. These all have reasonble defaults.
+
+ @param gain_mu: controls rate of mu adjustment
+ @type gain_mu: float
+ @param mu: fractional delay [0.0, 1.0]
+ @type mu: float
+ @param omega_relative_limit: sets max variation in omega
+ @type omega_relative_limit: float, typically 0.000200 (200 ppm)
+ @param freq_error: bit rate error as a fraction
+ @param float
+ """
+
+ gr.hier_block2.__init__(self, "gfsk_demod",
+ gr.io_signature(1, 1, gr.sizeof_gr_complex), # Input signature
+ gr.io_signature(1, 1, gr.sizeof_char)) # Output signature
+
+ self._samples_per_symbol = samples_per_symbol
+ self._gain_mu = gain_mu
+ self._mu = mu
+ self._omega_relative_limit = omega_relative_limit
+ self._freq_error = freq_error
+ self._differential = False
+
+ if samples_per_symbol < 2:
+ raise TypeError, "samples_per_symbol >= 2, is %f" % samples_per_symbol
+
+ self._omega = samples_per_symbol*(1+self._freq_error)
+
+ if not self._gain_mu:
+ self._gain_mu = 0.175
+
+ self._gain_omega = .25 * self._gain_mu * self._gain_mu # critically damped
+
+ # Demodulate FM
+ #sensitivity = (pi / 2) / samples_per_symbol
+ self.fmdemod = gr.quadrature_demod_cf(1.0 / sensitivity)
+
+ # the clock recovery block tracks the symbol clock and resamples as needed.
+ # the output of the block is a stream of soft symbols (float)
+ self.clock_recovery = digital.clock_recovery_mm_ff(self._omega, self._gain_omega,
+ self._mu, self._gain_mu,
+ self._omega_relative_limit)
+
+ # slice the floats at 0, outputting 1 bit (the LSB of the output byte) per sample
+ self.slicer = digital.binary_slicer_fb()
+
+ if verbose:
+ self._print_verbage()
+
+ if log:
+ self._setup_logging()
+
+ # Connect & Initialize base class
+ self.connect(self, self.fmdemod, self.clock_recovery, self.slicer, self)
+
+ def samples_per_symbol(self):
+ return self._samples_per_symbol
+
+ def bits_per_symbol(self=None): # staticmethod that's also callable on an instance
+ return 1
+ bits_per_symbol = staticmethod(bits_per_symbol) # make it a static method.
+
+
+ def _print_verbage(self):
+ print "bits per symbol = %d" % self.bits_per_symbol()
+ print "M&M clock recovery omega = %f" % self._omega
+ print "M&M clock recovery gain mu = %f" % self._gain_mu
+ print "M&M clock recovery mu = %f" % self._mu
+ print "M&M clock recovery omega rel. limit = %f" % self._omega_relative_limit
+ print "frequency error = %f" % self._freq_error
+
+
+ def _setup_logging(self):
+ print "Demodulation logging turned on."
+ self.connect(self.fmdemod,
+ gr.file_sink(gr.sizeof_float, "fmdemod.dat"))
+ self.connect(self.clock_recovery,
+ gr.file_sink(gr.sizeof_float, "clock_recovery.dat"))
+ self.connect(self.slicer,
+ gr.file_sink(gr.sizeof_char, "slicer.dat"))
+
+ def add_options(parser):
+ """
+ Adds GFSK demodulation-specific options to the standard parser
+ """
+ parser.add_option("", "--gain-mu", type="float", default=_def_gain_mu,
+ help="M&M clock recovery gain mu [default=%default] (GFSK/PSK)")
+ parser.add_option("", "--mu", type="float", default=_def_mu,
+ help="M&M clock recovery mu [default=%default] (GFSK/PSK)")
+ parser.add_option("", "--omega-relative-limit", type="float", default=_def_omega_relative_limit,
+ help="M&M clock recovery omega relative limit [default=%default] (GFSK/PSK)")
+ parser.add_option("", "--freq-error", type="float", default=_def_freq_error,
+ help="M&M clock recovery frequency error [default=%default] (GFSK)")
+ add_options=staticmethod(add_options)
+
+ def extract_kwargs_from_options(options):
+ """
+ Given command line options, create dictionary suitable for passing to __init__
+ """
+ return modulation_utils.extract_kwargs_from_options(gfsk_demod.__init__,
+ ('self',), options)
+ extract_kwargs_from_options=staticmethod(extract_kwargs_from_options)
+
+
+#
+# Add these to the mod/demod registry
+#
+modulation_utils.add_type_1_mod('gfsk', gfsk_mod)
+modulation_utils.add_type_1_demod('gfsk', gfsk_demod)