How to level shift a sine wave mathematically?
18 views (last 30 days)
Show older comments
Hello MatLab users,
Im currently working on a small program that gives me a certain number of values of a 60 Hz sine wave signal but unfortunately I was only able to create a sine wave that has positive and negative values, but what I really want is to get only positive values so I would need my sine wave to be level shifted up (for example 0 to 3). Is there any way to do this? I want to do this mathematically only. Help is appreciated, thank you all. I leave my code below and picture of plot of the sine wave.
f = 60;
fs = 1e4; % samples per second
t=0:1/fs:0.017; % 1/fs is seconds per sample
x = sin(2*3.14*f*t);
plot(t,x)
x(:)
5 Comments
Aquatris
on 24 Aug 2018
Geoff did have a comment at the time I wrote mine. dqp gave you the answer below but if you need further explanation here it is;
First you create your sine wave that is between -1 and +1;
x = sin(2*pi*f*t);
You want this [-1,1] range to be [a,b] range instead, which is a simple linear mapping. This can be done by;
x_scaled = (x-(-1))*(b-a)/(1-(-1))+ a
So an example is;
t = 0:0.001:10;
x = sin(t);
a = 0.5; b = 3;
x_scaled = (x-(-1))*(b-a)/(1-(-1))+ a;
plot(t,x,t,x_scaled)
Accepted Answer
dpb
on 23 Aug 2018
Sure, it's just a linear scaling from the [-1,1] interval to [minV,maxV]
x = sin(2*3.14*f*t);
M=[maxV-minV]/2; % slope --> [maxV-minV]/[1-(-1)]
B=1+minV; % intercept
z=M*(x+B); % scale
for your min,max of [0,3] then
M=(3-0)/2;
B=1+0;
More Answers (0)
See Also
Categories
Find more on Bartlett 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!