Costas Loop: Difference between revisions
No edit summary |
|||
(7 intermediate revisions by 3 users not shown) | |||
Line 1: | Line 1: | ||
[[Category:Block Docs]] | [[Category:Block Docs]] | ||
A Costas loop carrier recovery module. 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=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: | |||
# stream 1 (required) is the baseband I and Q; | |||
# 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. | J. Feigin, "Practical Costas loop design: Designing a simple and inexpensive BPSK Costas loop carrier recovery circuit," RF signal processing, pp. 20-36, 2002. | ||
Line 11: | Line 24: | ||
; Order | ; Order | ||
: The loop order, either 2, 4, or 8 | : The loop order, either 2, 4, or 8, see above. | ||
; Use SNR | ; Use SNR | ||
Line 18: | Line 31: | ||
== Example Flowgraph == | == Example Flowgraph == | ||
See [[QPSK_Mod_and_Demod#Phase_and_Frequency_Correction]] | |||
== Source Files == | == Source Files == | ||
; C++ files | ; C++ files | ||
: [https://github.com/gnuradio/gnuradio | : [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 | : [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 | : [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 | : [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:
- stream 1 (required) is the baseband I and Q;
- 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