# How can I generate a sine and cosine function using an exponential function?

I have been trying to generate sine and cosine sampled graphs by a given sampling frequency.

fc = 4092; % Carrier frequency Hz

fs = 16368; % Sampling freq Hz
ts = 1/fs; % Sampled time

nn = [0 :4091] % Array with numbers from 0 to fc

y1 = exp(i*2*pi*fc*ts*nn); % Exponential equation

cosine = real(y1);
sine = imag(y1);

subplot(2,2,1);
plot(cosine);
axis tight;
grid on;

subplot(2,2,2);
plot(sine);
axis tight;
grid on;

• What is the problem you are facing? If you zoom into the graph you can see the periodic sin and cos wave. The period is just 4 samples that is why your graph looks like fully filled. Commented Apr 11, 2020 at 6:51
• The body of the question is not clear. If you want to generate sampled data, then the graphs would be of the sampled data—which may or may not look like sine and cosine, depending on the the relative frequency. When you say, "generate sine and cosine sampled graphs", it seems to imply you want a result that looks like sine and cosine. Perhaps you can restate you intention. Commented Apr 11, 2020 at 20:55
• Why are you trying to generate $\cos(\cdot)$ and $\sin(\cdot)$ with exponentials? Commented Apr 11, 2020 at 22:51
• Yeah, I had the same question when I first read it, so I assumed he just wanted to prove to himself that a complex exponential has both cosine and sine components. But after he accepted an answer that doesn't show that, now I don't know... Commented Apr 11, 2020 at 23:46
• hi rohitM can you please share your final m file for GPS aqcusition. I am searching for days ı didn't find any document about acquisition. Commented Sep 9, 2021 at 10:40

If you have defined a sampling frequency then you should use it in defining your time grid "nn", otherwise you are just incrementing in digital steps.

The grid "nn" is basically a digital grid rather than representing true sampling based on your defined sampling frequency. Also the range of your time grid should be in mutliples of the time period of sinusoid (it could be anything but if you want to define it in that terms then define it in terms of time period of sinusoid and not the frequencies itslef).I have modified your code below to view 5 cycles of the sinusoid. Hope it helps

fc = 4092; % carrier frequency Hz

fs = 16368; % sampling freq Hz

nn = [0 : (1/fs):5*(1/fc)] % array with numbers from 0 to fc

y1 = exp(i*2*pi*fc*nn); % exponential equation

• Thanks a lot that works. Commented Apr 11, 2020 at 8:06
• The reason I didn't go this route is that it essentially makes fc and fs meaningless as far as frequency. Worse, their relationship determines the number of points in the plot—for your numbers, there are only 21 points (fs/fc * 5 + 1), and the plot looks like a triangle wave. Try this for fc = 100, a very nice sinusoid. Try it for fc = 10000, yuck. Commented Apr 11, 2020 at 17:19
• @nigel redmon the way you have defined the time grid and the exponential, where is the notion of continuous time frequency, what you have generated is a discrete time complex exponential, he is looking for a continuous time exponential which is represented in the above answer Commented Apr 11, 2020 at 17:51
• @Dspguysam Sorry, I don't understand that—you are generating discrete points in your code too. The difference is I don't relate it to fc and fs, but I tell him how he can trivially—because he doesn't include a graphic to make clear what he expects to see. Again, your code plots five cycles of a triangle wave, because the number of samples generated depends on the ratio of fs to fc. Run your code above with the semi-colon omitted from the last statement—21 samples: 1.00000 + 0.00000i 0.00000 + 1.00000i -1.00000 + 0.00000i -0.00000 - 1.00000i 1.00000 - 0.00000i... Commented Apr 11, 2020 at 18:02
• It's not just about making it look pretty, the concept and interplay of underlying signal processing variables is important. He is looking to generate a sinusoid at a Fc = 4092 Hz, if you take the IFFT or do a spectral estimation using pwelch command you find that the above implementation would give sinusoidal at exactly 4092 Hz. Now plug the exponential you have generated into the same spectral estimation command and I can tell you that you would not find the peak at that frequency. The user is looking for sinusoid at 4092Hz, and I tell you that your implementation has not produced that. Commented Apr 11, 2020 at 19:36

You have the basic idea, but first you have some formatting issues as posted (which might not be in what you are executing). And it's not clear what you expect to see (one cycle? more?) in the plots.

The formatting issues: First, "ts = 1/fs;" should be split onto another line, othewise it gets lost in the preceding comment. Second, "pifcts" should be "pi * fs *ts". Equivalently, you can simplify by getting rid of ts altogether and dividing by fs.

One conceptual problem is you define nn as "from 0 to fc". It has no relationship with fc, it's simply how many points you want to plot to the screen.

Finally, because you're plotting a frequency fs of one-fourth the sample rate fc, you'll end up plotting only a quarter cycle. You probably want to see at least a full cycle, so you'd need to multiply by another factor as well.

I'll assume you want to start by seeing one cycle to prove you were right about the complex exponential. So, the plot here is simply 0 to 2pi, one cycle. Multiple the 2*pi by fc/fs if you want to scale for frequency, and if you want to show more cycles in the plots multiply by a factor greater than one to do that.

plotPoints = 1000;  % number of points in plot

nn = [0 : plotPoints - 1];

y1 = exp(i*2*pi * nn/plotPoints); % exponential equation from 0 to 2pi

cosine = real(y1); sine = imag(y1);

subplot(1,2,1); plot(cosine); axis tight; grid on;

subplot(1,2,2); plot(sine); axis tight; grid on;