Correct representation of FFT from complex signal acquired through spectrum analyzer
41 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
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
0 comentarios
Respuestas (2)
Sai Kiran
el 9 de Mzo. de 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.
0 comentarios
nassos
el 11 de Mzo. de 2023
Editada: nassos
el 11 de Mzo. de 2023
3 comentarios
Sai Kiran
el 16 de Mzo. de 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!
Ver también
Categorías
Más información sobre Multirate Signal Processing en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!