From 98a0c00c7a922e1c5cbce155205b4e5de725bcf7 Mon Sep 17 00:00:00 2001
From: Tom <trondeau@vt.edu>
Date: Sun, 31 Jan 2010 17:08:03 -0500
Subject: Using PFB resampler to do the RRC filtering on the modulator. This
 along with the PFB clock recovery in the demod block allows arbitrary real
 numbers for the number of samples per symbol. We will have to chance the
 transmit and recieve path code in the examples to take advantage of this.

---
 .../src/python/gnuradio/blks2impl/dbpsk2.py        | 27 +++++++++-------------
 1 file changed, 11 insertions(+), 16 deletions(-)

(limited to 'gnuradio-core/src/python/gnuradio/blks2impl/dbpsk2.py')

diff --git a/gnuradio-core/src/python/gnuradio/blks2impl/dbpsk2.py b/gnuradio-core/src/python/gnuradio/blks2impl/dbpsk2.py
index a692e7d1fc..b2cc278543 100644
--- a/gnuradio-core/src/python/gnuradio/blks2impl/dbpsk2.py
+++ b/gnuradio-core/src/python/gnuradio/blks2impl/dbpsk2.py
@@ -26,7 +26,7 @@ differential BPSK modulation and demodulation.
 """
 
 from gnuradio import gr, gru, modulation_utils
-from math import pi, sqrt
+from math import pi, sqrt, ceil
 import psk
 import cmath
 from pprint import pprint
@@ -86,8 +86,6 @@ class dbpsk2_mod(gr.hier_block2):
         if not isinstance(self._samples_per_symbol, int) or self._samples_per_symbol < 2:
             raise TypeError, ("sbp must be an integer >= 2, is %d" % self._samples_per_symbol)
         
-	ntaps = 11 * self._samples_per_symbol
-
         arity = pow(2,self.bits_per_symbol())
         
         # turn bytes into k-bit vectors
@@ -103,16 +101,15 @@ class dbpsk2_mod(gr.hier_block2):
 
         self.chunks2symbols = gr.chunks_to_symbols_bc(psk.constellation[arity])
 
-        # pulse shaping filter
-	self.rrc_taps = gr.firdes.root_raised_cosine(
-	    self._samples_per_symbol,   # gain (samples_per_symbol since we're
-                                        # interpolating by samples_per_symbol)
-	    self._samples_per_symbol,   # sampling rate
-	    1.0,		        # symbol rate
-	    self._excess_bw,            # excess bandwidth (roll-off factor)
+        nfilts = 32
+        ntaps = nfilts * 11 * self._samples_per_symbol      # make nfilts filters of ntaps each
+        self.rrc_taps = gr.firdes.root_raised_cosine(
+            nfilts,          # gain
+            nfilts,          # sampling rate based on 32 filters in resampler
+            1.0,             # symbol rate
+            self._excess_bw, # excess bandwidth (roll-off factor)
             ntaps)
-	self.rrc_filter = gr.interp_fir_filter_ccf(self._samples_per_symbol,
-                                                   self.rrc_taps)
+        self.rrc_filter = gr.pfb_arb_resampler_ccf(self._samples_per_symbol, self.rrc_taps)
 
 	# Connect
         self.connect(self, self.bytes2chunks, self.symbol_mapper, self.diffenc,
@@ -244,16 +241,14 @@ class dbpsk2_demod(gr.hier_block2):
         self.agc = gr.agc2_cc(0.6e-1, 1e-3, 1, 1, 100)
         #self.agc = gr.feedforward_agc_cc(16, 1.0)
 
-
         # Frequency correction
         self.freq_recov = gr.fll_band_edge_cc(self._samples_per_symbol, self._excess_bw,
-                                              11*self._samples_per_symbol,
+                                              11*int(self._samples_per_symbol),
                                               self._freq_alpha, self._freq_beta)
-                                              
 
         # symbol timing recovery with RRC data filter
         nfilts = 32
-        ntaps = 11 * samples_per_symbol*nfilts
+        ntaps = 11 * int(self._samples_per_symbol*nfilts)
         taps = gr.firdes.root_raised_cosine(nfilts, nfilts,
                                             1.0/float(self._samples_per_symbol),
                                             self._excess_bw, ntaps)
-- 
cgit v1.2.3