Introduction
If you want to test your system, you always need an input signal. In the tools.signalgenerator you can find some basic signals like sine wave, cosine wave or square wave etc.
Sine wave
The sine wave or sinusoid is a mathematical function that describes a smooth repetitive oscillation. $$y(t) = A \cdot \sin(\omega t + \phi) + D$$
Where:
Square wave
A square wave is a kind of non-sinusoidal waveform, an ideal square wave alternates regularly and instantaneously between two levels. Using Fourier expansion with cycle frequency f over time t, we can write an ideal square wave as an infinite series of the form: $$ x_{square}(t) = \frac{4}{\pi} \sum_{k=1}^\infty {\sin{\left (2\pi (2k-1) ft \right )}\over(2k-1)}$$$$= \frac{4}{\pi}\left (\sin(2\pi ft) + {1\over3}\sin(6\pi ft) + {1\over5}\sin(10\pi ft) + \cdots\right )$$ Here is the square wave implementation in python.
Sawtooth wave
Triangle wave
If you want to test your system, you always need an input signal. In the tools.signalgenerator you can find some basic signals like sine wave, cosine wave or square wave etc.
Sine wave
The sine wave or sinusoid is a mathematical function that describes a smooth repetitive oscillation. $$y(t) = A \cdot \sin(\omega t + \phi) + D$$
Where:
- A, the amplitude, is the peak deviation of the function from its center position.
- \(\omega\), the angular frequency
- \(\phi\),the phase, specifies where in its cycle the oscillation begins at t = 0.
- D, a non-zero center amplitude
class sinwave:
"""
Generating a sinus vawe.
x(t)= amp * sin(2 * pi * F * t + phase) + bias
"""
def __init__(self, amp = 220, freq = 50, Ts = 0.01, mtime = 0.01, bias = 0, phase = 0):
self.amp = amp
self.freq = freq
self.Ts = Ts
self.mtime = mtime
self.bias = bias
self.phase = phase
self.stime = arange(0, self.mtime, self.Ts)
def signal(self, stime = None, phase = None, freq = None, bias = None, amp = None):
if stime == None:
stime = self.stime
if phase == None:
phase = self.phase;
if freq == None:
freq = self.freq;
if bias == None:
bias = self.bias;
if amp == None:
amp = self.amp;
x = 2 * pi * freq * stime
return amp * sin(x + phase) + bias;
If you want to use this class, first you have to create a new class, also there are three options to define the parameters, while you are creating the class,
sinW = sinwave( Ts = Ts, mtime = 1, freq = 5, amp = 6000 )when the signal function is called,
pw = sinW.signal( freq = 5, amp = 3000 )or directly you can reach the parameters
sinW.app = 400
sinW = sinwave( Ts = Ts, mtime = 1, freq = 5, amp = 6000 ) sinW.amp = 400 pw = sinW.signal()The result of the following code above is:
Square wave
A square wave is a kind of non-sinusoidal waveform, an ideal square wave alternates regularly and instantaneously between two levels. Using Fourier expansion with cycle frequency f over time t, we can write an ideal square wave as an infinite series of the form: $$ x_{square}(t) = \frac{4}{\pi} \sum_{k=1}^\infty {\sin{\left (2\pi (2k-1) ft \right )}\over(2k-1)}$$$$= \frac{4}{\pi}\left (\sin(2\pi ft) + {1\over3}\sin(6\pi ft) + {1\over5}\sin(10\pi ft) + \cdots\right )$$ Here is the square wave implementation in python.
class squarewave:
"""
Generating a square signal using the signum of the sinus function.
x(t) = amp * sign( sin( 2 * pi * F * t + phase ) + bias )
where 2*pi*f is the angular frequency
"""
def __init__(self, amp = 220, freq = 50, Ts = 0.01, mtime = 0.5, bias = 0, phase = 0):
self.amp = amp
self.freq = freq
self.Ts = Ts
self.mtime = mtime
self.bias = bias
self.phase = phase
self.stime = arange(0, self.mtime , self.Ts)
def signal(self, stime = None, phase = None, freq = None, bias = None, amp = None):
from numpy import sign
if stime == None:
stime = self.stime
if phase == None:
phase = self.phase;
if freq == None:
freq = self.freq;
if bias == None:
bias = self.bias;
if amp == None:
amp = self.amp;
x = 2 * pi * freq * stime
return amp * sign( sin( x + phase ) ) + bias;
So, here is a full example how does it possible to create a square wave:
if __name__ == "__main__":
Ts = 0.001
sinW = sinwave( Ts = Ts, mtime = 1, freq = 5, amp = 60 )
pw = sinW.signal()
squareW = squarewave( Ts = Ts, mtime = 1, freq = 5, amp = 60 )
sw = squareW.signal()
pylab.figure( 1 )
pylab.plot( pw )
pylab.plot( sw )
pylab.show()
Sawtooth wave
class sawtoothwave:
"""
Generating a triangle vawe.
x(t)= amp * 2 / pi *sum(( -1 )^i * (sin( 2 * i * pi * F * t + phase) + bias) / i )
where 2*pi*f is the angular frequency
"""
def __init__(self, amp = 220, freq = 50, Ts = 0.01, mtime = 5, bias = 0, phase = 0, harmonic = 50):
self.amp = amp
self.freq = freq
self.Ts = Ts
self.mtime = mtime
self.bias = bias
self.phase = phase
self.harmonic = harmonic
self.stime = arange(0, self.mtime, self.Ts)
def signal(self, stime = None, phase = None, freq = None, bias = None, amp = None, harmonic = None):
if stime == None:
stime = self.stime
if phase == None:
phase = self.phase;
if freq == None:
freq = self.freq;
if bias == None:
bias = self.bias;
if amp == None:
amp = self.amp;
if harmonic == None:
harmonic= self.harmonic;
x = 2 * pi * freq * stime
res = zeros(len(x))
for i in range( 1, harmonic + 1):
res += pow( -1, i+1 ) * sin( i * (x + phase) ) / i;
return amp * (2. / pi) * res + bias
if __name__ == "__main__":
Ts = 0.001
sinW = sinwave( Ts = Ts, mtime = 1, freq = 5, amp = 60 )
pw = sinW.signal()
squareW = squarewave( Ts = Ts, mtime = 1, freq = 5, amp = 60 )
sw = squareW.signal()
sawtoothW = sawtoothwave( Ts = Ts, mtime = 1, freq = 5, amp = 60 )
stw = sawtoothW.signal()
pylab.figure( 1 )
pylab.plot( pw )
pylab.plot( sw )
pylab.plot( stw )
pylab.show()
Triangle wave
class trianglewave:
"""
Generating a triangle vawe.
x(t)= amp * 8 / pi^2 *sum(( -1 )^i * (sin((2 * i + 1) * 2 * pi * F * t + phase) + bias) / ( 2 * i + 1 )^2 )
"""
def __init__(self, amp = 220, freq = 50, Ts = 0.01, mtime = 5, bias = 0, phase = 0, harmonic = 50):
self.amp = amp
self.freq = freq
self.Ts = Ts
self.mtime = mtime
self.bias = bias
self.phase = phase
self.harmonic = harmonic
self.stime = arange(0, self.mtime, self.Ts)
def signal(self, stime = None, phase = None, freq = None, bias = None, amp = None, harmonic = None):
if stime == None:
stime = self.stime
if phase == None:
phase = self.phase;
if freq == None:
freq = self.freq;
if bias == None:
bias = self.bias;
if amp == None:
amp = self.amp;
if harmonic == None:
harmonic= self.harmonic;
x = 2 * pi * freq * stime
res = zeros(len(x))
for i in range( 0, harmonic ):
res += pow( -1, i ) * sin(( 2 * i + 1 ) * (x + phase) ) / pow( ( 2. * i + 1.), 2 );
return amp * (8. / pow(pi,2)) * res + bias
if __name__ == "__main__":
Ts = 0.001
sinW = sinwave( Ts = Ts, mtime = 1, freq = 5, amp = 60 )
pw = sinW.signal()
squareW = squarewave( Ts = Ts, mtime = 1, freq = 5, amp = 60 )
sw = squareW.signal()
sawtoothW = sawtoothwave( Ts = Ts, mtime = 1, freq = 5, amp = 60 )
stw = sawtoothW.signal()
triangleW = trianglewave( Ts = Ts, mtime = 1, freq = 5, amp = 60 )
tw = triangleW.signal()
pylab.figure( 1 )
pylab.plot( pw )
pylab.plot( sw )
pylab.plot( stw )
pylab.plot( tw )
pylab.show()




No comments:
Post a Comment