下面这些程序在调用时输出的结果都是数字,怎么修改才能让他们调用时输出的是波形,请大家帮忙
//正弦信号程序:
void signal_sin(double amp,double f, double dt, double phi, double *y, int N)
{
double pi;
int i;
pi = atan(1.0) * 4.0;
for (i=0;i<N;i++) y[i]= amp * sin(2.0*pi * f * dt * i + phi );
}
//三角波程序:
void signal_tri(double amp, double w, double flat_t,double dt, double *y, int N)
{
double slop1,slop2,L,x,w1,w2,t;
int i;
L = w + flat_t;
w1 = w /2.0; w2= w1;
slop1 = amp / w1;
slop2 = -amp / w2;
for (i=0;i<N;i++)
{
t = dt * (double) i;
x = t - L * (double) ( (int) (t / L));
if (x >= 0.0 && x <= w1) y[i] = slop1 * x;
if (x > w1 && x < w ) y[i] = amp + slop2 * (x - w1);
if (x >= w && x <= L ) y[i] = 0.0;
};
}
//矩尺波程序:
void signal_jc(double amp, double w1, double w2, double flat_t,double dt, double *y, int N)
{
double w,L,t,x,slop1,slop2;
int i;
w = w1+w2;
L = w + flat_t;
slop1 = amp / w1;
slop2 = -amp / w2;
for (i=0;i<N;i++)
{
t = dt * (double) i;
x = t - L * (double) ( (int) (t / L));
if (x >= 0.0 && x <= w1) y[i] = slop1 * x;
if (x > w1 && x < w ) y[i] = amp + slop2 * (x - w1);
if (x >= w && x <= L ) y[i] = 0.0;
};
}
//正弦信号程序:
void signal_sin(double amp,double f, double dt, double phi, double *y, int N)
{
double pi;
int i;
pi = atan(1.0) * 4.0;
for (i=0;i<N;i++) y[i]= amp * sin(2.0*pi * f * dt * i + phi );
}
//三角波程序:
void signal_tri(double amp, double w, double flat_t,double dt, double *y, int N)
{
double slop1,slop2,L,x,w1,w2,t;
int i;
L = w + flat_t;
w1 = w /2.0; w2= w1;
slop1 = amp / w1;
slop2 = -amp / w2;
for (i=0;i<N;i++)
{
t = dt * (double) i;
x = t - L * (double) ( (int) (t / L));
if (x >= 0.0 && x <= w1) y[i] = slop1 * x;
if (x > w1 && x < w ) y[i] = amp + slop2 * (x - w1);
if (x >= w && x <= L ) y[i] = 0.0;
};
}
//矩尺波程序:
void signal_jc(double amp, double w1, double w2, double flat_t,double dt, double *y, int N)
{
double w,L,t,x,slop1,slop2;
int i;
w = w1+w2;
L = w + flat_t;
slop1 = amp / w1;
slop2 = -amp / w2;
for (i=0;i<N;i++)
{
t = dt * (double) i;
x = t - L * (double) ( (int) (t / L));
if (x >= 0.0 && x <= w1) y[i] = slop1 * x;
if (x > w1 && x < w ) y[i] = amp + slop2 * (x - w1);
if (x >= w && x <= L ) y[i] = 0.0;
};
}
输出他们的波形:有了函数值输出波形就是画图任务了。
{
CboxingDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc); double yn[1000];
signal_sin(40,0.01, 45, yn, 1000) ;
}
/**
//amp:Y的扩大倍数
//f:频率(每秒的周期数)
//phi:弧度
//y[]:纵坐标
//N:横坐标(秒)
*/
void CboxingView::signal_sin(double amp,double f, double phi, double y[], int N)
{
double pi;
int i;
CClientDC dc(this);
pi = atan(1.0) * 4.0;
dc.MoveTo (0,0);
for (i=0;i <N;i++)
{
y[i]= amp * sin(2.0*pi * f * double( i)+ phi)+200;
dc.SetPixel(i,y[i],RGB(0,0,0));
dc.LineTo (i,y[i]);
dc.MoveTo (i,y[i]);
}}
正弦波,其他的类似。自己先仿照作做看,不行的话,我再帮你