# How to estimate the average distance between peaks (maxima) of the magnitude of an OFDM signal?

Given an arbitrary configuration of carriers having bandwidths that belong to the 3GPP standard (5, 10, 15, 20, 25, 30, 35, 40, 50, ..., 100 MHz), is there a method/rule-of-thumb to estimate the distance between successive maxima of the magnitude of the resulting time domain OFDM signal? This is what I have tried so far, but the measured and the estimated (by my method) outputs don't match.

The steps are as followed (using MATLAB):

• Measured:

1. Compute the magnitude of the OFDM signal in the time-domain
2. Use findpeaks() to determine the positions (on the abscissa) of the maxima.
3. Differentiate (using diff()) the resulting vector to compute the distances (I call the resulting vector distPks)
4. Display distPks in a histogram. If the histogram shows a suspicious number of distances that are very small, those are due to some undesired phenomenon (interpolators) and I remove them.
5. Compute mean(distPks) and that is my measured value.
• Estimated:

1. Compute the Expected Value of the power spectrum. This value is not the mean, but a specific frequency that, according to the intuitive interpretation of the Expected Value, can be thought of as the "center of mass" of the carriers distribution energy. I hoped that this single frequency measure would "represent" the main periodic component in the OFDM signal and therefore I hoped to extract its period from that (the distance between peaks).

My problem: the two methods don't match. The estimated value is 3 times the measured value.

My experiment: I have tried the configuration of one 100 MHz carrier centered at 0Hz + one 20 MHz carrier centered at +160 MHz. Sampling frequency is 500 MHz.

Thanks to everyone in advance.

@DanBoschen, but I am not asking as much as mathematical periodicity, just an approximate relationship between carrier configuration and average distance between maxima. As you know, OFDM signals are built by taking the IFFT of subcarriers placed at specific frequency bins. Their amplitude and phases are taken from the constellation sets corresponding to specific modulation schemes.

Probably the following MATLAB example is too simple, but I would like you to take a look and comment it anyway, please:

n = 0:1000-1;
f1 = 0.01;
f2 = 0.03;
f3 = 0.05;
phi = randn(1,3);
a = randn(1,3);
y = a(1)*sin(2*pi*f1*n+phi(1)) + a(2)*sin(2*pi*f2*n+phi(2)) + a(3)*sin(2*pi*f3*n+phi(3));
plot(n,y);


You can see that as long as the frequencies are fixed, an average distance between peaks seems to be consistent in all the runs of the script. The real case just contains more frequencies but, on the other hand, the amplitudes and phases belong to a small finite set of values. Thanks.

• With random data I would not expect there to be a periodic component between the peaks as the OFDM signal would approach a Gaussian distribution, have you been able to extract a consistent period? Aug 13 at 11:17
• May I know why you ask the question? What do you intend to do? Aug 13 at 12:39
• @DanBoschen good point. I have tried shuffling the seed and with different simulation lengths (therefore number of samples). The results seem consistent (I get the same results, within some margin of course). Aug 14 at 20:07
• @Matteo I have trouble seeing how there can be any periodicity if the data is truly random. Perhaps I am discounting the effect of pilots or preamble but thinking how a peak in time would be due to alignment of the subcarrier bins in phase which shouldn’t be repeatable from symbol to symbol - could you post some more details (and plots if possible) showing your experimental set up and results? Aug 15 at 14:30
• Matteo, 1.- shouldn't you be using power not amplitude: instead of plot(n,y) try Py=y.*conj(y);plot(n,Py); 2.-I understand that 2 * pi * f * n looks ok, that it looks easier, but why don't you use the actual f1 f2 f3 values, and build a time reference vector to use it building in turn signal y? 3.- the output of randn can hardly simulate QAM QPSK or for the matter any digital simulation. Sep 20 at 16:03

## 1 Answer

1. How exactly are you getting a single frequency from the spectrum's mean value (or Expected Value, however you want to call it, I'm guessing you're doing an average to compute it)? Wouldn't multiple frequency bins correspond to that value? How do you then choose which corresponds to your main component?
2. Regardless of the validity of your method, wouldn't you want to take the location at the spectrum maximum? If you're looking for the "main" periodic component, that's where it would be in the frequency domain...
• The method I use is: I compute the power spectrum density, then I normalize it through scaling in such a way that the area under it (the average power of the signal) is 1 . By doing this, I make the PSD function compliant to a probability mass density function (since it is non-negative as well). I compute the Expected value with the definition (sum(values_abscissa .* values of the pmf)), so I get a single value corresponding to a frequency. Then I use such frequency to estimate the number of samples between maxima of the corresponding sinusoid. Aug 14 at 20:13
• I don't want to take just the maximum, because it does not convey the contribution of all the components of the signal, I think. My approach based on the expected value of the PSD would, theoretically, include the contributions of all the sub-carriers weighted by their height (their PSD indeed). For example if I increase a lot the PSD of the narrower 20 MHz carrier, its contribution is much clearly visible on the time-domain waveform. Aug 14 at 20:17
• Ok, what you're saying makes more sense to me now, I think. Contrary to your OP, you're not looking for the "main component", which is part of my confusion because that would be the frequency at the PSD maximum. You're trying to translate to the frequency domain the time-domain approach of averaging the local maxima distances. That's an interesting approach, I've never used this "Expected Value of the PSD" before, but I could see some utilities for feature extraction for example. Let's see if anyone has an answer for you, I'll be interested to see what comes out :)
– Jdip
Aug 14 at 21:04
• @Matteo got any results? I would be interested in knowing if you ever solved this
– Jdip
Aug 24 at 13:59