Matlab FFT differs from theory and oscilloscope

11 次查看(过去 30 天)
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 个评论
Alexander Engeln
Alexander Engeln 2021-4-12
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 2021-4-12
编辑:G A 2021-4-12
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).

请先登录,再进行评论。

采纳的回答

Matt J
Matt J 2021-4-12
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 个评论
Matt J
Matt J 2021-4-14
编辑:Matt J 2021-4-14
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

请先登录,再进行评论。

更多回答(0 个)

标签

Community Treasure Hunt

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

Start Hunting!

Translated by