Помощь - Поиск - Пользователи - Календарь
Полная версия: Вычисление шума квантования сигнала в АЦП
Форум «Всё о Паскале» > Современный Паскаль и другие языки > Ада и другие языки
Account
Задача следующая:
Есть сигнал, в моем случае представленный в виде функции 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;
}
Krjuger
Ты более детально опиши,в чем проблема,просто я не понял,обычно вообще все это нужно для передачи сигнала и его коррекции, поэтому сути задачи я понять вообще не могу.Если бы у тебя был сигнал в него добавлялся шум и надо востановить сигнал,то понятно,это наиболее приближенное к реальным условиям.
Цитата

И последнее вычисляется шум, что есть разность между второй и первой функции соответственно выше указанных.

Неверно, при самой дескретизации возникает разность исходного и результирующего сигнала.Он совпадает только в заданных точках.Шум же влияет на уже дискретизированные результаты при непоследственной передаче сигнала.Если ты по дескритизированным результатам с шумом попробуеш восстановить исходный сигнал,то не проведя правильные манипуляции можеш получить неверный результат.

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

Цитата
Как убрать такой изврат, нужно из результата именно целая часть
Никакой это не изврат, тут как раз и происходит то, что тебе нужно: отбрасывание дробной части. Хочешь убрать - используй более современный компилятор.
Account
Цитата(IUnknown @ 5.01.2012 1:11) *
Потому что эта функция была введена только в стандарт С99, твой компилятор про него слыхом не слыхивал.Никакой это не изврат, тут как раз и происходит то, что тебе нужно: отбрасывание дробной части. Хочешь убрать - используй более современный компилятор.
По поводу изврата я погорячился. А про стандарт я что то не подумал, как обычно туплю. Очередное спасибо за просвещение.

Цитата(Krjuger @ 4.01.2012 22:37) *
Лан это небольшое лирическое отступление.А если по теме,то почему ты не хочеш написать свою функцию,которая будет делать манипуляции Trunc, исходников навалом.

Не сочтите за грубость, но думаю что не стоит придумывать велосипед заново.

И подробнее по заданию.
Есть домашнее задание "Исследование шумов квантования АЦП". Теория найдена. Есть практическое задание, по нахождению шума, делается в матлабе, но изучать его нет времени, но можно так же сделать самому, например написать программу. Позже на сессии покажут как вычислить в матлабе и сравнить результаты.
Теория взята из книги И.С. Гоноровский "Радиотехнические цепи и сигналы". Прикрепляю к посту 2 страницы из книги из которых если переложить на мой пример видно что:
s(t)=sin(x)
s вых(t)=int(s(t)*2^R) /(2^R) - так мне показала преподаватель (Если не ошибаюсь по памяти, квантование сигнала)
И уже шум q(t) = s вых(t)-s(t)

Вот что я и вычисляю в программе.
Krjuger
Цитата
Не сочтите за грубость, но думаю что не стоит придумывать велосипед заново.

Да не, никакой грубости,но тогда актуален предыдущий пост.
Цитата
Хочешь убрать - используй более современный компилятор.

Ну а по остальному тогда никаких вопросов нет, вроде все правильно.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.