(*~\Глагол\Отделы\ЧисАн\64\к\Пара\~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
(**)                        ОТДЕЛ кпВектор;
(*============================================================================*
 * НАЗНАЧЕНИЕ: определение комплексных векторов (рядов)
 *          в виде пары вещественных векторов <дВход,мВход> вида дВектор.Вид
 *                                          из вещественных вида дМатем.Вещ
 *               и основные вычисления над этими комплексными парами-векторами
 *============================================================================*)

ИСПОЛЬЗУЕТ
 дМатем   ИЗ "..\..\..\..\..\Отделы\ЧисАн\64\д\",
 дВектор  ИЗ "..\..\..\..\..\Отделы\ЧисАн\64\д\",

кпМатем   ИЗ "..\..\..\..\..\Отделы\ЧисАн\64\к\Пара\",   (* = дМатем.Вещ *)
(*
кпВектВВ  ИЗ "..\..\..\..\..\Отделы\ЧисАн\64\к\Пара\ВводВывод\",  

  НаЭкран ИЗ "..\..\..\..\..\Отделы\Обмен\ВводВывод\";
*)
кпЦОС     ИЗ "..\..\..\..\..\Отделы\ЦОС\64\к\Пара\";

ВИД                                  
        (* вид Вещ - это удвоенная точность 64 разряда (16 десятичных знаков) *)
  Вещ = дМатем.Вещ;                   (* локально *)
(*
основной Вид отдела:
                     Вид- = дВектор.Вид;        (* вектор  из вещ.чисел, пара вещ.векторов = компл.вектор *)
                 или
                     Вид- = РЯД ИЗ Вещ;         (* вектор  из вещ.чисел, пара вещ.векторов = компл.вектор *)
  Доступ- = ДОСТУП К Вид;              (* доступ к вектору из вещ.чисел, пара вещ.векторов = компл.вектор *)
*)


(*-оооооооооооооо- опережающие определения/заготовки задач -ооооооооооооооооо-*)


(*----------------------------------------------------------------------------*
 * арифметические действия над комплексными векторами в виде пары <дВход,мВход> вещ.векторов
 *----------------------------------------------------------------------------*)

ЗАДАЧА^ умнНаВещ-(дВход- ,мВход- :дВектор.Вид; v:Вещ; 
                  дВыход+,мВыход+:дВектор.Вид);    (* кВыход:=кВход*v - умножение вектора на вещ. v *)
ЗАДАЧА^ делНаВещ-(дВход- ,мВход- :дВектор.Вид; v:Вещ; 
                  дВыход+,мВыход+:дВектор.Вид);    (* кВыход:=кВход/v - деление   вектора на вещ. v *)

ЗАДАЧА^ увеличВдейств-(                        v:Вещ;
                  дВект+,мВект+:дВектор.Вид);      (* кВект *= v - увеличить себя в действ. число v раз *)
ЗАДАЧА^ уменьшВдейств-(                        v:Вещ;
                  дВект+,мВект+:дВектор.Вид);      (* кВект /= v - уменьшить себя в действ. число v раз *)

ЗАДАЧА^ умнНаКомпл-(дВход- ,мВход- :дВектор.Вид; дW,мW:Вещ;
                    дВыход+,мВыход+:дВектор.Вид); (* кВыход:=кВход*w - умножение вектора на компл. w *)
ЗАДАЧА^ делНаКомпл-(дВход- ,мВход- :дВектор.Вид; дW,мW:Вещ;
                    дВыход+,мВыход+:дВектор.Вид); (* кВыход:=кВход/w - деление   вектора на компл. w *)

ЗАДАЧА^ увеличВкомпл- (                          дW,мW:Вещ;
                  дВект+,мВект+:дВектор.Вид);        (* кВект *= w - увеличить себя в компл. число w раз *)
ЗАДАЧА^ уменьшВкомпл- (                          дW,мW:Вещ;
                  дВект+,мВект+:дВектор.Вид);        (* кВект /= w - уменьшить себя в компл. число w раз *)


(*----------------------------------------------------------------------------*
 * Переписывание комплексных векторов в виде пары <дВход,мВход> вещ.векторов
 *----------------------------------------------------------------------------*)

ЗАДАЧА^ Списать-(дВход-,  мВход-,
                 дВыход+,мВыход+:дВектор.Вид);
(* Цель: Переписывание комплексных векторов в виде пары *)


(*----------------------------------------------------------------------------*
 * Выставка вектора компл.чисел в виде пары <дВход,мВход> вещ.векторов
 *----------------------------------------------------------------------------*)

 (* Инициализация комплексной пары векторов:
                                             действительным Sin-сигналом      *)
ЗАДАЧА^ Выставка_в_дSin-(        дВект+,
                                 мВект+:дВектор.Вид);

 (* Инициализация комплексной пары векторов:
                                             действительным Sin-сигналом +1 +
                                                     мнимый Sin-сигнал        *)
ЗАДАЧА^ Выставка_в_дSin_1_мSin-( дВект+,
                                 мВект+:дВектор.Вид);

 (* Инициализация комплексной пары векторов:
                                             действительным линейным сигналом *)
ЗАДАЧА^ Выставка_в_линию_Действ-(дВект+,
                                 мВект+:дВектор.Вид);


(*----------------------------------------------------------------------------*)
ЗАДАЧА^ ДПФi-(прямое-:КЛЮЧ;       гармоника_i:ЦЕЛ;
              дВход-, мВход- :дВектор.Вид;
              дВых_i+,мВых_i+:Вещ);
(*
 * Цель:  прямое/обратное Дискретное Преобразование Фурье для i-й гармоники
 *           (НЕ алгоритм Герцеля, а от Издателя Глагола)
 *                                           [в спектре(ДПФ)/в сигнале(ОДПФ)]
 *) 


(*=рррррррррррррррррррррррр= реализация задач =рррррррррррррррррррррррррррррр=*)


(*============================================================================*
 * арифметические действия над комплексными векторами в виде пары <дВход,мВход> вещ.векторов
 *============================================================================*)

(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА умнНаВещ-(дВход- ,мВход- :дВектор.Вид; v:Вещ; 
                 дВыход+,мВыход+:дВектор.Вид);    (* кВыход:=кВход*v - умножение вектора на вещ. v *)
(*
 * Цель: умножение компл.вектора, представленного в виде пары <дВход, мВход> вещ.векторов
 *                                       на вещественное v => <дВыход,мВыход>
 *)
ПЕР
          (* N:ЦЕЛ; *)    (* размер вектора = рабочая длина вектора N - любая заданная *)
     i:ЦЕЛ;
УКАЗ      (*       нормировка на вещественное v
             комплексного вектора в виде пары <дВход,мВход> вещ.векторов
           *)
          (* N:=РАЗМЕР(дВход); *)
  ОТ i:=0 ДО    РАЗМЕР(дВход)-1 ВЫП
    кпМатем.умнНаВещ(  дВход[i], мВход[i],    v,
                       дВыход[i],мВыход[i])        (* кВыход[i] = кВход[i]*v  *)
  КОН
КОН умнНаВещ;

(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА делНаВещ-(дВход- ,мВход- :дВектор.Вид; v:Вещ; 
                 дВыход+,мВыход+:дВектор.Вид);    (* кВыход:=кВход/v - деление   вектора на вещ. v *)

(*
 * Цель: деление компл.вектора, представленного в виде пары <дВход, мВход> вещ.векторов
 *                                     на вещественное v => <дВыход,мВыход>
 *)
ПЕР
          (* N:ЦЕЛ; *)    (* размер вектора = рабочая длина вектора N - любая заданная *)
     i:ЦЕЛ;
  обр_v:Вещ;
УКАЗ      (*       нормировка на вещественное 1/v
             комплексного вектора в виде пары <дВход,мВход> вещ.векторов
           *)
  обр_v:=1/v;
          (* N:=РАЗМЕР(дВход); *)
  ОТ i:=0 ДО    РАЗМЕР(дВход)-1 ВЫП
(*
    кпМатем.делНаВещ(  дВход[i], мВход[i],    v,
                       дВыход[i],мВыход[i])      (* кВыход[i]= кВход[i]/v     *)
 *)
    кпМатем.умнНаВещ(  дВход[i], мВход[i], обр_v,
                       дВыход[i],мВыход[i])      (* кВыход[i]= кВход[i]*обр_v *)
  КОН
КОН делНаВещ;

(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА увеличВдейств-(                        v:Вещ;
                 дВект+,мВект+:дВектор.Вид);      (* кВект *= v - увеличить себя в действ. число v раз *)
(*
 * Цель: самоумножение компл.вектора, представленного в виде пары <дВект,мВект> вещ.векторов
 *                                           на вещественное v => <дВект,мВект>
 *)
ПЕР
          (* N:ЦЕЛ; *)    (* размер вектора = рабочая длина вектора N - любая заданная *)
     i:ЦЕЛ;
УКАЗ      (*       нормировка на вещественное v
             комплексного вектора в виде пары <дВект,мВект> вещ.векторов
           *)
          (* N:=РАЗМЕР(дВект); *)
  ОТ i:=0 ДО    РАЗМЕР(дВект)-1 ВЫП
    кпМатем.увеличВдейств(                    v,
                       дВект[i],мВект[i])                   (* кВект[i] *= v  *)
  КОН
КОН увеличВдейств;

(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА уменьшВдейств-(                        v:Вещ;
                 дВект+,мВект+:дВектор.Вид);      (* кВект /= v - уменьшить себя в действ. число v раз *)
(*
 * Цель: самоделение компл.вектора, представленного в виде пары <дВект,мВект> вещ.векторов
 *                                         на вещественное v => <дВект,мВект>
 *)
ПЕР
          (* N:ЦЕЛ; *)    (* размер вектора = рабочая длина вектора N - любая заданная *)
     i:ЦЕЛ;
УКАЗ      (*       нормировка на вещественное 1/v
             комплексного вектора в виде пары <дВект,мВект> вещ.векторов
           *)
          (* N:=РАЗМЕР(дВект); *)
  ОТ i:=0 ДО    РАЗМЕР(дВект)-1 ВЫП
    кпМатем.уменьшВдейств(                    v,
                       дВект[i],мВект[i])                   (* кВект[i] /= v  *)
  КОН
КОН уменьшВдейств;

(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА умнНаКомпл-(дВход- ,мВход- :дВектор.Вид; дW,мW:Вещ;
                   дВыход+,мВыход+:дВектор.Вид); (* кВыход:=кВход*w - умножение вектора на компл. w *)
(*
 * Цель: умножение компл.вектора, представленного в виде пары <дВход, мВход> вещ.векторов
 *                             на комплексную пару <дW,мW> => <дВыход,мВыход>
 *)
ПЕР
          (* N:ЦЕЛ; *)    (* размер вектора = рабочая длина вектора N - любая заданная *)
     i:ЦЕЛ;
УКАЗ      (*       нормировка на комплексное w (обычное комплексное умножение)
             комплексного вектора в виде пары <дВход,мВход> вещ.векторов
           *)
          (* N:=РАЗМЕР(дВход); *)
  ОТ i:=0 ДО    РАЗМЕР(дВход)-1 ВЫП
    кпМатем.умножить(  дВход[i], мВход[i],      дW,мW,
                       дВыход[i],мВыход[i])        (* кВыход[i] = кВход[i]*w  *)
  КОН
КОН умнНаКомпл;

(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА делНаКомпл-(дВход- ,мВход- :дВектор.Вид; дW,мW:Вещ;
                   дВыход+,мВыход+:дВектор.Вид); (* кВыход:=кВход/w - деление   вектора на компл. w *)
(*
 * Цель: деление компл.вектора, представленного в виде пары <дВход, мВход> вещ.векторов
 *                           на комплексную пару <дW,мW> => <дВыход,мВыход>
 *)
ПЕР
          (* N:ЦЕЛ; *)    (* размер вектора = рабочая длина вектора N - любая заданная *)
     i:ЦЕЛ;
УКАЗ      (*       нормировка на комплексное 1/w (обычное комплексное деление)
             комплексного вектора в виде пары <дВход,мВход> вещ.векторов
           *)
          (* N:=РАЗМЕР(дВход); *)
  ОТ i:=0 ДО    РАЗМЕР(дВход)-1 ВЫП
    кпМатем.делить(    дВход[i], мВход[i],      дW,мW,
                       дВыход[i],мВыход[i])        (* кВыход[i] = кВход[i]*w  *)
  КОН
КОН делНаКомпл;

(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА увеличВкомпл- (                          дW,мW:Вещ;
                 дВект+,мВект+:дВектор.Вид);        (* кВект *= w - увеличить себя в компл. число w раз *)
(*
 * Цель: самоумножение компл.вектора, представленного в виде пары <дВект,мВект> вещ.векторов
 *                                 на комплексную пару <дW,мW> => <дВект,мВект>
 *)
ПЕР
          (* N:ЦЕЛ; *)    (* размер вектора = рабочая длина вектора N - любая заданная *)
     i:ЦЕЛ;
УКАЗ      (*       нормировка на комплексное  w (обычное комплексное умножение)
             комплексного вектора в виде пары <дВект,мВект> вещ.векторов
           *)
          (* N:=РАЗМЕР(дВект); *)
  ОТ i:=0 ДО    РАЗМЕР(дВект)-1 ВЫП
    кпМатем.увеличВкомпл(                       дW, мW,
                       дВект[i],мВект[i])                   (* кВект[i] *= w  *)
  КОН
КОН увеличВкомпл;

(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА уменьшВкомпл- (                          дW,мW:Вещ;
                 дВект+,мВект+:дВектор.Вид);        (* кВект /= w - уменьшить себя в компл. число w раз *)
(*
 * Цель: самоделение компл.вектора, представленного в виде пары <дВект,мВект> вещ.векторов
 *                               на комплексную пару <дW,мW> => <дВект,мВект>
 *)
ПЕР
          (* N:ЦЕЛ; *)    (* размер вектора = рабочая длина вектора N - любая заданная *)
     i:ЦЕЛ;
УКАЗ      (*       нормировка на комплексное 1/w (обычное комплексное деление)
             комплексного вектора в виде пары <дВект,мВект> вещ.векторов
           *)
          (* N:=РАЗМЕР(дВект); *)
  ОТ i:=0 ДО    РАЗМЕР(дВект)-1 ВЫП
    кпМатем.уменьшВкомпл(                       дW, мW,
                       дВект[i],мВект[i])                   (* кВект[i] /= w  *)
  КОН
КОН уменьшВкомпл;


(*============================================================================*
 * Переписывание комплексного вектора в виде пары <дВход,мВход> вещ.векторов
 *============================================================================*)


(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА Списать-(дВход-,  мВход-,
                дВыход+,мВыход+:дВектор.Вид);
      (* Цель: Переписывание комплексного вектора в виде пары вещ.векторов *)
ПЕР
     i:ЦЕЛ;
          (* N:ЦЕЛ; *)    (* размер вектора = рабочая длина вектора N - любая заданная *)
УКАЗ
          (* N:=РАЗМЕР(дВход); *)
  ОТ i:=0 ДО    РАЗМЕР(дВход)-1 ВЫП
    дВыход[i]:=дВход[i];
    мВыход[i]:=мВход[i]
  КОН
КОН Списать;


(*============================================================================*
 * Выставка комплексного вектора в виде пары <дВход,мВход> вещ.векторов
 *============================================================================*)


(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
 (* Инициализация комплексной пары векторов:
                                             действительным Sin-сигналом      *)
ЗАДАЧА Выставка_в_дSin-(дВект+,
                        мВект+:дВектор.Вид);
ПЕР
    i:ЦЕЛ;
                                 t,
   dT:Вещ;
             N:ЦЕЛ;       (* размер вектора = рабочая длина вектора N - любая заданная *)
УКАЗ
             N:=РАЗМЕР(дВект);

      (* заполняем комплексную пару векторов
                                             действительным sin-сигналом      *)
   dT:=дМатем.ДваПИ*(1/N);
                                 t:=0;
  ОТ i:=0 ДО N-1 ВЫП
                  (* <дМатем.sin(t); 0>   - вид входного комплексного сигнала *)
    кпМатем.алгебрВид(дМатем.sin(t), 0,            дВект[i],мВект[i]);
(*
    кпМатем.алгебрВид(дМатем.sin(t),дМатем.cos(t), дВект[i],мВект[i]);
 *)
    t:=t+dT              (* 0 <= t <= 2ПИ*(N-1)/N *)
  КОН
КОН Выставка_в_дSin;

(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
 (* Инициализация комплексной пары векторов:
                                             действительным Sin-сигналом +1 +
                                                     мнимый Sin-сигнал        *)
ЗАДАЧА Выставка_в_дSin_1_мSin-(дВект+,
                               мВект+:дВектор.Вид);
ПЕР
     i:ЦЕЛ;
                                 t,
    dT:Вещ;
             N:ЦЕЛ;       (* размер вектора = рабочая длина вектора N - любая заданная *)
УКАЗ
             N:=РАЗМЕР(дВект);

       (* заполняем комплексную пару векторов
                                              действительным Sin-сигналом  +1 *)
         dT:=дМатем.ДваПИ*(1/N);
                                 t:=0;
  ОТ i:=0 ДО N-1 ВЫП
                  (* <дМатем.sin(t);0> - вид входного комплексного сигнала *)
    кпМатем.алгебрВид(дМатем.sin(t),0,             дВект[i],мВект[i]);
                                               (* <дВект[i],мВект[i]> = <sin(t),0> *)
(*
    кпМатем.алгебрВид(дМатем.sin(t),дМатем.cos(t), дВект[i],мВект[i]);
 *)
     (* добавляем к комплексной паре векторов
                                              действительный единичный сигнал *)
    кпМатем.добавить(кпМатем.дДействЕДИНИЦы,
                     кпМатем.мДействЕДИНИЦы,       дВект[i],мВект[i]);
                                               (* <дВект[i],мВект[i]> += < 1,0 > *)
                 (* Постоянная = <1;0> - вид входного комплексного сигнала 
    кпМатем.алгебрВид(1,0,                         дВект[i],мВект[i]);
                  *)
    t:=t+dT              (* 0 <= t <= 2ПИ*(N-1)/N *)
  КОН;
                  (* добавляем к комплексной паре векторов
                                                           мнимый  Sin-сигнал *)
         dT:=дМатем.ДваПИ*(3/N);
                                    t:=0;
  ОТ i:=0 ДО N-1 ВЫП
                  (* <0; дМатем.sin(t)>   - вид входного комплексного сигнала *)
    кпМатем.добавить( 0, дМатем.sin(t),            дВект[i],мВект[i]); (* += <0,дМатем.sin(t)> *)
(*
    кпМатем.алгебрВид(0, дМатем.sin(t),Xд,Xм);
    кпМатем.добавить(                  Xд,Xм,      дВект[i],мВект[i]); 
                                               (* <дВект[i],мВект[i]> += <Xд,Xм> *)
 *)
    t:=t+dT                 (* 0 <= t <= 2ПИ*(N-1)/N *)
  КОН
КОН Выставка_в_дSin_1_мSin;

(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
 (* Инициализация комплексной пары векторов:
                                             действительным линейным сигналом *)
ЗАДАЧА Выставка_в_линию_Действ-(дВект+,
                                мВект+:дВектор.Вид);
ПЕР
     i:ЦЕЛ;
          (* N:ЦЕЛ; *)    (* размер вектора = рабочая длина вектора N - любая заданная *)
УКАЗ
          (* N:=РАЗМЕР(дВект); *)
  ОТ i:=0 ДО    РАЗМЕР(дВект)-1 ВЫП
    кпМатем.алгебрВид(i,0,дВект[i],мВект[i])
  КОН
КОН Выставка_в_линию_Действ;



(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА ДПФi-(прямое-:КЛЮЧ;       гармоника_i:ЦЕЛ;
             дВход-, мВход- :дВектор.Вид;
             дВых_i+,мВых_i+:Вещ);
(*
 * Цель:  прямое/обратное Дискретное Преобразование Фурье для i-й гармоники
 *           (НЕ алгоритм Герцеля, а от Издателя Глагола)
 *----------------------------------------------------------------------------*
 * До:    <прямое> - логическая/КЛЮЧ переменная - признак
 *                           прямого <ВКЛ>                      ( ДПФ)
 *                     или обратного <ОТКЛ> ДПФ-преобразования  (ОДПФ)
 *        <гармоника_i> - номер заданной комплексной гармоники в вых.спектре
 *        <дВход,мВход> - входной комплексный вектор в виде пары
 *          вещественных векторов - временной сигнал(ДПФ)/спектр(ОДПФ)
 * После: <дВых_i,мВых_i> - i-й комплексный коэффициент разложения входа
 *                         в виде пары вещественных <действительное;мнимое>
 *                                           [в спектре(ДПФ)/в сигнале(ОДПФ)]
 *) 
ПЕР
  j:ЦЕЛ;
  v,
  дваПИнаN:Вещ;
  дX,мX,дY,мY,
  дК,мК,
  дYi,мYi:Вещ;

            N:ЦЕЛ;        (* размер вектора = рабочая длина вектора N - любая заданная *)
УКАЗ
            N:=РАЗМЕР(дВход);
  ПРОВЕРИТЬ(N > 1);                           (* и остановить работу при N<=1 *)
(*
  кпВектВВ.наЭкран("^дВход,мВход = (%24.17e;%24.17e)",дВход,мВход);
*)
  (* постоянный множитель в аргументе комплексных ДПФ-экспонент дX,мX и дY,мY *)
  ЕСЛИ прямое ТО (* прямое=ВКЛ *)
                                    дваПИнаN := -дМатем.ДваПИ/N      (* в ДПФ *)
  ИНАЧЕ          (* прямое=ОТКЛ, т.е. обратное *)
                                    дваПИнаN := +дМатем.ДваПИ/N     (* в оДПФ *)
  КОН;
                         (* вычисление ДПФ-экспонент: дX,мX и дY,мY *)
      кпЦОС.expДПФ(-2*гармоника_i*дваПИнаN,дX,мX);(* кX =<cos(-2*i*дваПИнаN);
                                                          sin(-2*i*дваПИнаN)> *)
                                                  (* кX:=кY*кY; - ? *)
      кпЦОС.expДПФ(  -гармоника_i*дваПИнаN,дY,мY);(* кY =<cos(  -i*дваПИнаN);
                                                          sin(  -i*дваПИнаN)> *)
                     (* dW=кY *)
  v:=2*дY;                                    (* v - постоянный вещ.множитель *)

                              (* накопление в Yi=<0;0> суммы комплексных по j *)
  дYi:=кпМатем.дКомплексногоНОЛЯ;
  мYi:=кпМатем.мКомплексногоНОЛЯ;

  ОТ j:=0 ДО N-1 ВЫП
    кпМатем.умнНаВещ(дY,мY,v,дК,мК);      (*           К      = кY * v        *)
    кпМатем.отнять(    дX,мX,дК,мК);      (*         К=К - кX = кY * v - кX   *)

    дX:=дY;   мX:=мY;                 (* кX:=кY, кY:=К - для следующего j     *)
        дY:=дК;   мY:=мК;

    кпМатем.суммаПроизведений(дВход[j],мВход[j],дК,мК,дYi,мYi);
                                                    (* Yi:=Yi +   К*кВход[j] - накопление произведений *)
(*
    кпМатем.увеличВкомпл(дВход[j],мВход[j],дК,мК);  (*        К = К*кВход[j]    *)
    кпМатем.добавить(дК,мК,дYi,мYi)                 (* Yi:=Yi+К - накопление произведений  *)
*)
  КОН;
  дВых_i:=дYi;
  мВых_i:=мYi
КОН ДПФi;

КОН кпВектор.
