MATLAB: Adding Random phase causes fft anomalies

digital signal processingfftsignal processing

Hi
If I add random_phase to my waveforms then the fft goes skewy – basically it breaks down and is not producing what it should be like when random_phase is not present in sinewave generation loop.
%Setup sampling times and frequency range
f=(20.2 : 0.1 : 21.1)*10^9;
Fs = 3*max(f);
Ts = 1/Fs;
end_t = 0.5*10^-6
dt=0: Ts : end_t -Ts
a=0; b=pi; %for random phase calculation
%Below part adds a new sine wave every 0.01*10^9 within frequency range
for a=1:length(f)-1
random_phase = (b-a).*rand(1,length(dt))+a;
y(a,:) = 5*sin(2*pi.*f(a) .* dt + random_phase); %remove random_phase and scripts works fine.
end
%combined waveform
waveform = sum(y);
%setup frequency domain for FFT
N=length(waveform);
freq_domain = (0:N-1);
freq_domain = f_domain*Fs/N
ft=2*abs(fft(waveform)/N);
figure(1)
bar(freq_domain, ft);
ax=gca; ax.XAxis.Exponent = 9;
xlim([20 *10^9 21.4*10^9]);
Completely stumped how random phase messes up my fft…

Best Answer

The random phase will shift your sine curve randomly in time, essentially destroying the periodicity. You can see this easily if you plot your signal in the time domain:
figure(2)
plot(dt, waveform)
grid
subplot(2,1,2)
plot(dt, waveform)
axis([0 2E-8 ylim])
grid
Also, if you use plot rather than bar, the Fourier transform is easier to see.