Costas Loop: Difference between revisions

From GNU Radio
Jump to navigation Jump to search
 
(3 intermediate revisions by 2 users not shown)
Line 2: Line 2:
A Costas loop carrier recovery module, great for synchronizing to BPSK, QPSK, and 8PSK.  The Costas loop locks to the center frequency of a signal and downconverts it to baseband.
A Costas loop carrier recovery module, great for synchronizing to BPSK, QPSK, and 8PSK.  The Costas loop locks to the center frequency of a signal and downconverts it to baseband.
* When order=2: used for BPSK where the real part of the output signal is the baseband BPSK signal and the imaginary part is the error signal.
* When order=2: used for BPSK where the real part of the output signal is the baseband BPSK signal and the imaginary part is the error signal.
* When order=4: can be used for QPSK where both I and Q (real and imaginary) are outputted.
* When order=4: can be used for QPSK where both I and Q (real and imaginary) are output.
* When order=8: used for 8PSK.
* When order=8: used for 8PSK.


Line 10: Line 10:


There is a single optional message input for a noise floor estimate used to calculate the SNR of a sample.  
There is a single optional message input for a noise floor estimate used to calculate the SNR of a sample.  
The block uses 'phase_est' tag generated by the [[Correlation Estimator]]. This helps to correct the phase offset which is crucial for synchronization process.


More details can be found online:
More details can be found online:
Line 29: Line 31:
== Example Flowgraph ==
== Example Flowgraph ==


See [[Guided_Tutorial_PSK_Demodulation#Phase_and_Fine_Frequency_Correction]]
See [[QPSK_Mod_and_Demod#Phase_and_Frequency_Correction]]


== Source Files ==
== Source Files ==


; C++ files
; C++ files
: [https://github.com/gnuradio/gnuradio TODO]
: [https://github.com/gnuradio/gnuradio/blob/main/gr-digital/lib/costas_loop_cc_impl.cc costas_loop_cc_impl.cc]


; Header files
; Header files
: [https://github.com/gnuradio/gnuradio TODO]
: [https://github.com/gnuradio/gnuradio/blob/main/gr-digital/lib/costas_loop_cc_impl.h costas_loop_cc_impl.h]


; Public header files
; Public header files
: [https://github.com/gnuradio/gnuradio TODO]
: [https://github.com/gnuradio/gnuradio/blob/main/gr-digital/include/gnuradio/digital/costas_loop_cc.h costas_loop_cc.h]


; Block definition
; Block definition
: [https://github.com/gnuradio/gnuradio TODO]
: [https://github.com/gnuradio/gnuradio/blob/main/gr-digital/grc/digital_costas_loop_cc.block.yml digital_costas_loop_cc.block.yml]

Latest revision as of 15:02, 9 December 2023

A Costas loop carrier recovery module, great for synchronizing to BPSK, QPSK, and 8PSK. The Costas loop locks to the center frequency of a signal and downconverts it to baseband.

  • When order=2: used for BPSK where the real part of the output signal is the baseband BPSK signal and the imaginary part is the error signal.
  • When order=4: can be used for QPSK where both I and Q (real and imaginary) are output.
  • When order=8: used for 8PSK.

The Costas loop can have two output streams:

  1. stream 1 (required) is the baseband I and Q;
  2. stream 2 (optional) is the normalized frequency of the loop

There is a single optional message input for a noise floor estimate used to calculate the SNR of a sample.

The block uses 'phase_est' tag generated by the Correlation Estimator. This helps to correct the phase offset which is crucial for synchronization process.

More details can be found online:

J. Feigin, "Practical Costas loop design: Designing a simple and inexpensive BPSK Costas loop carrier recovery circuit," RF signal processing, pp. 20-36, 2002.

Parameters

(R): Run-time adjustable

Loop Bandwidth (R)
Internal 2nd order loop bandwidth (~ 2pi/100)
Order
The loop order, either 2, 4, or 8, see above.
Use SNR
Use or ignore SNR estimates (from noise message port) in measurements; also uses tanh instead of slicing.

Example Flowgraph

See QPSK_Mod_and_Demod#Phase_and_Frequency_Correction

Source Files

C++ files
costas_loop_cc_impl.cc
Header files
costas_loop_cc_impl.h
Public header files
costas_loop_cc.h
Block definition
digital_costas_loop_cc.block.yml