Blog Notes and How to Obtain Help with Your CSP Work

The CSP Blog has been getting lots of new visitors these past few months; welcome to all!

Following the CSP Blog

If you want to receive an email each time I publish a new post, look for the Follow Blog via Email widget on the right side of the Blog and enter an email address.


Helping the Signal Processing Community with the CSP Blog

I’ve received several comments and some email lately asking for code that reproduces some of the figures in the posts on the spectral correlation function, cyclic autocorrelation function, and cyclic cumulants. I don’t generally give out code that implements the estimators or even that just plots estimates.

This is mostly a self-help blog. I do spend time answering questions and helping debug readers’ code. I think writing the code yourself, though painful, is the way to learn CSP. And if you learn it well, then you can use it correctly, and I look good too.

New Rule for Getting My Help

I’m also going to use a new rule for providing help. I won’t give advice, answer technical questions, or help debug your code until after you post at least one comment to the blog. So if you start with sending me an email, then you’ll not get the help. This rule will help others benefit from your work.


Since this is a “Blog Notes” post, I also invite you to leave any suggestions for blog improvement or new topics in the comments.

Author: Chad Spooner

I'm a signal processing researcher specializing in cyclostationary signal processing (CSP) for communication signals. I hope to use this blog to help others with their cyclo-projects and to learn more about how CSP is being used and extended worldwide.

10 thoughts on “Blog Notes and How to Obtain Help with Your CSP Work”

  1. I’ve attempted writing some SCF code a few times (I don’t have thaaaat much spare time), but I’ve struggled testing it on real data. I assume because I’ve gotten the resolutions wrong. Is there a good rule of thumb for choosing these? I realise this is probably akin to choosing an FFT resolution where it depends on the data you expect and what features you wish to see. It would be cool if there was a way of determining ideal numbers.

    1. What specific struggle did you experience? Incorrect detected cycle frequencies? No detected cycle frequencies?

      I’ve not yet done a post on the various resolutions inherent in CSP (only the post on the resolution product), but here are a few notes. [Update 2019: Here is the post on temporal, spectral, and cycle-frequency resolutions in CSP.] If you process a block of data T seconds long, the temporal resolution of the estimate is T. The cycle resolution is 1/T. The frequency resolution depends on the estimator. For the FSM, it is the width of the smoothing function, for the TSM it is the reciprocal of the subblock length, and for the SSCA it is the number of channels (strips) times the sampling rate.

      T is chosen by constraints on the collection or simulation, but if you have options, it should be chosen to accommodate the expected SINR for the signal of interest. That is, make T larger for lower SNR or lower SINR. I typically pick the frequency resolution to be around 1-5% of the sampling rate. For the SSCA, this means something like 32, 64, or 128 strips.

      Since the choice of block length and frequency resolution always entails the spectral-analysis trade-off between estimate variability and estimate bias, I’m not sure there is an objective “ideal number(s)” to choose, even when you know a lot about the data. (Is there?)

      1. It was usually just a mess, i.e. no visible/detected cycle frequencies. Just a sea of random noise. It would work when I used your basic examples.

        Ideally, I would like to be able to detect some pool of known modulations, with some lower limit on SNR. Response time is measured in minutes, not sub-seconds, so there are plenty of samples available. There will also be some lower limit on detectable bandwidth. So these things will be known, and I know they will relate to the resolutions chosen.

        What usually throws me is the resolution ratio >> 1. It’s very… vague. But I do understand why it is so.

  2. Hello,
    I’m currently implementing the FAM-Method for cyclic spectral estimation, the code is working, so for a BPSK Signal I’ll get a peak at the correct bitrate in alpha direction.
    But my main issue is now, that between the PSD at alpha=0 and the peak for the bitrate the computed values for the SCF are almost as large as the second peak. This means that there is not a good distinction between the peak and nose between the PSD and the peak.
    My question is now, is there a way to reduce this noise ?
    Thanks for your help in advance, by the way, this is a really cool blog and helped me a lot.

    1. Thanks for the comment Tuomas.

      Well, I’m not sure that your FAM is correct, due to what you report. Since you are using BPSK as your input signal, you know exactly what the ideal spectral correlation function should look like, so you can attempt to determine the correctness of the FAM implementation by performing estimates with high measurement time-bandwidth product. The measurement time-bandwidth product is what I usually call the resolution product (see this post). It is the product of the data-record length and the spectral resolution. If you process N samples and your FAM uses N^\prime channels, then the resolution product is N/N^\prime. So make N large. As it gets larger, if the FAM is correct, all those false features between the bit rate and the PSD should get smaller and smaller.

      When N is fixed in some application, you may be able to increase the resolution product by decreasing N^\prime.

      If you would like, you can send me your plots through email.

      Does that help?

  3. Hey,
    First, many thanks for your answer. Actually I was able to solve the problem by myself. But anyway thanks for your answer.
    The difference between your plots and mine were just the magnitude. As I was used to it from the normal PSD, I worked with a logarithmic magnitude. But after I changed to linear (as you wrote in your plots as well…) I was able to get the same results.
    For the future project I’ll just use logarithmic magnitude, but the linear magnitude was extremely helpful for checking the algorithm for correctness.

  4. Hey,
    I am wondering that is this cyclostationary process suitable for analog modulation scheme such as AM, FM etc

    1. Thanks for stopping by the CSP Blog, Yeni, and leaving a comment. Typical voice amplitude modulation (AM) signals, such as broadcast AM in the 540-1600 kHz band (USA) are cyclostationary signals. They possess a single conjugate cycle frequency equal to the doubled-carrier frequency, and no non-conjugate cycle frequencies. Typical voice frequency modulation (FM) signals, such as broadcast FM in the 88-108 MHz band do not possess useful cyclostationarity. That is, they may possess cycle frequencies, but they are not reliably present and the spectral correlation function is weak relative to the average power of the signal.

  5. Hello,
    I know this website through a paper related to ECG authentication, which analyzed the SCF of ECG signals. But though I have searched a lot from google about “cycle frequency”, I am still now confused about its definition.
    This paper introduced ACF, the correlation between random variables corresponding to two time instants of the random signal. And it introduced how CAF could be extrapolated using Fourier series. But in this step, a new concept alpha, the cycle frequency was introduced, which makes me confused.
    So the first question is, could you please give a definition of cycle frequency in SCF/CAF?
    And also, because the equation referring to SCF given in this paper is for continuous signals. But while coding, the signal data appears with the form of points set with a sampling rate. How could this discrete points set be fed into SCF?
    Thanks a ton!!

    1. Thanks for stopping by the CSP Blog Shukai!

      In CSP, a ‘cycle frequency’ is a Fourier-series frequency, where the Fourier series is applied to the autocorrelation function (your ‘ACF’ I believe). For cyclostationary signals, the ACF is a periodic function, and so is representable as a Fourier series. The Fourier frequencies are renamed ‘cycle frequencies’ and the Fourier coefficients are renamed ‘cyclic autocorrelation functions’ because they depend on the autocorrelation lag \tau.

      To get a more technical (mathematical) view of this, read the following posts in order:

      Cyclic Autocorrelation

      Spectral Correlation

      Cyclic Temporal Cumulants

      Conjugation Configurations

      SO Symmetries

      Estimation of Higher-Order Moments and Cumulants

Leave a Comment, Ask a Question, or Point out an Error