Friday, July 13, 2018

matlab - Why doesn't this complex multiplication in the frequency domain produce my expected phase shift?


I know how to change the phase of a complex number by multiplying by $\cos \theta + i \sin \theta$. And I understand that the phase of a sine wave is reflected in its Fourier transform. So, I am trying to phase-shift a signal by changing the phase of its Fourier transform..


This works for "synthetic" Fourier transforms, but when I try to FFT a signal, apply the phase change, and invert the FFT, I don't get the expected result. I am using MATLAB in the examples below.


Fs = 1000;
Tmax = 2;
L = Tmax * Fs;


For example, I'll build a synthetic Fourier sequence. The frequency intervals are 0.5 Hz, so a 10Hz component is at the 20th position after DC. (I'm just spitballing here; I know there's better ways to pick frequency bins than hand-jamming 21.)


Ysynth = zeros(1, L);
Ysynth(21) = 1000;

And rotate it by 45°:


Ysynth = Ysynth * exp(j * pi/4);

It has a 45° phase on the 10-Hz component:


polarscatter(angle(Ysynth), abs(Ysynth))


1


Now take its inverse FFT:


Xsynth = ifft(Ysynth);

So far so good. The generated signal has a phase shift of 45°. MATLAB does complain about the presence of an imaginary part when I plot it; I think this is because I didn't bother with the negative frequency component.


t = (0:L-1)/Fs;
plot(t, Xsynth)

2



Now, I would expect the same principle to apply to a frequency spectrum taken from an actual signal. But I do not get similar results. Quickly:


X = cos(2*pi * 10 * t);
Y = fft(X);
Yshift = Y * exp(j * pi/4);
Xshift = ifft(Yshift);

There is an imaginary component in Xshift, which I do not expect, and again MATLAB complains about.


plot(t, [Xshift; X])

3



There is no phase shift here, and the amplitude (of the real part) is different.


I must be misunderstanding something about phase representation in FFTs. Why doesn't my transformation produce a phase-shifted version of the original?




No comments:

Post a Comment

periodic trends - Comparing radii in lithium, beryllium, magnesium, aluminium and sodium ions

Apparently the of last four, $\ce{Mg^2+}$ is closest in radius to $\ce{Li+}$. Is this true, and if so, why would a whole larger shell ($\ce{...