Есть сигнал, в моем случае представленный в виде функции sin(x), так как она периодическая, то берем интервал 0 до 2*Pi. Разрядность АЦП задается по пользователем.
Написал вот такую программку, результат сохраняется в файл.
Работает следующим образом. Запрашивается разрядность, потом тупо вычисляется на каждом шаге sin(x), результат дискреизированной функции (это вычисление дала преподаватель, вот в нем бы и хотелось убрать изврат по выделению целой части(Указал в коде), пробовал trunc, но такой функции не оказалось, тут так же возникает вопрос почему, в справочнике Шилда она указана). И последнее вычисляется шум, что есть разность между второй и первой функции соответственно выше указанных.
ОС: WinXP
IDE: TurboC++ 3.0
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <iostream.h>
#include <conio.h>
int intrvl_discrt(int &rr)
{ int st=1;
for(int i=1;i<=rr;i++)
st*=2;
return st;
}
int main()
{ FILE *fl;
if ((fl=fopen("Result","w"))==NULL)
{
printf("Error file open! \n");
exit(1);
};
system("cls");
int r,R; double tbl[1024][3];
cout<<"Vvedite razryadnost: " ;
cin>>r;
double PI=3.14159;
R=intrvl_discrt®;
double h=(2*PI)/R;
fprintf(fl,"Razryadnost ®: %d\nKol-vo otrezkov (R=2^r): %d\nShag (h) = %15.13f\n\n",r,R, h);
fprintf(fl," x | S(x) | SD(x) | SD(x)-S(x) |\n");
fprintf(fl,"-------------------------------------------------------------------------\n");
int i=0;
for( double x=0;i<R;x=x+h,i++)
{
tbl[i][0]=sin(x);
tbl[i][1]=int(sin(x)*R);//<<---Как убрать такой изврат, нужно из результата именно целая часть
tbl[i][1]=tbl[i][1]/R;
tbl[i][2]=tbl[i][1]-tbl[i][0];
fprintf(fl,"%15.13f | %15.13f | %15.13f | %15.13f |\n\n",x,tbl[i][0],tbl[i][1],tbl[i][2]);
}
fclose(fl);
return 0;
}
Сообщение отредактировано: Account -