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] psilogic.livejournal.com 2015-12-26 05:15 pm (UTC)(link)
Спасибо вам огромное, то что нужно!!!

Обязательно буду пробовать вариант 1.

Вариант 2 ясен, но для высокой точности требует вычислений огромных БПФ, что по затратам времени будет шило на мыло.

Вариант 3 - ну, собственно, приведенный выше мой алгоритм дает идеальную точность при одной гармонике в исходном сигнале, и при небольшом числе далеко разнесённых тоже всё OK. Так что я теперь заморачиваюсь вопросом производительности.

Вариант 4 - тоже обязательно попробую! И оформлю на сайте, сославшись на вас как на автора идеи - так что, если хотите увидеть там реальное ФИО вместо taras_, кидайте сюда :)