discuss-gnuradio
[Top][All Lists]
Advanced

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

Re: [Discuss-gnuradio] Weaver SSB (was: gr.firdes_hilbert () usage)


From: Matt Ettus
Subject: Re: [Discuss-gnuradio] Weaver SSB (was: gr.firdes_hilbert () usage)
Date: Fri, 26 Nov 2004 14:50:26 -0800
User-agent: Internet Messaging Program (IMP) 4.0-cvs

That should work.  But you don't need to have 2 filters on each side.  You could
combine lpf1i with lpf2i.  Same for the q side.

Matt



Quoting cswiger <address@hidden>:

> Ok gang - this might be horribly inefficient but hey, it seems to work.
> Working from figure 8 in:
> <www.semiconductors.philips.com/acrobat_download/applicationnotes/AN1981.pdf>
> Their LO frequencies were confusing at first (7.2?) - but their quadrature
> generators are divide-by-four. (1.8Khz)
>
> -----------------------------------------
>
> #!/usr/bin/env python
> #
> #                    Weaver SSB demodulation
> #
> #
> #                 rf_loi                   af_loi
> #                   |                        |
> #            |-----(X)---[lpf1i]--[lpf2i]---(X)---|
> #            |   rf_mixi                  af_mixi |
> #            |                                    |
> # signal ----|                                   (+)----- ssb_demod
> #            |                                    |
> #            |   rf_mixq                  af_mixq |
> #            |-----(X)---[lpf1q]--[lpf2q]---(X)---|
> #                   |                        |
> #                 rf_loq                   af_loq
> #
>
> from gnuradio import gr
> import sys
>
> def build_graph ():
>
>     rf_LO = 501.8e3
>     af_LO = 1.8e3
>
>     signal = 501.5e3  # passband is 500-503.6 Khz USB
>
>     rf_sample_rate = 8e6
>     af_sample_rate = 32e3
>
>     fir_decimation = (long)(rf_sample_rate / af_sample_rate)
>
>     fg = gr.flow_graph ()
>
>     src = gr.sig_source_f (rf_sample_rate,gr.GR_SIN_WAVE,signal,1.0,0)
>
>     rf_loi = gr.sig_source_f (rf_sample_rate,gr.GR_COS_WAVE,rf_LO,1.0,0)
>     rf_loq = gr.sig_source_f (rf_sample_rate,gr.GR_SIN_WAVE,rf_LO,1.0,0)
>     af_loi = gr.sig_source_f (af_sample_rate,gr.GR_COS_WAVE,af_LO,1.0,0)
>     af_loq = gr.sig_source_f (af_sample_rate,gr.GR_SIN_WAVE,af_LO,1.0,0)
>
>     rf_mixi = gr.multiply_ff ()
>     rf_mixq = gr.multiply_ff ()
>
>     lpf1_taps = gr.firdes.low_pass ( \
>            1.0, rf_sample_rate, 160e3, 100e3, gr.firdes.WIN_HAMMING)
>     lpf1i = gr.fir_filter_fff (fir_decimation, lpf1_taps)
>     lpf1q = gr.fir_filter_fff (fir_decimation, lpf1_taps)
>     lpf2_taps = gr.firdes.low_pass ( \
>            1.0, af_sample_rate, 1.8e3, 100, gr.firdes.WIN_HAMMING)
>     lpf2i = gr.fir_filter_fff (1, lpf2_taps)
>     lpf2q = gr.fir_filter_fff (1, lpf2_taps)
>
>     af_mixi = gr.multiply_ff ()
>     af_mixq = gr.multiply_ff ()
>
>     sum = gr.add_ff ()
>
>     out = gr.file_sink (gr.sizeof_float, "ssb_demod")
>
>     fg.connect (src, (rf_mixi, 0))
>     fg.connect (rf_loi, (rf_mixi, 1))
>     fg.connect (rf_mixi, lpf1i)
>     fg.connect (lpf1i, lpf2i)
>     fg.connect (lpf2i, (af_mixi, 0))
>     fg.connect (af_loi, (af_mixi, 1))
>     fg.connect (af_mixi, (sum, 0))
>
>     fg.connect (src, (rf_mixq, 0))
>     fg.connect (rf_loq, (rf_mixq, 1))
>     fg.connect (rf_mixq, lpf1q)
>     fg.connect (lpf1q, lpf2q)
>     fg.connect (lpf2q, (af_mixq, 0))
>     fg.connect (af_loq, (af_mixq, 1))
>     fg.connect (af_mixq, (sum, 1))
>
>     fg.connect (sum, out)
>
>     return fg
>
> def main ():
>
>     fg = build_graph ()
>
>
>     # fg.run ()
>
>     fg.start ()
>     raw_input ('Press Enter to quit: ')
>     fg.stop ()
>
> if __name__ == '__main__':
>     main ()
>
>
>
>
> _______________________________________________
> Discuss-gnuradio mailing list
> address@hidden
> http://lists.gnu.org/mailman/listinfo/discuss-gnuradio
>






reply via email to

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