sine wave plot
    1,136 views (last 30 days)
  
       Show older comments
    
Hi,
I am having some trouble plotting a sine wave and i'm not sure where i am going wrong.
i have
t = [0:0.1:2*pi]
a = sin(t);
plot(t,a)
this works by itself, but i want to be able to change the frequency. When i run the same code but make the change
a = sin(2*pi*60*t)
the code returns something bad. What am i doing wrong? How can i generate a sin wave with different frequencies?
6 Comments
  Walter Roberson
      
      
 on 10 Aug 2021
				In order to solve that, you need some hardware to do analog to digital conversion between your 3V source and MATLAB. 
3V is too large for audio work, so you are not going to be able to use microphone inputs to do this. You are going to need hardware such as a National Instruments ADC or at least an arduino (you might need to put in a resistor to lower the voltage range.)
The software programming needed on the MATLAB end depends a lot on which analog to digital convertor you use.
The appropriate analog to digital convertor to use is going to depend in part on what sampling frequency you need to use; you did not define that, so we cannot make any hardware recommendations yet.
  Gokul Krishna N
 on 13 Oct 2021
				Just been reading the comments in this question. Hats off to you, sir @Walter Roberson
Accepted Answer
  Rick Rosson
    
 on 24 Apr 2012
        Please try:
   %%Time specifications:
   Fs = 8000;                   % samples per second
   dt = 1/Fs;                   % seconds per sample
   StopTime = 0.25;             % seconds
   t = (0:dt:StopTime-dt)';     % seconds
   %%Sine wave:
   Fc = 60;                     % hertz
   x = cos(2*pi*Fc*t);
   % Plot the signal versus time:
   figure;
   plot(t,x);
   xlabel('time (in seconds)');
   title('Signal versus Time');
   zoom xon;
HTH.
Rick
3 Comments
  Nauman Hafeez
 on 28 Dec 2018
				How to calculate Fs for a particular frequency signal?
I am generating a stimulating signal using matlab for my impedance meter and it gives me different results on different Fs. 
More Answers (8)
  Junyoung Ahn
      
 on 16 Jun 2020
        clear;
clc;
close;
f=60; %frequency [Hz]
t=(0:1/(f*100):1);
a=1;    %amplitude [V]
phi=0;  %phase
y=a*sin(2*pi*f*t+phi);
plot(t,y)
xlabel('time(s)')
ylabel('amplitude(V)')
2 Comments
  Robert
      
 on 28 Nov 2017
        aaa,
What goes wrong: by multiplying time vector t by 2*pi*60 your discrete step size becomes 0.1*2*pi*60=37.6991. But you need at least two samples per cycle (2*pi) to depict your sine wave. Otherwise you'll get an alias frequency, and in you special case the alias frequency is infinity as you produce a whole multiple of 2*pi as step size, thus your plot never gets its arse off (roundabout) zero.
Using Rick's code you'll be granted enough samples per period.
Best regs
    Robert
0 Comments
  shampa das
      
 on 26 Dec 2020
        
      Edited: Walter Roberson
      
      
 on 31 Jan 2021
  
      clc; t=0:0.01:1; f=1; x=sin(2*pi*f*t); figure(1); plot(t,x);
fs1=2*f; n=-1:0.1:1; y1=sin(2*pi*n*f/fs1); figure(2); stem(n,y1);
fs2=1.2*f; n=-1:0.1:1; y2=sin(2*pi*n*f/fs2); figure(3); stem(n,y2);
fs3=3*f; n=-1:0.1:1; y3=sin(2*pi*n*f/fs3); figure(4); stem(n,y3); figure (5);
subplot(2,2,1); plot(t,x); subplot(2,2,2); plot(n,y1); subplot(2,2,3); plot(n,y2); subplot(2,2,4); plot(n,y3);
0 Comments
  soumyendu banerjee
 on 1 Nov 2019
        %% if Fs= the frequency u want,
x = -pi:0.01:pi;
y=sin(Fs.*x);
plot(y)
1 Comment
  sevde busra bayrak
 on 24 Aug 2020
        sampling_rate = 250;
time = 0:1/sampling_rate:2;
freq = 2;
%general formula : Amplitude*sin(2*pi*freq*time)
figure(1),clf
signal =  sin(2*pi*time*freq);
plot(time,signal)
xlabel('time')
title('Sine Wave')
0 Comments
  Ranjita
 on 30 Sep 2024
        clc
clear all
fs = 10000;
T=1/fs
f1 = 100;
f2= 50;
L= 10000;
t = (0:L-1)*T;
x1 =sin(2*pi*f1*t)+4*cos(2*pi*f2*t)
figure
subplot(2,2,1)
plot(t,x1)
axis([0 0.1 -1 6]);
title('SS Function');
xlabel('time');
ylabel('magnitude');
%frequency domain conversion and plotting
Y_x1=fftshift(fft(x1));
subplot(2,1,2)
plot (-(fs/2-fs/L)-1:(fs/L):(fs/2-fs/L),abs(Y_x1))
axis([-700 700 0 max(abs(Y_x1))+10000]);
title('Magnitude spectrum of S1 Function');
xlabel('Frequency(Hz)');
ylabel('magnitude');
sgtitle('Frequency Domain Representation of S1 Function');
0 Comments
  Steven Lord
    
      
 on 23 Sep 2025
        If you're using release R2018b or later, rather than computing sin(pi*something), I recommend using the sinpi function (and there is a corresponding cospi function.)
x = 0:0.25:2
s1 = sin(x*pi)
s2 = sinpi(x)
Note that elements 5 and 9 of s1 and s2 are visually different. In s1 they are very close to, but not exactly equal to, 0. In s2 since we're taking the sine of exact multiples of pi (x(5) is exactly 1 and x(9) is exactly 2) we get actual 0 values.
format longg
[s1([5 9]); s2([5 9])]
And in this particular example from the original question:
t = [0:0.1:2*pi];
inner = 2*60*t
When we compare their values with the rounded version of those values using a very tight tolerance, we see that the values of inner are all very, very close to integer values. [isapprox was introduced in release R2024b.]
all(isapprox(inner, round(inner), 'verytight'))
That means that if we use sinpi all the values should be very close to 0.
a = sinpi(inner)
maximumDifferenceFromZero = max(a, [], ComparisonMethod="abs")
I'd say that's effectively 0 for most purposes.
0 Comments
See Also
Categories
				Find more on 2-D and 3-D Plots 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!






