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

> Внимание!

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

> Вычисление шума квантования сигнала в АЦП, C++
Account
сообщение 4.01.2012 16:31
Сообщение #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(r);
  double h=(2*PI)/R;
  fprintf(fl,"Razryadnost (r): %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 - 4.01.2012 16:36
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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


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

 

- Текстовая версия 18.07.2025 20:27
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"