Такая проблема.. Кто-то может подкинуть _БЫСТРЫЙ_ код массовой sin x / x интерполяции? А именно - требуется выполнить апсемплинг сигнала (32768=2^15 дискрет) в сигнал из, к примеру, 44100 дискрет. Нужны все 44100 дискрет сразу (вообще, можно и последовательно получить их за некоторый промежуток времени, но особо это прироста не дало - пробовал). Как делал я: взял формулу отсюда http://www.radioradar.net/articles/technics_mea...lloscope_int.html , провел некоторую очевидную оптимизацию (вынес коеффициенты в массив, к примеру), но от рассчета 1445068800 произведений (и столько же сложений) с плавающей запятой 2ой точности это не спасает. Разумеется, это занимает непомерно много времени. Распараллеливать всё это дело не хочу, как не хочу юзать и CUDA. Ибо второе немного выходит за рамки темы, а первое не даст суперового прироста скорости (у меня Core i5, 2 физических ядра + HT). Удивило, что реализаций этого алгоритма я вообще не нашел. Не говоря уже про ускоренные. Просто жопой чую, что как-то можно рассчитывать намного меньше значений и ускорить алгоритм. Только вот не придумал пока, как. Добавлено: Fri May 20, 2011 7:02 pm |
Смотря для чего тебе это нужно. Обычно хватает добавить нулевых отсчетов. Либо во временной области, если тебе не хватает разрешения в частотной, либо в частотной а потом обратный фурье. Задачу в которой это применяется можно узнать? Добавлено: Fri May 20, 2011 7:25 pm |
мне кажется можно отбросить кучу незначимых членов в суме ( те что при больших x) Добавлено: Fri May 20, 2011 7:31 pm |
дык задача простейшая - вывести дискретный сигнал после обратного БПФ (к примеру) на звуковуху, при этом разумеется частота дискретизации звуковухи и количество семплов (их набор представляет 1 секунду времени) не совпадают(т.к звуковуха, сука, отказывается дискретизировать на частоте-степени двойки) Я сделал простейшей линейной интерполяцией, но на более-менее высоких составляющих спектр уже значительно искажается, что бесит. Добавлено: Fri May 20, 2011 7:44 pm |
Ну значит добавь в частотной области нулевых отсчетов до нужного количества...но правда БПФ не даст возможность считать на числе отсчетов отличающихся от степени двойки. Так что даже и не знаю. Не верится как то со звуковухой. Так что или попробуй скормить ей сигнал с большей частотой дискретизации чем ей надо, либо покури насчет звуковухи и возможности скормить ей то что ты хочешь, либо придется отказываться от БПФ и делать ДПФ. Ну как то так. Больше в голову ничего не приходит. Добавлено: Fri May 20, 2011 8:09 pm |
ну, это только самая простая реализация бпф не даст. а вообще можно. Добавлено: Fri May 20, 2011 8:24 pm |
Любая реализация именно БПФ во всех других случаях там уже не все так просто. (типа занудствую, да; обычно "БПФ" уже умеет считать массивы элементов не кратные степени двойки, только делает это медленнее чем для кратных, как раз потому что не БПФ). Добавлено: Fri May 20, 2011 8:47 pm |
Вот здесь можно покопаться: http://www.musicdsp.org/showmany.php Там было несколько разных кодов для разных интерполяторов, в том числе полиномиальные всякие. Сплайновые, Эрмита и тд. Добавлено: Fri May 20, 2011 8:55 pm |
Ну, у меня там вообще крутится БПХ ради эксперимента, так что вариант с преобразованием не на степени двойки пока не рассматриваем Что же до частоты дискретизации звуковухи - а с какого собсно перепуга она должна работать на любой частоте? Драйвер обеспечивает лишь стандартные "звуковые" частоты аля 11025 22050 44100 48000 96000 192000... И усё На остальных банально не заводится Добавлено: Fri May 20, 2011 9:02 pm |
Странно. У меня синтез-коды работают под 32768Гц. Хотя там SB16, и под досом, - может виндовые дрова не умеют, черт их знает... Добавлено: Fri May 20, 2011 9:14 pm |
Не умеют. Просто не открывает аудиоустройство, если в формате задана нестандартная частота. Да и кроме того... Тута в венде современной же микшер якобы полноценный, ну и как он будет смешивать от одной проги 32768 Гц, а от другой 96000 Гц - я себе не представляю.. Наверное потому и выпилили. О возможности самой звуковухи дискретизировать на произвольной (в разумных пределах) частоте никто и не спорит Добавлено: Fri May 20, 2011 10:20 pm |
Так вроде есть директ-режим там, в обход микшеров этих? Или никак? Всякие SoundForge и прочие CoolEdit умеют же воспроизводить файлы с левыми дискретизациями. Хотя, может и ресемплинг делают на ходу, кстати. Добавлено: Fri May 20, 2011 11:48 pm |
Anton если я не ошибаюсь они ресемплинг делают. Потому что на очень тупых старых компах с левыми звуковухами перед воспроизведением предварительно файл создается, вероятно из-за этого. Надо описание проги на инглише посмотреть, там должно быть написано. Блин давно не юзал, точно не уверен. Добавлено: Sat May 21, 2011 1:46 am |
А, может, девствительно, какую-нибудь более "похожую на синус" интерполяцию применить, нежели линейную (кубические сплайны, например)? Добавлено: Sat May 21, 2011 2:56 am |
Да я вот тоже думаю - сплайны сделать. Коды есть (по той же ссылке), и работают (у меня работали ;-)). Эрмитова интерполяция та же - звучит вполне неплохо, по сравнению с линейной уж во всяком случае. Добавлено: Sat May 21, 2011 1:17 pm |
Лицензионное соглашение (c)Flyback.org.ru Российское общество любителей высоких напряжений. Использование материалов с данного сайта и форума возможно только с разрешения администрации. |