Список разделов Flyback.org.ru » Мат. каф. » sin x / x need help :)
Тему сейчас просматривают - зарегистрированных: 0, скрытых: 0 и гостей: 0
Зарегестрированные - Нет
тема: sin x / x need help :)
Ответить с цитатой

ZoneRR
 


Такая проблема.. Кто-то может подкинуть _БЫСТРЫЙ_ код массовой 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
Ответить с цитатой

Daniil
Инженер


Смотря для чего тебе это нужно. Обычно хватает добавить нулевых отсчетов. Либо во временной области, если тебе не хватает разрешения в частотной, либо в частотной а потом обратный фурье. Задачу в которой это применяется можно узнать?

Добавлено: Fri May 20, 2011 7:25 pm
Ответить с цитатой

Abramov
 


мне кажется можно отбросить кучу незначимых членов в суме ( те что при больших x)

Добавлено: Fri May 20, 2011 7:31 pm
Ответить с цитатой

ZoneRR
 


дык задача простейшая - вывести дискретный сигнал после обратного БПФ (к примеру) на звуковуху, при этом разумеется частота дискретизации звуковухи и количество семплов (их набор представляет 1 секунду времени) не совпадают(т.к звуковуха, сука, отказывается дискретизировать на частоте-степени двойки) Smile

Я сделал простейшей линейной интерполяцией, но на более-менее высоких составляющих спектр уже значительно искажается, что бесит.

Добавлено: Fri May 20, 2011 7:44 pm
Ответить с цитатой

Daniil
Инженер


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

Добавлено: Fri May 20, 2011 8:09 pm
Ответить с цитатой

Abramov
 


ну, это только самая простая реализация бпф не даст. а вообще можно.

Добавлено: Fri May 20, 2011 8:24 pm
Ответить с цитатой

Daniil
Инженер


Любая реализация именно БПФ Smile во всех других случаях там уже не все так просто.
(типа занудствую, да; обычно "БПФ" уже умеет считать массивы элементов не кратные степени двойки, только делает это медленнее чем для кратных, как раз потому что не БПФ).

Добавлено: Fri May 20, 2011 8:47 pm
Ответить с цитатой

Анна
 


Вот здесь можно покопаться: http://www.musicdsp.org/showmany.php

Там было несколько разных кодов для разных интерполяторов, в том числе полиномиальные всякие. Сплайновые, Эрмита и тд.

Добавлено: Fri May 20, 2011 8:55 pm
Ответить с цитатой

ZoneRR
 


Ну, у меня там вообще крутится БПХ ради эксперимента, так что вариант с преобразованием не на степени двойки пока не рассматриваем Smile
Что же до частоты дискретизации звуковухи - а с какого собсно перепуга она должна работать на любой частоте? Драйвер обеспечивает лишь стандартные "звуковые" частоты аля 11025 22050 44100 48000 96000 192000... И усё огорчён На остальных банально не заводится

Добавлено: Fri May 20, 2011 9:02 pm
Ответить с цитатой

Анна
 


Странно. У меня синтез-коды работают под 32768Гц. Хотя там SB16, и под досом, - может виндовые дрова не умеют, черт их знает...

Добавлено: Fri May 20, 2011 9:14 pm
Ответить с цитатой

ZoneRR
 


Не умеют. Просто не открывает аудиоустройство, если в формате задана нестандартная частота.
Да и кроме того... Тута в венде современной же микшер якобы полноценный, ну и как он будет смешивать от одной проги 32768 Гц, а от другой 96000 Гц - я себе не представляю.. Наверное потому и выпилили.
О возможности самой звуковухи дискретизировать на произвольной (в разумных пределах) частоте никто и не спорит Smile

Добавлено: Fri May 20, 2011 10:20 pm
Ответить с цитатой

Анна
 


Так вроде есть директ-режим там, в обход микшеров этих? Или никак? Всякие SoundForge и прочие CoolEdit умеют же воспроизводить файлы с левыми дискретизациями. Хотя, может и ресемплинг делают на ходу, кстати.

Добавлено: Fri May 20, 2011 11:48 pm
Ответить с цитатой

Ivanych
 


Anton если я не ошибаюсь они ресемплинг делают. Потому что на очень тупых старых компах с левыми звуковухами перед воспроизведением предварительно файл создается, вероятно из-за этого. Надо описание проги на инглише посмотреть, там должно быть написано. Блин давно не юзал, точно не уверен.

Добавлено: Sat May 21, 2011 1:46 am
Ответить с цитатой

GluckMaker
 


А, может, девствительно, какую-нибудь более "похожую на синус" интерполяцию применить, нежели линейную (кубические сплайны, например)?

Добавлено: Sat May 21, 2011 2:56 am
Ответить с цитатой

Анна
 


Да я вот тоже думаю - сплайны сделать. Коды есть (по той же ссылке), и работают (у меня работали ;-)). Эрмитова интерполяция та же - звучит вполне неплохо, по сравнению с линейной уж во всяком случае.

Добавлено: Sat May 21, 2011 1:17 pm
Список разделов Flyback.org.ru » Мат. каф. » sin x / x need help :)
    Просмотр темы целиком



Лицензионное соглашение

(c)Flyback.org.ru
Российское общество любителей высоких напряжений.
Использование материалов с данного сайта и форума возможно только с разрешения администрации.