psilogic: (wpriz)
psilogic ([personal profile] psilogic) wrote2015-12-26 03:59 pm

Вопрос математикам

Я тут пытаюсь оптимизировать свой алгоритм анализа спектра. И походу опять вылез вопрос с решением одной хитрой системы уравнений. Я её сейчас решаю численно, методом последовательных приближений. Что медленно. Но, возможно есть более прямое решение? Если френды-математики смогут что-то посоветовать хотя бы в какую сторону копать, буду благодарен и напишу благодарность и ссылочку на вас в соответствующем материале на сайте.

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

Итак.

Дана вот такая функция Z(m,φ,k) =


где
N - целое, положительное, известно
k - целое от 0 до N/2, известно
m - действительное, превосходящее k не более, чем на 1, неизвестная
φ - действительное (фаза) от -пи до +пи, неизвестная
j - мнимая единица,
Z(m,φ,k) - комплексная функция.
Цель - найти m,φ

Известно отношение модулей |Z(m,φ,k)|/|Z(m,φ,k+1)|, известны комплексные фазы (аргументы) Z(m,φ,k) и Z(m,φ,k+1).
Сейчас я численно решаю систему
|Z(m,φ,k)|/|Z(m,φ,k+1)| = A
Arg(Z(m,φ,k+1)) = B
- путем попеременного варьирования m,φ

Физический смысл задачи - найти частоту и фазу гармоники, которая при разложении в дискретный спектр Фурье "размазалась" на множество гармоник по той причине, что не попала точно в одну из фурье-гармоник.
Музыкальный смысл задачи - уточнить высоту ноты, которую играют или поют в данное мгновение.

Иллюстрация: нота ля-бемоль в музыкальной записи с частотой дискретизации 44100 Гц. В исходном сигнале - единственная гармоника в районе 415 Гц и амплитудой 10000, а в результате преобразования Фурье (N = 1000) получается ЭТО:



Есть идеи?

[identity profile] kray-zemli.livejournal.com 2015-12-26 02:21 pm (UTC)(link)
Преобразование Фурье -- лженаука. Смотри автокорреляционную функцию.

[identity profile] psilogic.livejournal.com 2015-12-26 02:51 pm (UTC)(link)
насколько я понимаю, надо будет смотреть корреляцию сигнала с самим собой с задержкой
и задержку увеличивать-уменьшать, пока не найдешь максимум
то есть i штук итераций над функцией со сложностью N, чтобы найти ОДНУ частоту из тех, что есть в сигнале
для m частот понадобится сложность i*N*m

а ПФ за NlogN находит сразу все m
но "размазанные"

[identity profile] kray-zemli.livejournal.com 2015-12-26 03:10 pm (UTC)(link)
Автокорреляционная функция вычисляется через БПФ за NlogN. Нужно все коэффициенты взять по модулю и возвести в квадрат, потом сделать обратное преобразование. Она самая и получится.

Там, конечно, есть нюансы и трюки, так как БПФ описывает только периодические сигналы. Например, можно после куска сигнала столько же нулей дописать, чтобы конец не наезжал на начало.

[identity profile] psilogic.livejournal.com 2015-12-26 03:21 pm (UTC)(link)
я так понял, что ты вот об этом?

В результате мы получим N значений функции для разных задержек (периодов, частот). А если у нас искомая задержка лежит в промежутке между вычисленными значениями, то возвращаемся к той же проблеме - так?