tmtlib
Oct 26 2011, 04:35
Если брать ДПФ, то всё просто - меняю частоту опорной синусоиды с необходимым шагом и перемножаю на сигнал. Работает медленно.
Чисто гипотетический пример: для низких частот шаг 1Гц, средних - 50Гц, для высоких - 100Гц.
Можно немного ускорить и взять БПФ с разрешением 1Гц вместо ДПФ, а лишние данные выкинуть. Но для высоких частот выкидывать по 99 бинов как-то расточительно. Да и тоже не особо быстро работает, точек-то много.
По сути я в поисках подобного подхода:
Есть исходные данные, пусть это 16384 отсчётов. Далее идёт нечто вроде БПФ, но для низких частот оно использует все 16384, потом где-то доходит до 8192, 4096 на средних и только для высоких, к примеру только 512,64. Соответственно в НЧ диапазоне алгоритм пыхтит, так как перемножений много, а на высоких - летает.
В принципе я представляю себе следующую картину:
пусть мы преобразование фурье в 16384 отсчёта представим в виде схемы с перемножением бабочек. Затем на спектре выделим ненужные бины и по ходу перемножения бабочек в обратную сторону занулим "деревья" перемножений, которые не будут видны в финальном спектре.
Может кто что знает, как такое называется?
GetSmart
Oct 26 2011, 04:59
Какого рода сигналы будут анализироваться?
Если простые звуковые сигналы, то в больших блоках ВЧ сигналы могут быть т.с. "необъективными".
tmtlib
Oct 26 2011, 05:19
Для высокочастотной области мне достаточно фурье по 256 точек. А вот для низких хотелось бы получить 16384. Т.е. мне хотелось бы взять такое преобразование, которое давало бы для ВЧ высокое временное разрешение и низкое частотное, а для НЧ - низкое временное разрешение и высокое частотное. Спектр при этом должен обновляться не весь сразу: быстро в ВЧ области и медленно в НЧ. Например, 1000-ный отсчёт спектра 100 раз в секунду, 1-ый - 1 раз в 100 секунд. Если спектр развернуть по времени, должен получиться равнобедренный треугольник с основанием вверху. Треугольник заполнен амплитудами. По-моему такое много где может применяться, видел где-то советовали "Q TRANSFORM", но по-моему не совсем то.
GetSmart
Oct 26 2011, 05:41
Тогда берите блоки сэмплов разной длины для разных частот (ВЧ/СЧ/НЧ). Потому как брать один длинный блок (хоть 16384) и искать в нём ВЧ, дело неблагодарное, если искать там звуки речи, музыки и многие другие.
petrov
Oct 26 2011, 09:07
Нету быстрого преобразования с не равноотстоящими частотами.
Посмотрите каскадное соединение QMF банков фильтров, например в книге Multirate Systems and Filter Banks - Vaidyanathan.
Самурай
Oct 26 2011, 09:29
Цитата(tmtlib @ Oct 26 2011, 08:35)

Может кто что знает, как такое называется?
Еще как вариант можно посмотреть Warped FFT
ivan219
Oct 26 2011, 11:38
Герцель по сравнению с ДПФ в 2 раза выгоднее.
И расчёт можно вести по одному периоду с достаточно большим разрешением на НЧ. Но разрешение по частоте будет экспоненциальное с ростом частоты разрешение падает.
Alexey Lukin
Oct 26 2011, 12:47
Разбейте сигнал на частотные полосы с помощью кроссовера, а затем к каждой полосе примените БПФ нужного размера. Для экономии вычислений полосовые сигналы с кроссовера можно прореживать.
Всё зависит от вашей задачи. Если нужно критическое сэмплирование, то вместо кроссовера используйте вейвлет-преобразование, а вместо БПФ — МДКТ.
Для просмотра полной версии этой страницы, пожалуйста,
пройдите по ссылке.