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, click on the “Follow” button that appears to the lower right of a post:

### 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.

### Suggestions?

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

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.

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. 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?)

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.

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.

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 samples and your FAM uses channels, then the resolution product is . So make 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 is fixed in some application, you may be able to increase the resolution product by decreasing .

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

Does that help?

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.