Correct representation of FFT from complex signal acquired through spectrum analyzer

50 views (last 30 days)
Hi,
I have the following problem that is bugging me.
I have been given some EM measurements acquired through Keysight's UXR0204A spectrum analyzer.
The measurements are saved in a .mat form and are broken into different batches that vary in frequency from 50 MHz to 640MHz.
For example, the acquired measurements include the following signal frequencies:
M1 [50Mhz - 110MHz]
M2 [155MHz - 215MHz]
...
M10 [580MHz - 640MHz]
The measurements have the time domain signal represented in its complex form:
Y = x + j*z
The .mat file includes also other information like the distance XDelta between the samples, the maximum and minimum frequencies represented inside the signal, etc.
To process the measurements, I want to correctly calculate the sampling frequency of the signal. To do that, I use the equation
Fs = 1/XDelta;
where XDelta is the delta between two consequtive samples of time domain signal. This XDelta is constant through out all of the measurements and results to an Fs = 76.8 MHz.
To the best of my knowledge this happens due to the spectrum analyzer acquiring the measurements through mixing.
This of course creates problems when I am trying to calculate the FFT of the signals, as Nyquist's theorem is violated and I cannot get an accurate representation of the frequency spectrum.
To plot the FFT I am using the following script:
fname = fullfile(path,file);
load(fname);
Fs = (1/XDelta); % sampling frequency
L = size(Y,1); % length of signal / # of buckets to break the frequency domain and number of samples in FFT.
dt = 1/Fs; % time increment (sampling period)
df = Fs/L; % frequency increment
t = (0:L-1)*dt; % time vector (duration of signal in time domain)
% Performing FFT on a trace
Yreal = real(Y);
Yfft = fft(Yreal);
P2 = abs(Yfft)/L; % Normalize the FFT by the length of the time domain signal
P1 = P2(1:L/2+1); % We keep only half of the frequencies up to the Nyquist one (middle)
P1(2:end-1) = 2*P1(2:end-1); % This is a one-sided Fourier transform. To correct for this, I am multiplying the FFT output by 2 to reproduce the amplitude of the original signals.
f = df*(0:(L/2)); % create the frequency vector (frequency X-axis)
figure;
plot(f,P1)
title('Single-Sided Amplitude Spectrum of X(t)')
xlabel('f (Hz)')
ylabel('|P1(f)|')
Can somebody provide any insight (or sources) on how to correctly process this form of measurements?
I am using Matlab R2022a.
Thank you in advance for your help and time!
Kind regards,
Nassos

Answers (2)

Sai Kiran
Sai Kiran on 9 Mar 2023
Hi,
As per my understanding you are unable to view the exact signal due to the low sampling frequency.
Can you try to change the sampling frequency in the Spectrum Analyzer(MATLAB) to the appropriate nyquist sampling frequency?
I hope it helps!
Thanks.

nassos
nassos on 11 Mar 2023
Edited: nassos on 11 Mar 2023
quite close. I am taking measurements of a signal on different frequencies starting from 50 MHz to 600+ MHz.
The measurements have a bandwidth of 60 MHz, but the VSA software of the spectrum analyzer accounts the roll-off effect and multiplies the badwidth by 1.28, thus effectively capturing a bandwidth of 60MHz*1.28 = 76.8MHz, which is effectively my Fs.
So for a center frequency of 80 MHz and a 60 MHz span I measure from 80-(30*1.28) = 41.6 MHz to 80+(30*1.28) = 118.4 MHz, but only capture from 50 MHz to 110 MHz.
The thing is that VSA digitally down-converts the desired measuremnt span, by shifting the frequency to DC, therefore for a measurement from 50Mhz to 110MHz the new frequency range is -30 to 30 MHz. This is what also creates the complex numbers.
To correct that, I will need to shift my data in the Frequency Domain by multiplying the time domain values with a complex number representing the desired frequency shift.
What would that transofrmation be?
Thank you in advance for your help and time.
Kind regards,
Nassos
  3 Comments
nassos
nassos on 15 Mar 2023
Hi Sai @Sai Kiran,
I really appreciate your response.
Wouldn't it be simpler to just multiply the complex representation of my signal Y by a complex number like e^(j*ω), where ω will be the frequency I want to shift to?
What are your thoughts on that?
Thanks!
Sai Kiran
Sai Kiran on 16 Mar 2023
Hi,
Multiplying the time domain signal by a sinusoid of e^(j*w) results in shifting of the signal to desired frequency.
This can be achieved by increasing the sampling frequency(using interpolators) of the input signal and then use mixers(NCO from DSP ToolBox) to shift the input signal to the desired frequency.
Thanks!

Sign in to comment.

Products


Release

R2022a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!