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


Профи
****

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

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


Ты более детально опиши,в чем проблема,просто я не понял,обычно вообще все это нужно для передачи сигнала и его коррекции, поэтому сути задачи я понять вообще не могу.Если бы у тебя был сигнал в него добавлялся шум и надо востановить сигнал,то понятно,это наиболее приближенное к реальным условиям.
Цитата

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

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

Лан это небольшое лирическое отступление.А если по теме,то почему ты не хочеш написать свою функцию,которая будет делать манипуляции Trunc, исходников навалом.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Гуру
*****

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

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


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

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


Бывалый
***

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

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


Цитата(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)

Вот что я и вычисляю в программе.

Сообщение отредактировано: Account -


Прикрепленные файлы
Прикрепленный файл  1.bmp ( 886.5 килобайт ) Кол-во скачиваний: 697
Прикрепленный файл  2.bmp ( 920.78 килобайт ) Кол-во скачиваний: 667
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Профи
****

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

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


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

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

Ну а по остальному тогда никаких вопросов нет, вроде все правильно.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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

 





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