In Python, generate a real-valued sampled sinusoid signal and display it as a function of time (in seconds). Compute the DFT of the signal and display the real and imaginary parts of the DFT, as well as its magnitude and phase, all as a function of frequency (a total of 5 graphs in one figure). Label the frequency axis in Hz. Test empirically which is the highest frequency you can represent. Show an example above and below that frequency in the time domain. Generate a complex-valued sinusoid with negative frequency; display it in the time domain and frequency domain. Contrast that to a sinusoid of positive frequency. Generate a sinusoidal signal at some frequency f plus a sinusoid at 2f and downsample it to a new sampling rate of fs=3.5*f while avoiding aliasing. Display the absolute value of the DFT before and after downsampling. Label the frequency axis in Hz.