IPB
ЛогинПароль:

> Внимание!

1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным.
В описании темы указываем язык!!!

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

> Вычисление шума квантования сигнала в АЦП, C++
сообщение
Сообщение #1


Бывалый
***

Группа: Пользователи
Сообщений: 212
Пол: Мужской

Репутация: -  0  +


Задача следующая:
Есть сигнал, в моем случае представленный в виде функции 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 -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
сообщение
Сообщение #2


Гуру
*****

Группа: Пользователи
Сообщений: 1 013
Пол: Мужской
Ада: Разработчик
Embarcadero Delphi: Сторонник
Free Pascal: Разработчик

Репутация: -  627  +


Цитата
пробовал trunc, но такой функции не оказалось, тут так же возникает вопрос почему, в справочнике Шилда она указана
Потому что эта функция была введена только в стандарт С99, твой компилятор про него слыхом не слыхивал.

Цитата
Как убрать такой изврат, нужно из результата именно целая часть
Никакой это не изврат, тут как раз и происходит то, что тебе нужно: отбрасывание дробной части. Хочешь убрать - используй более современный компилятор.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 29.04.2024 20:12
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name