From: trondeau Date: Tue, 24 Apr 2007 21:34:27 +0000 (+0000) Subject: using LPF taps for interpolator and decimator now and adding documentation to wrapper... X-Git-Url: https://git.gag.com/?a=commitdiff_plain;h=33f10c531765a2bcec83c1bc34ab34774b85c63b;p=debian%2Fgnuradio using LPF taps for interpolator and decimator now and adding documentation to wrapper class git-svn-id: http://gnuradio.org/svn/gnuradio/trunk@5097 221aa14e-8319-0410-a670-987f0aec2ac5 --- diff --git a/gr-cvsd-vocoder/src/python/cvsd.py b/gr-cvsd-vocoder/src/python/cvsd.py index dcb6bb50..e1638f37 100644 --- a/gr-cvsd-vocoder/src/python/cvsd.py +++ b/gr-cvsd-vocoder/src/python/cvsd.py @@ -24,12 +24,26 @@ from gnuradio import gr from gnuradio.vocoder import cvsd_vocoder class cvsd_encode(gr.hier_block): - def __init__(self, fg, resample=8): + ''' + This is a wrapper for the CVSD encoder that performs interpolation and filtering + necessary to work with the vocoding. It converts an incoming float (+-1) to a short, scales + it (to 32000; slightly below the maximum value), interpolates it, and then vocodes it. + + The incoming sampling rate can be anything, though, of course, the higher the sampling rate and the + higher the interpolation rate are, the better the sound quality. + ''' + + def __init__(self, fg, resample=8, bw=0.5): + ''' + When using the CVSD vocoder, appropriate sampling rates are from 8k to 64k with resampling rates + from 1 to 8. A rate of 8k with a resampling rate of 8 provides a good quality signal. + ''' scale_factor = 32000.0 self.interp = resample src_scale = gr.multiply_const_ff(scale_factor) - interp = gr.interp_fir_filter_fff(self.interp, self.interp*(1,)) + taps = gr.firdes.low_pass(self.interp, self.interp, bw, 2*bw) + interp = gr.interp_fir_filter_fff(self.interp, taps) f2s = gr.float_to_short() enc = cvsd_vocoder.encode_sb() @@ -38,13 +52,27 @@ class cvsd_encode(gr.hier_block): class cvsd_decode(gr.hier_block): - def __init__(self, fg, resample=8): + ''' + This is a wrapper for the CVSD decoder that performs decimation and filtering + necessary to work with the vocoding. It converts an incoming CVSD-encoded short to a float, decodes it + to a float, decimates it, and scales it (by 32000; slightly below the maximum value to avoid clipping). + + The sampling rate can be anything, though, of course, the higher the sampling rate and the + higher the interpolation rate are, the better the sound quality. + ''' + + def __init__(self, fg, resample=8, bw=0.5): + ''' + When using the CVSD vocoder, appropriate sampling rates are from 8k to 64k with resampling rates + from 1 to 8. A rate of 8k with a resampling rate of 8 provides a good quality signal. + ''' scale_factor = 32000.0 self.decim = resample dec = cvsd_vocoder.decode_bs() s2f = gr.short_to_float() - decim = gr.fir_filter_fff(self.decim, (1,)) + taps = gr.firdes.low_pass(1, 1, bw, 2*bw) + decim = gr.fir_filter_fff(self.decim, taps) sink_scale = gr.multiply_const_ff(1.0/scale_factor) fg.connect(dec, s2f, decim, sink_scale)