Index: usrp_siggen.py
===================================================================
--- usrp_siggen.py	(Revision 228)
+++ usrp_siggen.py	(Revision 229)
@@ -1,6 +1,6 @@
 #!/usr/bin/env python
 
-from gnuradio import gr, gru
+from gnuradio import gr, gru, optfir
 from gnuradio import usrp
 from gnuradio.eng_option import eng_option
 from gnuradio import eng_notation
@@ -11,9 +11,10 @@
 class my_graph(gr.flow_graph):
     def __init__ (self):
         gr.flow_graph.__init__(self)
-        
+
         # controllable values
         self.interp = 64
+        self.interpolation = 2
         self.waveform_type = gr.GR_SIN_WAVE
         self.waveform_ampl = 16000
         self.waveform_freq = 100.12345e3
@@ -22,11 +23,11 @@
         self.set_waveform_type (self.waveform_type)
 
     def usb_freq (self):
-        return self.u.dac_freq() / self.interp
+        return self.u.dac_freq() / self.interp / self.interpolation
 
     def usb_throughput (self):
         return self.usb_freq () * 4
-        
+
     def set_waveform_type (self, type):
         '''
         valid waveform types are: gr.GR_SIN_WAVE, gr.GR_CONST_WAVE,
@@ -43,20 +44,29 @@
     def set_waveform_freq (self, freq):
         self.waveform_freq = freq
         self.siggen.set_frequency (freq)
-        
+
     def set_waveform_offset (self, offset):
         self.waveform_offset = offset
         self.siggen.set_offset (offset)
 
     def set_interpolator (self, interp):
         self.interp = interp
-        self.siggen.set_sampling_freq (self.usb_freq ())
-        self.u.set_interp_rate (interp)
+        self.siggen.set_sampling_freq (self.usb_freq ()/self.interpolation)
+        self.u.set_interp_rate (interp/self.interpolation)
 
     def _instantiate_blocks (self):
         self.src = None
         self.u = usrp.sink_c (0, self.interp)
-        
+
+        bw = 0.5/self.interpolation
+        tb = bw/5
+        # gain, sampling rate, passband cutoff, stopband cutoff
+        # passband ripple in dB, stopband attenuation in dB
+        # extra taps
+        filt_coeff = optfir.low_pass(1.0, 1.0, bw, bw+tb, 0.1, 60.0, 1)
+        print "Software interpolation filter length: %d" % (len(filt_coeff))
+        self.filter = gr.interp_fir_filter_ccf(self.interpolation,filt_coeff)
+
         self.siggen = gr.sig_source_c (self.usb_freq (),
                                        gr.GR_SIN_WAVE,
                                        self.waveform_freq,
@@ -74,16 +84,15 @@
             self.stop ()
         self.disconnect_all ()
         if type == gr.GR_SIN_WAVE or type == gr.GR_CONST_WAVE:
-            self.connect (self.siggen, self.u)
             # self.connect (self.siggen, self.file_sink)
             self.siggen.set_waveform (type)
             self.src = self.siggen
         elif type == gr.GR_UNIFORM or type == gr.GR_GAUSSIAN:
-            self.connect (self.noisegen, self.u)
             self.noisegen.set_type (type)
             self.src = self.noisegen
         else:
             raise ValueError, type
+        self.connect(self.src, self.filter, self.u)
         if was_running:
             self.start ()
 
@@ -122,7 +131,7 @@
 
     parser.add_option ("--sine", dest="type", action="store_const", const=gr.GR_SIN_WAVE,
                        help="generate a complex sinusoid [default]", default=gr.GR_SIN_WAVE)
-    parser.add_option ("--const", dest="type", action="store_const", const=gr.GR_CONST_WAVE, 
+    parser.add_option ("--const", dest="type", action="store_const", const=gr.GR_CONST_WAVE,
                        help="generate a constant output")
     parser.add_option ("--gaussian", dest="type", action="store_const", const=gr.GR_GAUSSIAN,
                        help="generate Gaussian random output")
@@ -162,13 +171,13 @@
     fg.u.set_mux(m)
     fg.subdev = usrp.selected_subdev(fg.u, options.tx_subdev_spec)
     print "Using TX d'board %s" % (fg.subdev.side_and_name(),)
-    
+
     fg.subdev.set_gain(fg.subdev.gain_range()[1])    # set max Tx gain
 
     if not fg.set_freq(options.rf_freq):
         sys.stderr.write('Failed to set RF frequency\n')
         raise SystemExit
-    
+
     fg.subdev.set_enable(True)                       # enable transmitter
 
     try:
