Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Object Pascal: кроссплатформенные технологии > Как задать параметры синусоиды


Автор: Ciber SLasH 3.5.2005, 16:49
Народ, помогите решить такую задачу...

1) нужно задать синусоиду на интервале t=1 сек. с периодом T=10^-3 сек. Количество периодов M=5-10 (5 или 10).
2) эту синусоиду подвергнуть преобразованию Фурье. По след. формуле:
F(f*)=корень( сумма[n=0..1000](sin(2PiFnT)*sin(2Pif*nT))^2 +
сумма[n=0..1000](sin(2PiFnT)*cos(2Pif*nT))^2 )
n = 1..1000; n[i] = sin(2PiFnT), где F - частота

----------------------

Как-то на 2-м курсе я делал лабу с синусом, но там не надо было ограничивать интервал времени и не было оговорено значение периода. Вот код той лабы:
Код

Program sinus;
Uses Crt,Graph;
const
  N = 640;
{$I InitGr.inc}  { здесь процедура инициализации граф. реж. }
var
  m: array [0..N+1] of PointType;
  i: Word;
  x0, y0, r, uf, t: real;
  dl, Amp, Fi: Integer;
begin
  InitGr;  { инициализируем графику }
  SetColor(13);
  dl := 5;      { кол-во периодов }
  Amp := 10;    { амплитуда }
  Fi := 0;      { угол поворота }
  t := 1.0001;  { сглаживающая константа }
  for i := 0 to N do
    begin
      x0 := t * i;
      y0 := GetMaxY * sin(dl*2 * pi * i / N) / Amp;
      r := sqrt(sqr(x0) + sqr(y0));
      if x0 = 0 then
        uf := 0
      else
        uf := arctan(y0 / x0);
      uf := uf + Fi * Pi / 180;
      with m[i] do
        begin
          x := Trunc(r * cos(uf));
          y := Trunc(r * sin(uf)) + GetMaxY div 2
        end
    end;
  DrawPoly(N,m);
  ReadKey;
  CloseGraph
end.

Вопрос в том как переделать её под 1-й вопрос? В этой лабе я вообще не помню каким макаром я получил такие формулы для вычисления координат синусоды. Помню только, что использовал след. формулы:
1) r = корень( x^2 + y^2 )
2) fi = arccos(x/r)
3) fi = arcsin(y/r)
4) x = r*cos(fi)
5) y = r*sin(fi)

По второму вопросу я нашёл исходник БПФ (http://alglib.sources.ru/fft/realfft.php), но там не так как в задании.
Ну да ладно, с этим вопросом с преподом потолкую. Мне бы с первым разобраться...

ЗЫ: блин, в глове уже ничего не осталось о мат.анализе smile Всё напрочь забыл...

Автор: Fedor 3.5.2005, 18:42
Ciber SLasH где конкретный вопрос! Что не получается? Ты хочешь чтоб тебе написали программу? Тогда читай правила форума.

Автор: Ciber SLasH 3.5.2005, 20:59
Вопрос: не знаю как задать синусоиду на интервале t=1 сек. с периодом T=10^-3 сек.

Автор: Romtek 3.5.2005, 23:45
Цитата(Ciber @ 3.5.2005, 20:59)
не знаю как задать синусоиду на интервале t=1 сек. с периодом T=10^-3 сек.
Нужно отобразить в интервале t -> [0 , 1] с периодом Т ?
Путём нехитрого вычисления получаем, что в заданном промежутке аж 1000 периодов. По заданию, нужно только М. Тогда будет M*T сек. - общая длина синусоиды (но не 1 сек.).
Делишь длину экрана на длину синусоиды и получаешь некоторый коэффициент k. Теперь можно задать шаг step=T/20;
При построении графика выбираешь значения x, начиная с 0.
y := sin (x);
x := x + step;

Свою предыдущую лабу оставь в покое и начни с начала. Там у тебя по непонятной причине используюутся полярные координаты, а они тебе сейчас не нужны.
Дополнительный материал: http://forum.sources.ru/index.php?showtopic=52226

Автор: Ciber SLasH 4.5.2005, 11:02
2Romtek:
Спасибо !!
Будем разбираться...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)