Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > C++ Builder
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.04.2016, 12:29   #11
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Цитата:
5.182505423e-16
Ноль же
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 05.04.2016, 12:40   #12
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,964
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Ноль же
Не полный ноль, но очень близко от нуля. Т.е., можно считать, что спектр симметричен?
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder
Smitt&Wesson вне форума Ответить с цитированием
Старый 05.04.2016, 13:51   #13
Pavia
Лис
Старожил
 
Аватар для Pavia
 
Регистрация: 18.09.2015
Сообщений: 2,409
По умолчанию

Цитата:
// T - Время отсчёта
Слово отсчёт тут лишнее. Отсчёт он дискретный. У вас на графике показан вертикальными палочками.
Тут T это параметр времени. точка в которой мы хотим восстановить функцию.
т.е. он не обязан браться с шагом dT.

Цитата:
if(pi != 0)
s += Y[k] * (sin(pi) / pi);
Забыли else. Иначе результат будет неправильный.

Код:
if(pi != 0)
      s += Y[k] * (sin(pi) / pi)
  else
      s += Y[k] * 1;
Цитата:
Как спектральную плотность?
Тут нет плотности и нет спектра. Особенность данной формулы. Ибо не весь ЦОС работает со спектрами. Это значение восстановленного сигнала. Интерполированного между отсчётами.

Цитата:
Но почему -16-я степень?
Ошибки округления.

Цитата:
Почему функция выдаёт такой результат - 5.182505423e-16 как его интерпретировать?
Тут ошибка восприятия.

Так как у вас T совпадает с N=13
Берите T так что-бы T/dt было от 0 до N. Все что левее или правее будет просто периодически повторяться.

Цитата:
T/dt
масштабный коэффициент.
Сразу не заметил он тут лишний.
У нас получилось что мы вычислили значение в функции в точке: 13*1000. Соответственно должно было получиться Y[0] (С учетом ошибок округление и при наличии else)

Так что в такой реализации лучше выкинуть отсюда масштабный коэффициент. Заменить T/dt на T. Тогда у вас T будет в секундах.

Цитата:
Т.е., можно считать, что спектр симметричен?
Тут нет спектра. Но Котельников дал описание для гармонического сигнала.
Он однозначно восстанавливает сигнал состоящий из синусоид.
А синусоида бесконечна. Но сигнал не симметричный, так как это видно из отсчётов 0<>8 2<>-6 4<>-4 ... Зато периодический с пересудом N.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
У дзен программиста программа делает то что он хотел, а не то что он написал .

Последний раз редактировалось Pavia; 05.04.2016 в 14:19.
Pavia вне форума Ответить с цитированием
Старый 05.04.2016, 14:27   #14
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,964
По умолчанию

Цитата:
Забыли else. Иначе результат будет неправильный.
Я его не забыл, а посчитал что он здесь лишний т.к. переход через ноль не имеет амплитуды. А зачем здесь единица?
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder
Smitt&Wesson вне форума Ответить с цитированием
Старый 05.04.2016, 15:58   #15
Pavia
Лис
Старожил
 
Аватар для Pavia
 
Регистрация: 18.09.2015
Сообщений: 2,409
По умолчанию

Цитата:
Я его не забыл, а посчитал что он здесь лишний т.к. переход через ноль не имеет амплитуды. А зачем здесь единица?
функция y=sin(x)/x при х стремящийся к 0, имеется не определённость 0/0. При раскрытии получаем, что функция y стремиться к 1.

Ряд Тейлора для sin(x)

Делим на х получаем, что
sin(x)/x:

Откуда при подстановки x=0 получаем что sin(0)/0=1

https://www.wolframalpha.com/input/?...o+0+sin(x)%2Fx
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
У дзен программиста программа делает то что он хотел, а не то что он написал .

Последний раз редактировалось Pavia; 05.04.2016 в 16:35.
Pavia вне форума Ответить с цитированием
Старый 23.04.2016, 17:18   #16
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,964
По умолчанию

Я нашел ошибку, почему была -15я степень. Оказалось всё просто.
Функция синуса в библиотеке math.h работает в радианах, а я подставлял градусы.
Что-бы работала с градусами, нужно было подключить библиотеку Math.hpp.
В общем такая конструкция заработала - sin(DegToRad(pi)).
Вот, полностью рабочая функция:

Код:
#include <math.h>
#include <Math.hpp>

// Ряд Котельникова
// F - частота дескритизации
// M - количество отсчётов
// T - Время отсчёта
// Возвращает - Y(t)
double HarmonicKotelnik(double *Y, double T, double F, int M)
{
  double pi, dt = 1 / F, s = 0;
  for(int k = 0; k < M; k++)
  {
    pi = M_PI * (T / dt - k);
    if(pi != 0)
      s += Y[k] * (sin(DegToRad(pi))) / (pi);
    else s += Y[k];
  }
  return s;
}
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder

Последний раз редактировалось Smitt&Wesson; 23.04.2016 в 17:22.
Smitt&Wesson вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задана функция логарифмического синуса и ее разложение в ряд. Разработайте алгоритм вычисления разложения в ряд с погрешностью ξ пышь-пышь Помощь студентам 4 17.05.2013 07:49
Ряд Тейлора в С++ D.vers Помощь студентам 1 02.01.2012 13:45
вычислить функцию с по-щью разложения в ряд.(Ряд Тейлора) feelstor Помощь студентам 2 26.12.2011 03:44
по 4 в ряд mrgrudge PHP 12 11.03.2010 18:24
Ряд в С Luntik93 Помощь студентам 1 03.05.2009 13:29