Matlab FFT differs from theory and oscilloscope

9 Ansichten (letzte 30 Tage)
Alexander Engeln
Alexander Engeln am 12 Apr. 2021
Kommentiert: Alexander Engeln am 14 Apr. 2021
Hello together,
I am currently trying to reproduce simple results from my oscilloscope-FFT. I generated a simple sine wave signal with 300 MHz Frequency and used a simple rectangular window: the voltage data u1 range in time from -10 Microseconds to 10 Microseconds.
Why does the Matlab FFT show the windowing effect and the integral and the oscilloscope not? I am kind of worried since I rather trust the oscilloscope than I trust the Matlab FFT... Have I forgot something essential?
I am running out of ideas and would be happy for some help. The code:
close all
clear
% Import Oscilloscope Data
modus = "sinus";
m = importdata("C1--" + modus + "--00000.dat");
time = m(1:end-1,1);
N = size(time,1);
u1 = m(1:end-1,2);
% Determine Frequencies
DeltaT = (time(size(time,1))-time(1))/(N-1);
Fs = 1/DeltaT;
df = Fs/(N-1);
f_four = (0:df:Fs/2)';
% Theoretical DFT
B1 = zeros(size(f_four,1),1);
for f=1:size(f_four,1)
disp(f)
B1(f) = 2*sum(u1.*exp(-1i*time*f_four(f)*2*pi)/N);
end
% Matlab FFT
Bh2 = fft(u1)/N;
Bh2 = fftshift(Bh2);
B2 = 2*Bh2((N+1)/2:end);
% Plot
f_compare = importdata("F1--" + modus + "-rechteck--00000.dat"); % Oscilloscope FFT
figure(1)
plot(f_four/1e06, 20*log10(abs(B1)), f_four/1e06, 20*log10(abs(B2)), f_compare(:,1)/1e06, 20*log10(f_compare(:,2)));
set(gca, 'FontSize', 14);
axis([250 350 -300 0]);
legend('Fourier Integral', 'Matlab-FFt', 'Oscilloscope', 'Location', 'southwest');
xlabel('$\textit{f}$ in MHz', 'Interpreter', 'Latex');
ylabel('dBV');
Thank you in advance!
  4 Kommentare
Alexander Engeln
Alexander Engeln am 12 Apr. 2021
To the first comment:
Okay, interesting, when using the indizes like
timediscrete = linspace(-(N-1)/2,(N-1)/2, N)';
for f=1:size(f_four,1)
disp(f)
B1(f) = 2*sum(u1.*exp(-1i*timediscrete*f*2*pi/N)/N);
end
I get the same result as the Matlab FFT. But I am still questioning myself whether the oscilloscope is right or this function...
To the second comment:
The Factor of 2 is necessary since the peak coincides only with a factor of 2. Therefore it should not be a problem of wrong normalization, the shape of the curve is broader and can't be scaled to the shape of the other curve. But it is interesting that the total energy of all three spectra is the same!
G A
G A am 12 Apr. 2021
Bearbeitet: G A am 12 Apr. 2021
I thought may be difference comes from the different number of points when you calculate theoretically and when you do fft(), i.e. length(u1) is twice larger than length(f_four).

Melden Sie sich an, um zu kommentieren.

Akzeptierte Antwort

Matt J
Matt J am 12 Apr. 2021
Is the oscilloscope computing the FFT, or is it trying to compute a continuous Fourier transform approximation? If the latter, it should differ from the FFT by a factor of DeltaT.
  6 Kommentare
Matt J
Matt J am 14 Apr. 2021
Bearbeitet: Matt J am 14 Apr. 2021
Maybe you can have a look whether I get it right?
Here is how I would set things up,
N=5;
T=10;
dT=T/(N-1) %time sampling interval
dT = 2.5000
dF=1/dT/N %frequency sampling interval
dF = 0.0800
NormalizedAxis= (0:N-1) -ceil((N-1)/2);
time_axis=NormalizedAxis*dT
time_axis = 1×5
-5.0000 -2.5000 0 2.5000 5.0000
frequency_axis=NormalizedAxis*dF
frequency_axis = 1×5
-0.1600 -0.0800 0 0.0800 0.1600
Alexander Engeln
Alexander Engeln am 14 Apr. 2021
Thank you so much!

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Tags

Community Treasure Hunt

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

Start Hunting!

Translated by