[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Commit-gnuradio] gnuradio-core/src lib/filter/gr_adaptive_fir_cc...
From: |
Johnathan Corgan |
Subject: |
[Commit-gnuradio] gnuradio-core/src lib/filter/gr_adaptive_fir_cc... |
Date: |
Tue, 04 Jul 2006 21:28:12 +0000 |
CVSROOT: /sources/gnuradio
Module name: gnuradio-core
Changes by: Johnathan Corgan <jcorgan> 06/07/04 21:28:12
Modified files:
src/lib/filter : gr_adaptive_fir_ccf.cc gr_cma_equalizer_cc.cc
gr_cma_equalizer_cc.h
src/python/gnuradio/blksimpl: fm_demod.py
Log message:
Continued work in progress on constant modulus filter.
Implemented simple CMA(1,2) error calculation and update. Difficult to
find stable values of mu for NBFM channels, but fm_demod.py has a
commented out CMA block to experiment with.
CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/gnuradio-core/src/lib/filter/gr_adaptive_fir_ccf.cc?cvsroot=gnuradio&r1=1.1&r2=1.2
http://cvs.savannah.gnu.org/viewcvs/gnuradio-core/src/lib/filter/gr_cma_equalizer_cc.cc?cvsroot=gnuradio&r1=1.1&r2=1.2
http://cvs.savannah.gnu.org/viewcvs/gnuradio-core/src/lib/filter/gr_cma_equalizer_cc.h?cvsroot=gnuradio&r1=1.1&r2=1.2
http://cvs.savannah.gnu.org/viewcvs/gnuradio-core/src/python/gnuradio/blksimpl/fm_demod.py?cvsroot=gnuradio&r1=1.4&r2=1.5
Patches:
Index: lib/filter/gr_adaptive_fir_ccf.cc
===================================================================
RCS file:
/sources/gnuradio/gnuradio-core/src/lib/filter/gr_adaptive_fir_ccf.cc,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -b -r1.1 -r1.2
--- lib/filter/gr_adaptive_fir_ccf.cc 4 Jul 2006 07:20:52 -0000 1.1
+++ lib/filter/gr_adaptive_fir_ccf.cc 4 Jul 2006 21:28:12 -0000 1.2
@@ -68,8 +68,11 @@
// Adjust taps
d_error = error(sum);
- for (k = 0; k < l; k++)
+ for (k = 0; k < l; k++) {
+ //printf("%f ", d_taps[k]);
update_tap(d_taps[l-k-1], in[j+k]);
+ }
+ //printf("\n");
j += decimation();
}
Index: lib/filter/gr_cma_equalizer_cc.cc
===================================================================
RCS file:
/sources/gnuradio/gnuradio-core/src/lib/filter/gr_cma_equalizer_cc.cc,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -b -r1.1 -r1.2
--- lib/filter/gr_cma_equalizer_cc.cc 4 Jul 2006 07:20:52 -0000 1.1
+++ lib/filter/gr_cma_equalizer_cc.cc 4 Jul 2006 21:28:12 -0000 1.2
@@ -36,5 +36,6 @@
: gr_adaptive_fir_ccf("cma_equalizer_cc", 1, std::vector<float>(num_taps)),
d_modulus(modulus), d_mu(mu)
{
- d_taps[0] = 1.0; // Initial tap causes identity mapping
+ d_taps[0] = 1.0;
}
+
Index: lib/filter/gr_cma_equalizer_cc.h
===================================================================
RCS file: /sources/gnuradio/gnuradio-core/src/lib/filter/gr_cma_equalizer_cc.h,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -b -r1.1 -r1.2
--- lib/filter/gr_cma_equalizer_cc.h 4 Jul 2006 07:20:52 -0000 1.1
+++ lib/filter/gr_cma_equalizer_cc.h 4 Jul 2006 21:28:12 -0000 1.2
@@ -40,25 +40,24 @@
private:
float d_modulus;
float d_mu;
+ float d_decay;
friend gr_cma_equalizer_cc_sptr gr_make_cma_equalizer_cc(int num_taps, float
modulus, float mu);
gr_cma_equalizer_cc(int num_taps, float modulus, float mu);
protected:
- virtual float error(const gr_complex &out);
- virtual void update_tap(float &tap, const gr_complex &in);
+
+ virtual float error(const gr_complex &out)
+ {
+ return (d_modulus - norm(out));
+ }
+
+ virtual void update_tap(float &tap, const gr_complex &in)
+ {
+ tap += d_mu*d_error*abs(in);
+ }
public:
};
-inline float gr_cma_equalizer_cc::error(const gr_complex &out)
-{
- return 0.0; // Not implemented
-}
-
-inline void gr_cma_equalizer_cc::update_tap(float &tap, const gr_complex &in)
-{
- tap += 0.0; // Not implemented
-}
-
#endif
Index: python/gnuradio/blksimpl/fm_demod.py
===================================================================
RCS file:
/sources/gnuradio/gnuradio-core/src/python/gnuradio/blksimpl/fm_demod.py,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -b -r1.4 -r1.5
--- python/gnuradio/blksimpl/fm_demod.py 4 Jul 2006 07:20:52 -0000
1.4
+++ python/gnuradio/blksimpl/fm_demod.py 4 Jul 2006 21:28:12 -0000
1.5
@@ -52,9 +52,15 @@
def __init__(self, fg, channel_rate, audio_decim, deviation,
audio_pass, audio_stop, gain=1.0, tau=75e-6):
- # Equalizer for 250 us delay
- CMA = gr.cma_equalizer_cc(int(channel_rate/4000), 0.5, 0.0001);
-
+"""
+ # Equalizer for ~100 us delay
+ delay = 100e-6
+ num_taps = int(channel_rate*delay)
+
+ mu = 1e-4/num_taps
+ print "CMA: delay =", delay, "n =", num_taps, "mu =", mu
+ CMA = gr.cma_equalizer_cc(num_taps, 1.0, mu)
+"""
k = channel_rate/(2*pi*deviation)
QUAD = gr.quadrature_demod_cf(k)
@@ -68,11 +74,11 @@
if tau is not None:
DEEMPH = fm_deemph(fg, channel_rate, tau)
- fg.connect(CMA, QUAD, DEEMPH, LPF)
+ fg.connect(QUAD, DEEMPH, LPF)
else:
- fg.connect(CMA, QUAD, LPF)
+ fg.connect(QUAD, LPF)
- gr.hier_block.__init__(self, fg, CMA, LPF)
+ gr.hier_block.__init__(self, fg, QUAD, LPF)
class demod_20k0f3e_cf(fm_demod_cf):
"""
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Commit-gnuradio] gnuradio-core/src lib/filter/gr_adaptive_fir_cc...,
Johnathan Corgan <=