Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Typo's + Question #97

Open
wants to merge 6 commits into
base: master
Choose a base branch
from
Open

Typo's + Question #97

wants to merge 6 commits into from

Conversation

lejafar
Copy link
Contributor

@lejafar lejafar commented Aug 3, 2017

Hi Joseph!

Besides the typo's I wanted to ask you for any reference or reasoning that went into picking these bandwidth calculating factors inside symtrack.c, or is it solely based on experience?

// set bandwidths accordingly
// TODO: set bandwidths based on input bandwidth
float agc_bandwidth     = 0.02f  * _bw;
float symsync_bandwidth = 0.001f * _bw;
float eq_bandwidth      = 0.02f  * _bw;
float pll_bandwidth     = 0.001f * _bw;

What also got me going for a while is the following statement inside modem_qam.c

EDIT: after dubble checking it does gives the expected result so I must have looked over something

// re-modulate symbol (subtract residual) and store state
_q->x_hat = _x - (res_i + _Complex_I*res_q);

Because the value that is put into _q->x_hat is not an estimate or re-modulation of _x right? For 16-QAM, the thing that is being put into res_i is cimagf(_x) - _ref[1] - _ref[0] , same for res_q and crealf(_x). Because _ref[0] is just 0, _q->x_hat will contain _ref[1], but that still works as an indication of the error calculated by modem_get_demodulator_evm, so that might be how it is supposed to be?

Thanks in advance!

@jgaeddert
Copy link
Owner

lejafar, Mostly just experience. The tricky part about having multiple control loops within one another is that they can cause instability. See, for example, the symtrack object's loop here at http://liquidsdr.org/doc/symtrack/:

symtrack_cccf diagram

The remodulated symbol value is a bit of ugly code... but I didn't come up with a better way to handle it so that's what I ended up committing. Thanks!

@jgaeddert
Copy link
Owner

with respect to the unused num_symbols variable, my original intent was to use that as a way to determine when to stop the loop, rather than the number of samples. It's actually the number of symbols that determines loop convergence as the signal could be highly over-sampled (many samples, but few symbols).

@lejafar
Copy link
Contributor Author

lejafar commented Aug 10, 2017

Thanks for the clarification! And thanks for making this awesome library and putting together all the examples and documentation, it really helped me a lot in understanding how some of these DSP elements are implemented!

@jgaeddert
Copy link
Owner

You're absolutely welcome! It's been a lot of fun working on this, but I know liquid-dsp has a long, long way to go!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants