Adding Random phase causes fft anomalies?
2 views (last 30 days)
Show older comments
Nathan Kennedy
on 14 Dec 2017
Answered: Joel Miller
on 14 Dec 2017
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...
0 Comments
Accepted Answer
Star Strider
on 14 Dec 2017
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.
0 Comments
More Answers (1)
Joel Miller
on 14 Dec 2017
If you are trying to randomly shift the phase of the sinusoids, sin(2*pi.*f(a) .* dt), then random_phase should be a scalar. When random_phase is a vector of length dt, you are adding a different phase to each time increment of the sinusoid. That is a reasonable definition of random (phase) noise. You can see this by fourier transforming just random_phase.
0 Comments
See Also
Categories
Find more on Waveform Generation in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!