commit-gnuradio
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Commit-gnuradio] gr-radio-astronomy/src/python usrp_psr_receiver.py


From: Marcus D. Leech
Subject: [Commit-gnuradio] gr-radio-astronomy/src/python usrp_psr_receiver.py
Date: Fri, 30 Jun 2006 17:05:31 +0000

CVSROOT:        /sources/gnuradio
Module name:    gr-radio-astronomy
Changes by:     Marcus D. Leech <mleech>        06/06/30 17:05:31

Modified files:
        src/python     : usrp_psr_receiver.py 

Log message:
        Changed the way ntaps is computed for de-dispersion filtering.  
Untested!

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/gr-radio-astronomy/src/python/usrp_psr_receiver.py?cvsroot=gnuradio&r1=1.3&r2=1.4

Patches:
Index: usrp_psr_receiver.py
===================================================================
RCS file: /sources/gnuradio/gr-radio-astronomy/src/python/usrp_psr_receiver.py,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -b -r1.3 -r1.4
--- usrp_psr_receiver.py        29 Jun 2006 20:06:29 -0000      1.3
+++ usrp_psr_receiver.py        30 Jun 2006 17:05:31 -0000      1.4
@@ -312,9 +312,9 @@
         # Do this here, just before creating the filter
         #  that will use the taps.
         #
-        ntaps = 2047
+        ntaps = self.compute_disp_ntaps(self.dm,self.bw,self.observing_freq)
 
-        # Taps for the real de-dispersion filter
+        # Taps for the de-dispersion filter
         self.disp_taps = Numeric.zeros(ntaps,Numeric.Complex64)
 
         # Compute the de-dispersion filter now
@@ -326,18 +326,8 @@
         #
 
         #
-        # The dispersion filter--computes the inverse of the transfer
-        #  function of the interstellar media.  Theoretically.
-        #  HARD TO TEST AT THE MOMENT!
-        #
-        #
-        self.bogus_taps=Numeric.zeros(1024,Numeric.Complex64)
-
-        # Now create the FFT filter using the bogus taps
-        self.dispfilt = gr.fft_filter_ccc(1, self.bogus_taps)
-
-        # ...and set our "real" filter taps
-        self.dispfilt.set_taps(self.disp_taps)
+        # Now create the FFT filter using the computed taps
+        self.dispfilt = gr.fft_filter_ccc(1, self.disp_taps)
 
         #
         # Audio sink
@@ -659,6 +649,8 @@
 
             # Now that we're adjusted, compute a new dispfilter, and
             #   set the taps for the FFT filter.
+            ntaps = self.compute_disp_ntaps(self.dm, self.bw, 
self.observing_freq)
+            self.disp_taps = Numeric.zeros(ntaps, Numeric.Complex64)
             self.compute_dispfilter(self.dm,self.doppler,self.bw,
                 self.observing_freq)
             self.dispfilt.set_taps(self.disp_taps)
@@ -995,6 +987,8 @@
     def set_dm(self,dm):
        self.dm = dm
 
+       ntaps = self.compute_disp_ntaps (self.dm, self.bw, self.observing_freq)
+       self.disp_taps = Numeric.zeros(ntaps, Numeric.Complex64)
        
self.compute_dispfilter(self.dm,self.doppler,self.bw,self.observing_freq)
        self.dispfilt.set_taps(self.disp_taps)
        self.myform['DM'].set_value(dm)
@@ -1009,6 +1003,8 @@
     def set_doppler(self,doppler):
        self.doppler = doppler
 
+       ntaps = self.compute_disp_ntaps (self.dm, self.bw, self.observing_freq)
+       self.disp_taps = Numeric.zeros(ntaps, Numeric.Complex64)
        
self.compute_dispfilter(self.dm,self.doppler,self.bw,self.observing_freq)
        self.dispfilt.set_taps(self.disp_taps)
        self.myform['Doppler'].set_value(doppler)
@@ -1075,7 +1071,6 @@
 
     #
     # Compute minimum number of taps required in de-dispersion FFT filter
-    # We always return a power of 2, to keep the FFT efficient
     #
     def compute_disp_ntaps(self,dm,bw,freq):
         #
@@ -1090,25 +1085,15 @@
         # Compute smear time
         Dt = dm/2.41e-4 * (1.0/(f_lower*f_lower)-1.0/(f_upper*f_upper))
 
-        # Taps is now bandwidth*smeartime*2
-        ntaps = bw*Dt*2
-        x = 1
-        # Compute log2(ntaps)
-        for i in range(0,22):
-            if x > ntaps:
-               logn = i
-               break
-            x *= 2
-
-        # FFT length made a power of 2 for efficiency
-        x = 2**(logn)
-        if (x < 256):
-           x =  256
-
-        return(int(x))
+        # ntaps is now bandwidth*smeartime
+        # Should be bandwidth*smeartime*2, but the Gnu Radio FFT filter
+        #   already expands it by a factor of 2
+        ntaps = bw*Dt
+        print "Dedisp requires ", ntaps, "taps"
+        return(int(ntaps))
 
 def main ():
-    app = stdgui.stdapp(app_flow_graph, "RADIO ASTRONOMY PULSAR RECEIVER: 
$Revision: 1.3 $", nstatus=1)
+    app = stdgui.stdapp(app_flow_graph, "RADIO ASTRONOMY PULSAR RECEIVER: 
$Revision: 1.4 $", nstatus=1)
     app.MainLoop()
 
 if __name__ == '__main__':




reply via email to

[Prev in Thread] Current Thread [Next in Thread]