Info
此问题已关闭。 请重新打开它进行编辑或回答。
fft working but end time of waveform distorting result
1 次查看(过去 30 天)
显示 更早的评论
Hi, I am having a problem that my amplitudes are being affected when I change the end time that my waveform is sampled for.
My code is below. If I changed my end time (end_t) then it all goes wrong and my amplitudes are messed up and it doesn't capture every frequency and correct amplitude in the waveform. I am basically extending the end_t so I can capture more of the waveform in the time domain -> this isn't plotted below, only the frequency domain after fft.
Also I am unsure if I should be using L or L2 in the code. It works as is, but if I use L2 it doesn't and if I extend end_t then it goes rapidly down hill. Please can someone advise
%Setup sampling and frequency range
f=( 20.2 : 0.01 : 21.2)*10^9 %frequency range
Fs = 4*max(f) ; %Sample at least 2x max frequency to prevent nyquist folding
Ts = 1/Fs; %sample time
end_t = 10^-7 ; % === EVERYTHING GOES WRONG IF CHANGED ====
dt = 0: Ts : end_t-Ts; %signal duration
%Make evenly spaced cosines within the frequency range
for a = 1:length(f)-1
y(a,:) = 2 * cos (2*pi .*f(a) .* dt);
end
waveform = sum(y); % Make the summed waveform
%Setup fft
L = length(waveform); %length of time domain signal for fft
% L2 = 2^nextpow2(L); %Not sure if I should be using L2 instead of L in below code
f_domain = Fs*(0:L/2-1)/L; %Convert fft samples to frequency
ft = fft(waveform,L);
ft_real = abs(ft);
ft_real_half = ft_real(1:L/2);
ft_normalised = (ft_real_half / L )*2 % Every fft requires 2*?
bar(f_domain,ft_normalised)
xlabel('Frequency (GHz)');
ylabel('Actual Amplitude');
xlim([19.2*10^9 22.2*10^9]);
ylim([0 2*max(ft_normalised)]);
This should give you a square block in frequency domain, my carrier waveform. But it distorts when end_t is extended so it samples for longer. Please can someone advise
0 个评论
回答(0 个)
此问题已关闭。
另请参阅
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!