Matlab FFT differs from theory and oscilloscope

조회 수: 14 (최근 30일)
Alexander Engeln
Alexander Engeln 2021년 4월 12일
댓글: Alexander Engeln 2021년 4월 14일
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
Alexander Engeln
Alexander Engeln 2021년 4월 14일
Thank you so much!

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

태그

Community Treasure Hunt

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

Start Hunting!

Translated by