Консультация № 174677
29.11.2009, 17:16
0.00 руб.
0 4 0
Здравствуйте. Уже задавал этот вопрос, рекомендовали несколько книг По ДПФ. В частности интересует само дискретное преобразование, только не теория, а применение на практике. Почитал уже много книг на эту тему, но везде одна теория и формулы с мнимой единицей. Также есть исходники, где вычисляется омега(корень n степени из -1), причем сама мнимая единица обозначена как i(Вроде бы конечно все понятно на бумаге, а вот применить на практике...). Конечно, компилятору может быть это и понятно, но допустим контроллеру на ассемблере этого не объяснить... Ему нужны только нулики и единички. Причем мнимая единица используется только в множителях, которые можно вычислить заранее и вбить жестко в память(единственная зацепка, которую нашел в теории, так это то, что мнимая единица превращается в действительную + 1 или - 1 при возведении в четную степень, в нечетную опять в мнимую + или -1). После этого ДПФ как мне показалось не будет представлять большой сложности. Конечно на практике используется чаще БПФ, но как выянилось из литературы БПФ это всего лишь алгоритм быстрого вычисления ДПФ и по сути это одно и тоже, только быстрее.
В частности пытаюсь на самом простом примере в экселе произвести расчет ДПФ. Для начала задался синусоидой частотой 20 кГц. частотой дискретизации 312,5 кГц. и для значений в 8 точках вычислил амплитуду. По вычисленной амплитуде построил график на втором листе... И пока дальше сколько не бился дело не пошло, т.к. не хватает понимания... Проштудировал кучу сайтов, учебник по вышке в отношении комплексных чисел, но так и не понял, каким же образом вычисляется ДПФ, когда имеется мнимая единица?
В идеальном случае было неплохо посмотреть на реализацию ДПФ или еще лучше БПФ в числах и формулах, хотя бы на листе эксель для моих исходных данных. На выходе должен получиться спектр и амплитуда входного сигнала...
Необходимо для практической реализации, само собой и для собственного понимания. Но пока скорее для собственного понимания. Также интересует любой практический вариант, который поможет разобраться в этом вопросе...

Приложение:
BPF.xls
здесь выложил свои исходные данные...

Обсуждение

давно
Профессор
230118
3054
07.12.2009, 14:35
общий
Dark128:
Предлагаю использовать класс комплексных чисел в STL C++.
давно
Профессор
230118
3054
07.12.2009, 14:45
общий
Dark128:
Комплексное число можно рассматривать как вектор (x,y). Мнимая единица - (0,1)
Правило произведения комплесных чисел (a,b)*(c,d)=(a*c-b*d, a*d+c*b)
Неизвестный
07.12.2009, 19:14
общий
Предлагаю использовать класс комплексных чисел в STL C++.
Это невозможно в принципе, программа будет на голом ассемблере...
давно
Профессор
230118
3054
07.12.2009, 19:22
общий
Dark128:
Так ассемблер или Excel? Мне кажется, мнимая единица употребляется для удобства, чтобы разделить синусы и косинусы. Вспомните формулу Эйлера.
Форма ответа