sine
/////////////////////////////////////////////////////////////////////////
//////By Fischetti P.
///Genera N campioni di un segnale sinusoidale
///con i parametri (frequenza, ampiezza, fase, Freq. di campionamento) specificati nella linea di comando
///////////////////////////////////////////////////////////////////////////
#include <cmath>
#include <iostream>
#include <cstdlib>
using namespace std;
void help(const char *sProgName)
{
cerr << "Usage:\n " << _strupr((char *)sProgName) << " [-N<Num Points(=R/f)>] [-A<Ampl(1.)> [-f<Freq(1000Hz)>] [<-RSamplerate(16384Hz)>] [-p<Fase)0)>]\n";
}
int main(int argc, const char **argv)
{
float t = 0.;//tempo
int i;
float y;//out
int N = -1;//Num. campioni
float f = 1000;//freq.
float R = 16 * 1024.;//Freq di campionamento
float Ts = 1. / R;//Tempo di campionamento
float pi = 4.*atan(1.);//PIGRECO
float A = 1.;//Ampiezza segnale
float p = 0.;//Fase
for (i = 1; i < argc; i++)
{
if (('-' == argv[i][0]) || ('/' == argv[i][0]))
{
char cp;
cp = argv[i][1];
switch (cp)
{
case 'N':
N = atoi(&argv[i][2]);
break;
case 'f':
f = atof(&argv[i][2]);
break;
case 'A':
A = atof(&argv[i][2]);
break;
case 'p':
p = atof(&argv[i][2]);
break;
case 'R':
R = atof(&argv[i][2]);
break;
case '?':
case 'h':
{help(argv[0]); return 1; }
default:
{help(argv[0]); return -1; }
}
}
else
{
help(argv[0]); return -1;
}
}
if (N < 0)
N = (int)(R / f);
Ts = 1. / R;
for (i = 0; i < N; i++)
{
y = A * sin(2 * pi*f*t + p * pi / 180.);
cout << fixed << y << endl;
t += Ts;
}
return 0;
}