Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Построение спектра функции.  (Прочитано 9872 раз)
0 Пользователей и 2 Гостей смотрят эту тему.
Aether
Специалист

ru
Offline Offline
Пол: Мужской

« : 25-10-2017 18:31 » 

Добрый вечер.

Хочу поинтересоваться, предположим есть некая функция f(x) заданная в интервале [x1 ... x2] массивом значений. Нужно понять из каких гармонических колебаний она состоит? Иными словами, её нужно разделить на сумму выражений:
Fn(x) = An * sin(Bn * x + Cn).

Сначала я подумал что-то сделать на базе ряда Фурье, но потом меня озадачило: ряд оперирует гармониками, то есть, предположим мы смешаем два сигнала:
F1(x) = sin(x) и F2(x) = sin(2 * x + 2)
разложение будет выполнено правильно, так как множители у x являются целыми числами. А в случае:
F1(x) = sin(x) и F2(x) = sin(1,32 * x + 2)
разложение будет не корректное - второй член будет преобразован в некую сумму из функций:
F1(x) = sin(x), F2(x) = ? * sin(2 * x + ?), F3(x) = ? * sin(3 * x + ?) ...

С некоторого момента я стал задумываться, что такие задачи не решаются, так как при разложении на некие разные группы дискретных частот можно получать разные, но в то же время корректные с точки зрения описания результаты. А с другой стороны, решают же задачи, например, анализа музыки на слух.

В общем, это мысли вслух, но мало ли кто-то уже решал что-то похожее?
Записан
Ochkarik
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #1 : 25-10-2017 20:11 » 

чтобы разложить бесконечную (не повторяющуюся) по времени функцию в ряд - необходимо разложение на бесконечном интервале времени, в случае ДПФ это приводит к бесконемному количеству членов. если коротко)
задача то какая?
Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
Ochkarik
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #2 : 25-10-2017 20:14 » 

а пардон, первый же абзац забыл.
в случае задания конечного по времени интервала в виде конечного массива значений - ошибок не будет.
в конечном и дискретном - не будет гармоник не укладывающихся в ряд.
PS если конечно частота дискретизации константа.
PPS и разложение должно быть по всему массиву конечно. если длинна не 2^n то вместо БПФ придется просто дискретное преобразование брать либо расширить интервал нулями
« Последнее редактирование: 25-10-2017 20:23 от Ochkarik » Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
Aether
Специалист

ru
Offline Offline
Пол: Мужской

« Ответ #3 : 25-10-2017 20:56 » 

задача то какая?
Суть в том, чтобы найти в выборке частоты на которые приходятся максимумы.
Например, произведём имитацию:
f(x) = sin(x + 3) + 3 * sin(1.27 * x + 11) + 2 * sin(4.3 * x + 1)
По этой функции вычислим массив: xi = 0, 0.1 ... 10.0 и fi = f(xi).
Теперь по данным xi и fi необходимо произвести анализ, чтобы найти вот эти самые коэффициенты перед "х", то есть:
первый максимум на частоте 1.27 и равен 3.0,
второй максимум на частоте 4.30 и равен 2.0,
третий максимум на частоте 1.00 и равен 1.0.

Как бы вспоминаю про ряды Фурье, но там была суть в аппроксимации по гармоническим частотам, а не в поиске максимумов. То есть, после вычисления я получу некую группу функций:
f_fur(x) = a0 + a1 * sin(x + b1) + a2 * sin(2 * x + b2) + ... до требуемой точности интерполяции. При этом анализируемые частоты будут целыми числами: 0, 1, 2, 3 ...
Записан
Ochkarik
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #4 : 25-10-2017 22:00 » 

если шкала времени описывается t=i*T, где T- период дискретизации (что равносильно частоте дискретизации F=1/T)
при разложении конечной по времени на интервале 0..N функции, представленной в виде ряда дискретных точек x(i*T)
после разложения в ряд фурье на этом интервале 0..N - набор гармоник так же будет дискретен с частотами кратными частоте дискретизации 1/Т. гармоники будут с частотами k/T, где k=0..N
применительно к вышеописанному, если xi = 0, 0.1 ... 10.0 - шкала дискретного времени с фиксированным шагом 0.1, от 0 до 10 (N=100) - то найденные коэффициенты разложения абсолютно точны при разложении в ряд фурье количество точек которого равно количеству точек отрезка.
и все частоты соответственно будут кратны 1/10.0

с математикой вот тут, но лучше не смотреть)
Дискретное преобразование Фурье
« Последнее редактирование: 25-10-2017 22:08 от Ochkarik » Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
Aether
Специалист

ru
Offline Offline
Пол: Мужской

« Ответ #5 : 26-10-2017 08:10 » 

Что-то тут не так. Согласно Вашим утверждениям, как я понял, ряд гармоник будет:
0.1 - 0.2 - 0.3 - 0.4 - 0.5 - 0.6 ...
А что произойдёт, если сигнал имеет частоту 0.35? Скорее всего этот подход приведёт к тому, что вместо одного максимума в результате будет показано два. Или же оставить как есть, и увеличить частоту дискретизации, чтобы повысить точность?
Записан
Ochkarik
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #6 : 26-10-2017 08:39 » new

да. либо увеличить интервал.

PS я там ошибся, гармоники будут не с частотами k/T  а с шагом  1/(N*T)
то есть верхняя граничная частота спектра - определяется дискретизацией 1/T .\
а шаг между палками фурье - числом точек преобразования N (величиной интервала преобразования N*T).
« Последнее редактирование: 26-10-2017 11:15 от Ochkarik » Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
Aether
Специалист

ru
Offline Offline
Пол: Мужской

« Ответ #7 : 26-10-2017 14:12 » 

Спасибо, начал углубляться в математику.
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines