Ich teste den Costas -Schleifenblock in Gnuradio (Version 3.8.x) mit einem einfachen Sinuswellensignal. Es wird erwartet, dass die Costas -Schleife die Phase auf einen bekannten Wert sperrt (idealerweise 0 für ein perfektes Signal), aber die Ausgangsphase ist falsch. < /P>
Setup: < /p>
Signal source: Sine wave at a known frequency (1 kHz)
Costas loop bandwidth: 0.05
Testing for phase locking using a perfect signal (no phase shift)
Expected output: Phase should stabilize at 0 for a perfect signal.
< /code>
Code: < /p>
int main() {
auto tb = gr::make_top_block("costas_loop_test");
double samp_rate = 32000;
double freq = 1000;
float loop_bw = 0.05; // Costas loop bandwidth
int order = 4;
// Signal source: complex sine wave
auto src = gr::analog::sig_source_c::make(samp_rate,
gr::analog::GR_SIN_WAVE,
freq,
1.0,
0.0); // Phase set to 0
auto costas = gr::digital::costas_loop_cc::make(loop_bw, order);
auto mag_block = gr::blocks::complex_to_mag::make();
auto phase_block = gr::blocks::complex_to_arg::make();
auto mag_probe = gr::blocks::probe_signal_f::make();
auto phase_probe = gr::blocks::probe_signal_f::make();
auto sink = gr::blocks::null_sink::make(sizeof(float));
// Connect the flowgraph
tb->connect(src, 0, costas, 0); // Source -> Costas Loop
tb->connect(costas, 0, mag_block, 0); // Costas -> Magnitude Block
tb->connect(costas, 0, phase_block, 0); // Costas -> Phase Block
tb->connect(mag_block, 0, mag_probe, 0); // Magnitude -> Probe
tb->connect(phase_block, 0, phase_probe, 0); // Phase -> Probe
tb->connect(mag_block, 0, sink, 0); // Magnitude -> Sink (output)
tb->start();
std::cout level();
float phase = phase_probe->level(); // Phase (should stabilize near 0 for perfect signal)
std::cout
Costas -Loop -Block in Gnuradio 3.8, der die Phase nicht korrekt auf einem perfekten Signal sperle ⇐ C++
-
- Similar Topics
- Replies
- Views
- Last post