I simulated a cosine waveform $ y = \cos(\omega t) $ and I applied the FFT algorithm to it. As expected, I have a frequency peak at $\pm \omega$ only in the real part, and nothing in the imaginary part. As expected, if I zero-pad the array, the peak in the real part becomes a $\mathrm{sinc}(\omega D)$ (where D is the length of the window). However, in the imaginary part, a sort of anti-symmetric $\mathrm{sinc}$ appears. I don't understand why, because I was expecting the imaginary part to stay zero since the Fourier transform of the cosine is purely real.
Why is this happening? Here a plot of the imaginary and real parts of the FFT of the described signal. In orange: FFT of the original signal. In blue: FFT of the zero-padded signal.
Here is my code, written in MATLAB language.
dt = 0.02;
fs = 1/dt;
start = 0;
stop = 1;
t = start:dt:stop-dt;
w = 2*pi*10;
y = cos(w*t);
N = 10000;
y_pad = [y zeros(1,N)];
Y_PAD = fftshift(fft(y_pad))./length(y);
df_pad = fs / length(y_pad);
f_pad = (0:(length(y_pad)-1))*df_pad;
f_pad(f_pad >= fs/2) = f_pad(f_pad >= fs/2) - fs;
f_pad = fftshift(f_pad);
Y = fftshift(fft(y))./length(y);
df = fs / length(y);
f = (0:(length(y)-1))*df;
f(f >= fs/2) = f(f >= fs/2) - fs;
f = fftshift(f);
figure;
subplot(2,1,1);
plot(f_pad, real(Y_PAD));
hold on
plot(f, real(Y));
ylabel('Re(fft)')
xlabel('f (Hz)')
subplot(2,1,2);
plot(f_pad, imag(Y_PAD));
hold on
plot(f, imag(Y));
ylabel('Im(fft)')
xlabel('f (Hz)')
Edit: By zero-padding only to the right of my signal I am breaking the even parity of the cosine and $y[N-n]=y[n]$ does not hold anymore (see Hilmar's answer). Therefore, I tried to zero pad both to the left and to the right, in order to preserve the parity
N = 10000;
y_pad = [zeros(1,N) y zeros(1,N)];
The result is the following and it looks weird: the imaginary part is still not zero and the real part oscillates between positive and negative values. Why this zero-padding does not work as expected?