Skip to content

pybert_faq

David Banas edited this page Dec 22, 2023 · 12 revisions

PyBERT FAQ

  1. Why PyBERT?
  2. Why Python?
  3. How can I help?
  4. How do I zoom in on the plots?
  5. How do I find quick help for configuration values?
  6. Where can I find documentation of the source code and API?
  7. Why is performance so terrible when I import a Touchstone file with very low fmin?
  8. Why the move from Anaconda to Miniconda w/ the v4.1.0 release?
  9. What are the new parenthesized Pj/Rj numbers?

Why PyBERT?

Serial communication links are becoming more ubiquitous in electronic system designs at an astonishing rate. Yet, few tools are available for the analysis of such links, and those that are tend to be fairly expensive, certainly beyond the financial means of the average student/hobbyist. I wanted to release a tool into the public domain, which would bring, at least, the fundamental concepts involved in serial communication link design to anyone wishing to explore them, regardless of financial means or professional access.

Why Python?

Because I was proficient in it, because the Traits/UI package is a wonderfully convenient tool for wrapping a GUI around a numerical model, and because, in conjunction with the NumPy and SciPy libraries, Python makes an excellent numerical modeling tool, easily qualifying as a MATLAB substitute and, perhaps, even going beyond MATLAB, due to its inclusion of more modern programming concepts and constructs.

How can I help?

There's plenty to do for the Python coder interested in joining this effort!
Check the current issues list for something that interests you.
Then, follow these steps to make your first contribution:

  1. Fork your own copy of this repository, on GitHub.
  2. Clone your new fork, on your working machine.
  3. Fix the issue and test your fix.
  4. Push your code changes to your GitHub fork.
  5. Send me a Pull Request.

Thanks for your interest in helping out!

How to zoom?

Many of the plots allow zooming, in order to give a closer look at a particular region of the plotted data.
In order to zoom a particular plot:

  • Click your mouse pointer somewhere inside the plot you want to zoom.
  • Type the 'z' key.
  • Click/drag your mouse cursor horizontally, defining your region of interest.

You will notice that some pairs of plots have their horizontal axes updated together. So, for instance, if you zoom in on the master plot, its slave will also zoom into the same region. This was done as a user convenience.

Configuration quick tips

All configuration value entry fields offer "quick tips" on the meaning of that particular configuration parameter. In order to view this help text, hover your mouse pointer over the user data entry field for the parameter of interest for a few seconds.

Source Code Docs

Source code and API documentation is distributed, as part of the standard conda installation, in HTML form. To view this documentation, first identify the root directory of your pybert installation, using this command:

python -c 'import pybert; print(pybert.__file__)'

(Note that there are 2 underscores both before and after the word, "file.")

On my machine this yields:

(pybert64) Davids-Air-2:Projects dbanas$ python -c 'import pybert; print(pybert.__file__)'  
/Users/dbanas/anaconda/envs/pybert64/lib/python2.7/site-packages/pybert/__init__.pyc

Then open the file <root>/doc/_build/html/index.html in your browser, where <root> is the directory containing the __init__.pyc file, which you discovered, above. So, for instance, on my machine I open this file:

/Users/dbanas/anaconda/envs/pybert64/lib/python2.7/site-packages/pybert/doc/_build/html/index.html

When you do this, you should see something that looks like this:

Source Docs Screen Shot

Low Fmin Touchstone

PyBERT isn't very sophisticated about how it chooses the frequency step in the channel frequency response vector it assembles, when importing a Touchstone channel description file. In fact, it simply uses the lowest non-zero frequency value found in the Touchstone data as the frequency step. Therefore, even if your original Touchstone data is not all that voluminous, you can end up with a huge frequency response vector, if you send in Touchstone data with a very low minimum frequency. And this adversely affects performance in the extreme!

You should really consider whether you actually need frequency data below 10 MHz in any Touchstone files you intend for use w/ PyBERT.

Why Miniconda?

With the release of v4.1.0 we changed the installation instructions to suggest Miniconda, instead of Anaconda. We did this for a few reasons:

  1. Miniconda is a bare bones Anaconda installation and takes up much less space on your hard drive. (It is also much easier to remove, should you decide to completely remove any traces of Anaconda from your system.)

  2. Miniconda allows the use of a new dependency constraint solver: LibMamba, which is amazingly fast compared to the old solver. You will notice a substantial reduction in PyBERT installation time, using this new solver.

  3. Some folks wishing to use PyBERT at work have been blocked from doing so, due to the corporate IT policies of their employer, which often bar the installation of Anaconda. We hope to be able to persuade such IT folks that a Miniconda installation is safe, due to its extremely small size, compared to Anaconda.

    Note: If you would like assistance making this argument to your IT folks, please contact David Banas privately at: capn.freako@gmail.com .

Dual Dirac Jitter Values

You'll notice two new (parenthesized) values for Pj and Rj in the PyBERT status bar. These are the dual-Dirac estimates of periodic and "random" jitter, respectively. Note the following:

  1. The dual-Dirac algorithm is applied to total jitter, not the data independent jitter. We made this choice simply because it appeared to us, by our reading of the original dual-Dirac specification, that this was correct.

  2. Due to #1, above, we are continuing to use our original estimate of Rj to extrapolate the bathtub curves. We made this choice, because that Rj estimate comes only from the data independent jitter and we believe that this is more appropriate for estimating "random" jitter (since there's nothing random about data dependent jitter).