You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
65 lines
1.5 KiB
65 lines
1.5 KiB
/***************************************************************************
|
|
* Copyright (C) 2003-2004 by David Saxton *
|
|
* david@bluehaze.org *
|
|
* *
|
|
* This program is free software; you can redistribute it and/or modify *
|
|
* it under the terms of the GNU General Public License as published by *
|
|
* the Free Software Foundation; either version 2 of the License, or *
|
|
* (at your option) any later version. *
|
|
***************************************************************************/
|
|
|
|
#include "elementsignal.h"
|
|
#include <cmath>
|
|
|
|
ElementSignal::ElementSignal()
|
|
{
|
|
m_type = ElementSignal::st_sinusoidal;
|
|
m_time = 0.;
|
|
m_frequency = 0.;
|
|
}
|
|
|
|
ElementSignal::~ElementSignal()
|
|
{
|
|
}
|
|
|
|
void ElementSignal::setStep( double delta, Type type, double frequency )
|
|
{
|
|
m_type = type;
|
|
m_delta = delta;
|
|
m_frequency = frequency;
|
|
m_omega = 6.283185307179586*m_frequency;
|
|
m_time = 1./(4.*m_frequency);
|
|
}
|
|
|
|
double ElementSignal::advance()
|
|
{
|
|
m_time += m_delta;
|
|
if ( m_time >= 1./m_frequency ) m_time -= 1./m_frequency;
|
|
|
|
switch (m_type)
|
|
{
|
|
case ElementSignal::st_sawtooth:
|
|
{
|
|
// TODO Sawtooth signal
|
|
return 0.;
|
|
}
|
|
case ElementSignal::st_square:
|
|
{
|
|
return (sin(m_time*m_omega)>=0)?1:-1;
|
|
}
|
|
case ElementSignal::st_triangular:
|
|
{
|
|
// TODO Triangular signal
|
|
return 0.;
|
|
}
|
|
case ElementSignal::st_sinusoidal:
|
|
default:
|
|
{
|
|
return sin(m_time*m_omega);
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|