Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Передискретизация звука методом интерполяции
Форум разработчиков электроники ELECTRONIX.ru > Цифровая обработка сигналов - ЦОС (DSP) > Алгоритмы ЦОС (DSP)
Страницы: 1, 2
soolo
Стоит казалось бы банальная задача: Сигнал с опорной частотой 44.1 кГц преобразовать в сигнал с частотой 48 кГц. Алгоритмы с FFT по некоторым причинам не подходят, поэтому было решено использовать интерполяцию. Но коэффициент 1.088 и звуки вплоть до всеми любимых 20 кГц пока что ставят нас в тупик. Алгоритмы Lanczos, B-Spline, Mittchel, Sinc результат дают, но где-то гармоники зашкаливают, где-то частоты урезаются.
В первую очередь интересуют минимальные гармонические искажения, задача вторая по степени важности - минимальный срез АЧХ. Может быть есть более подходящие для обработки звука алгоритмы? Подскажите, пожалуйста!
petrov
Полифазные фильтры + интерполятор Farrow.
soolo
Цитата(petrov @ Nov 17 2011, 14:39) *
Полифазные фильтры + интерполятор Farrow.

Спасибо, попробуем.

Буду рад и другим советам. Мощности для реализации имеются =)
SPACUM
Цитата(soolo @ Nov 17 2011, 15:35) *
Сигнал с опорной частотой 44.1 кГц преобразовать в сигнал с частотой 48 кГц.

А по классике, представить каждый отсчет слева и справа синком и просуммировать. Успех гарантирован. Легко посчитать сколько отсчетов надо брать. Но результат не радует так как синк плохо спадает и точек надо много. Думаю для любого метода их столько и нужно, а если взяли меньше - легко посчитать погрешность просуммировав остальные.
soolo
Цитата(SPACUM @ Nov 17 2011, 15:31) *
А по классике, представить каждый отсчет слева и справа синком и просуммировать. Успех гарантирован. Легко посчитать сколько отсчетов надо брать. Но результат не радует так как синк плохо спадает и точек надо много. Думаю для любого метода их столько и нужно, а если взяли меньше - легко посчитать погрешность просуммировав остальные.

Пробовали Синк со степенью полинома 3 и 5 - результат один и тот же - сильные гармонические искажения + усиление высоких частот
thermit
Не надо ничего изобретать. Все уже изобретено.
https://ccrma.stanford.edu/~jos/resample/

Вкратце - повышение частоты дискретизации в целое число раз и понижение до целевой при помощи интерполяции лагранжа (например) вырождается в полифазный фильтр+лагранж.
Fast
а зачем здесь к полифазному фильтру еще и лагранж(или фарроу) ?
тогда уж upsampling в 2 раза с помощью ФНЧ КИХ-фильтра, а там уже и Лагранж 6-8 узлов (Lanczos, B-Spline) для понижения 88.2->48
soolo
Забыл сказать в начале топика. Лишнего преобразования частоты тоже хотелось бы избежать. Т.к. задача преобразования 44.1 >> 48 скорее всего частный случай и в будущем трансформируется в преобразование в любую частоту. Насяльника у нас такая =)
petrov
Цитата(Fast @ Nov 17 2011, 17:44) *
а зачем здесь к полифазному фильтру еще и лагранж(или фарроу) ?
тогда уж upsampling в 2 раза с помощью ФНЧ КИХ-фильтра, а там уже и Лагранж 6-8 узлов (Lanczos, B-Spline) для понижения 88.2->48


Хотите умножайте нули после upsampling, обычно это полифазной структурой КИХ фильтра делают.


Цитата(soolo @ Nov 17 2011, 17:50) *
Лишнего преобразования частоты тоже хотелось бы избежать.


Ничего лишнего и нету с помощью полифазного фильтра промежуточные отсчёты вычисляются для нормальной работы дробного интерполятора Лагранжа(Фарроу).
Fast
Цитата(petrov @ Nov 17 2011, 17:57) *
Хотите умножайте нули после upsampling, обычно это полифазной структурой КИХ фильтра делают.
зачем же нули умножать в 21м веке..
смысл исключительно расширении полосы, чтобы не "накрыть" полезные составляющие спектра сигнала неравномерной частью АЧХ фильтра Лагранжа
в этом случае Лагранж можно успешно применять как на up- так и на down- sampling на любую дробную частоту
полифазные фильтры же мне кажутся громоздкими, но правда, не знаю , насколько они удобны в FPGA-реализации


petrov
Цитата(Fast @ Nov 17 2011, 18:16) *
зачем же нули умножать в 21м веке..
смысл исключительно расширении полосы, чтобы не "накрыть" полезные составляющие спектра сигнала неравномерной частью АЧХ фильтра Лагранжа
в этом случае Лагранж можно успешно применять как на up- так и на down- sampling на любую дробную частоту
полифазные фильтры же мне кажутся громоздкими, но правда, не знаю , насколько они удобны в FPGA-реализации


Вы понимаете что
Цитата(Fast @ Nov 17 2011, 17:44) *
тогда уж upsampling в 2 раза с помощью ФНЧ КИХ-фильтра
это и есть полифазный фильтр, если нули не умножать, а поменять местами upsampling и КИХ ФНЧ?.
Fast
Цитата(petrov @ Nov 17 2011, 18:26) *
Вы понимаете что это и есть полифазный фильтр, если нули не умножать, а поменять местами upsampling и КИХ ФНЧ?.
да, при упрощении. Но up-samp в 2 раза и re-samp на произвольную частоту с помощью полифазного фильтра все же разные вещи.
petrov
Цитата(Fast @ Nov 17 2011, 18:36) *
да, при упрощении.


Какое нафиг упрощение? О чём вы? Это есть натуральный полифазный фильтр.

Цитата(Fast @ Nov 17 2011, 18:36) *
up-samp в 2 раза


И не обязательно в 2, в зависимости от необходимого качества может и больше потребоваться.


Цитата(Fast @ Nov 17 2011, 18:36) *
re-samp на произвольную частоту с помощью полифазного фильтра все же разные вещи.


Про это речи вообще не было.
SPACUM
Цитата(soolo @ Nov 17 2011, 17:18) *
Пробовали Синк со степенью полинома 3 и 5 - результат один и тот же - сильные гармонические искажения + усиление высоких частот

Так и ошибка 1/(3 * PI) или 1/(5 * PI) тоже не очень(это если по 3 или по 5 в каждую сторону). При насыщенном почти равномерном спектре Фарроу 6 и 10 порядка будут еще хуже. А метод идеальный по определению. Можно ли его выполнить побыстрее для большего числа точек не знаю.
Fast
Цитата(petrov @ Nov 17 2011, 19:04) *
Какое нафиг упрощение? О чём вы? Это есть натуральный полифазный фильтр.
такой нафиг, что полифазный - это форма реализации. Полифазным может быть как КИХ, так и БИХ, к примеру, и КИХ с невысчитываемыми нулями не становится автоматом полифазным, также как не становится автоматом лагранж интерполятором фарроу, хотя фарроу одна из форм реализации лагранжа. А становится при определенных условиях реализации.
Цитата(petrov @ Nov 17 2011, 19:04) *
И не обязательно в 2, в зависимости от необходимого качества может и больше потребоваться.
и каким же образом up-samp на полифазнике в N-раз (+Фарроу) нам поднимет качество больше чем up-samp на КИХ-фильтре в 2 раза (+Фарроу)?

p.s. Могу представить только один вариант, если это Фарроу 3го порядка, с пологой АЧХ, для которого надо стабильно повышать в 4, а лучше в 8 раз сигнал. При Лагранже 8-порядка повышай хоть в 4, 8, 128 - качеству взяться неоткуда..

Цитата(SPACUM @ Nov 17 2011, 20:16) *
При насыщенном почти равномерном спектре Фарроу 6 и 10 порядка будут еще хуже. А метод идеальный по определению. Можно ли его выполнить побыстрее для большего числа точек не знаю.
при насыщенном и равномерном спектре до частоты Найквиста ничто не поможет , любая интерполяция будет с искажениями. Потому что цифровать надо было с бОльшей частотой. Никакой преселектор, ни какое АЦП с дельта-сигма-модуляцией не имеет прямоугольной характеристики фильтра НЧ. И если мы видим сильный сигнал вблизи найквиста, сто пудово часть его уже "завернулась" в полосу полезного сигнала при оцифровке
thermit
Цитата
Fast:
и каким же образом up-samp на полифазнике в N-раз (+Фарроу) нам поднимет качество больше чем up-samp на КИХ-фильтре в 2 раза (+Фарроу)?

p.s. Могу представить только один вариант, если это Фарроу 3го порядка, с пологой АЧХ, для которого надо стабильно повышать в 4, а лучше в 8 раз сигнал. При Лагранже 8-порядка повышай хоть в 4, 8, 128 - качеству взяться неоткуда..


Вообще-то ошибка интерполяции лагранжа зависит только от шага сетки и порядка полинома. Как ни трудно догадаться, для понижения ошибки интерполяции достаточно повысить порядок, или уменьшить шаг сетки (повысить частоту дискретизации), или и то и другое. Берем, повышаем частоту дискретизации раз в 10 (фнч, реализация естественно полифазная, выж в 21 веке на нули не умножаете - вот и полифазная реализация), сетка становится в 10 раз чаще и на этой сетке получаем ошибку лагранжевой кубической интерполяции такую, до которой с начально сеткой запаритесь порядок полинома повышать. Так что качество тут ограничено исключительно вычислительными способностями устройства.


Fast
Цитата(thermit @ Nov 17 2011, 22:11) *
Берем, повышаем частоту дискретизации раз в 10
а чего не в 11, или в 500 ? хотелось понять сей великий сексуальный математический смысл =))
Самурай
Цитата(soolo @ Nov 17 2011, 14:35) *
Стоит казалось бы банальная задача: Сигнал с опорной частотой 44.1 кГц преобразовать в сигнал с частотой 48 кГц. Алгоритмы с FFT по некоторым причинам не подходят, поэтому было решено использовать интерполяцию. Но коэффициент 1.088 и звуки вплоть до всеми любимых 20 кГц пока что ставят нас в тупик. Алгоритмы Lanczos, B-Spline, Mittchel, Sinc результат дают, но где-то гармоники зашкаливают, где-то частоты урезаются.
В первую очередь интересуют минимальные гармонические искажения, задача вторая по степени важности - минимальный срез АЧХ. Может быть есть более подходящие для обработки звука алгоритмы? Подскажите, пожалуйста!


Я не совсем понимаю, а что мешает Вам реализовать честный интерполятор в 48/44.1 = 160/147 раз? Честно повышаете частоту дискретизации в 160 раз, честно фильтруете наложения (тем самым полифазным фильтром, про который тут дискуссия возникла), потом честно оставляете только каждый 147-ой отсчет, остальное честно выкидываете нафигsm.gif. Тем более что Вы сами говорили, что особых ограничений на ресурсы у Вас нет. Да и какие нафиг нужны ресурсы, когда все частоты "детские"??? Для справки, 160 = 2*2*2*2*2*5, т.е. частоту можно повышать постепенно, после каждого шага фильтруете наложения, первый фильтр навскидку 100...140-ого порядка (для подавления наложений в 100...120дБ), второй фильтр примерно 15-ый порядок, остальные фильтры на уровне нуля. Реализация фильтра 100-ого порядка на частоте 44кГц (та самая полифазность) требует 5-10MIPS, о чем тут вообще говорить?
soolo
Цитата(petrov @ Nov 17 2011, 14:39) *
Полифазные фильтры + интерполятор Farrow.

Попробовали. Результат неплох, но теряются высокие частоты. При больших степенях полинома - сильные искажения
Самурай
Цитата(soolo @ Nov 17 2011, 21:53) *
Попробовали. Результат неплох, но теряются высокие частоты. При больших степенях полинома - сильные искажения


Да, еще два замечания:

1. Все фильтры для интерполяции в 2 раза можно сделать Halfband-ами, вычислительные ресурсы уменьшатся в 2 раза.
2. Если Вам нужны только стандартные частоты, то выкинуть нафиг Farrow, он в этом случае совсем не нужен. Lanczos, B-Spline, Mittchel туда жеsm.gif
thermit
Задаетесь ошибкой интерполяции для гармонического сигнала верхней частоты спектра. Гуглом можно найти формулу погрешности интерполяции. На основании ее можно вычислить соотношение между порядком полинома и шагом сетки. Ничего особо хитрого тут нет.

Цитата
soolo:
Попробовали. Результат неплох, но теряются высокие частоты. При больших степенях полинома - сильные искажения


Большие степеня полиномов и не требуются. Оверсемплинг побольше и фильтр покруче. Какие требования к преобразователю-то?
Fast
Цитата(soolo @ Nov 17 2011, 22:53) *
Попробовали. Результат неплох, но теряются высокие частоты. При больших степенях полинома - сильные искажения
фрагмент сигнала не могли бы прикрепить ? желательно PCM 16-бит line
Alexey Lukin
soolo, наиболее распространённый для аудиосигналов метод интерполяции — полифазный НЧ-фильтр. В этом случае вы полностью контролируете затухание высоких частот, величину артефактов алиасинга, импульсную и фазовую характеристики. См. статью "Тест конвертеров частоты дискретизации".
soolo
Цитата(Fast @ Nov 17 2011, 22:08) *
фрагмент сигнала не могли бы прикрепить ? желательно PCM 16-бит line

Да, конечно. Только какой сигнал интересует? До обработки интерполятором или после?
Вообще, для тестов брался обычный тестовый сигнал из программы RMAA6, обрабатывался интерполятором и возвращался обратно в программу для анализа. Ну а звуковые файлы будут естественно с полным спектром.
petrov
Цитата(soolo @ Nov 17 2011, 22:53) *
Попробовали. Результат неплох, но теряются высокие частоты. При больших степенях полинома - сильные искажения


Плохо пробовали, любое заданное качество можно получить.
soolo
Цитата(petrov @ Nov 18 2011, 10:39) *
Плохо пробовали, любое заданное качество можно получить.

Расскажите, пожалуйста, подробнее. Видимо, то, что очевидно для вас - для меня пока что тайна за семью печатями. Знания по вопросу передискретизации начал приобретать недавно, поэтому могу упускать из виду простейшие вещи.
Fast
Цитата(soolo @ Nov 18 2011, 11:19) *
Да, конечно. Только какой сигнал интересует? До обработки интерполятором или после?
Вообще, для тестов брался обычный тестовый сигнал из программы RMAA6, обрабатывался интерполятором и возвращался обратно в программу для анализа. Ну а звуковые файлы будут естественно с полным спектром.
исходный файл, до, в том виде как есть. хочу просто глянуть на спектр его и прикинуть во что выльется сложность сохранения качества.

RMAA не пользовал, только слышал об этом пакете.
а вот по ссылке Alexey Lukin очень любопытные тесты ресемплеров http://src.infinitewave.ca/
мне понравилась картинка eac3to (SSRS), сайт разработчика http://madshi.net/eac3to.zip
по ссылке есть исходники ресемплера, при беглом просмотре - это Фурье-интерполяция с окном Кайзера-Бесселя

не агитирую, но можно задуматься
soolo
Цитата(Fast @ Nov 18 2011, 11:31) *
исходный файл, до, в том виде как есть. хочу просто глянуть на спектр его и прикинуть во что выльется сложность сохранения качества.

Честно говоря, не понимаю смысла выкладывать тестовый файл. Ведь реально интерполятор будет работать с обычными звуковыми файлами (а там спектр сигнала вплоть до 20Гц-20кГц). Но файлом поделюсь. http://dl.dropbox.com/u/23094927/Test%20si...2016-bit%29.wav
Цитата(Fast @ Nov 18 2011, 11:31) *
при беглом просмотре - это Фурье-интерполяция с окном Кайзера-Бесселя

Да, Фурье решил бы все проблемы. Но, как я написал в шапке топика - от него отказались = (
petrov
Цитата(soolo @ Nov 18 2011, 12:24) *
Расскажите, пожалуйста, подробнее. Видимо, то, что очевидно для вас - для меня пока что тайна за семью печатями. Знания по вопросу передискретизации начал приобретать недавно, поэтому могу упускать из виду простейшие вещи.


Чего подробнее то? Выше уже писали. Фарроу работает тем лучше чем выше передискретизация. Увеличиваете частоту дискретизации в 2, 3, 4, 5, 6... раз с помощью КИХ ФНЧ полифазной структуры, фильтр можно рассчитать сколь угодно хороший, подавление, неравномерность, переходная полоса. Дальше интерполятор Фарроу 3 или 5 порядка. Смотрите искажения с различными параметрами передискретизации, фильтра, интерполятора.


Цитата(soolo @ Nov 18 2011, 12:48) *
Да, Фурье решил бы все проблемы. Но, как я написал в шапке топика - от него отказались = (


Не обольщайтесь на счёт FFT, ничего так часто не встречается в ЦОС как его неправильное использование.
Eger
Цитата(Самурай @ Nov 17 2011, 21:45) *
Я не совсем понимаю, а что мешает Вам реализовать честный интерполятор в 48/44.1 = 160/147 раз? Честно повышаете частоту дискретизации в 160 раз, честно фильтруете наложения (тем самым полифазным фильтром, про который тут дискуссия возникла), потом честно оставляете только каждый 147-ой отсчет, остальное честно выкидываете нафигsm.gif. Тем более что Вы сами говорили, что особых ограничений на ресурсы у Вас нет. Да и какие нафиг нужны ресурсы, когда все частоты "детские"??? Для справки, 160 = 2*2*2*2*2*5, т.е. частоту можно повышать постепенно, после каждого шага фильтруете наложения, первый фильтр навскидку 100...140-ого порядка (для подавления наложений в 100...120дБ), второй фильтр примерно 15-ый порядок, остальные фильтры на уровне нуля. Реализация фильтра 100-ого порядка на частоте 44кГц (та самая полифазность) требует 5-10MIPS, о чем тут вообще говорить?

скажите мне пожалуйста, не флуда для а пользы ради.
Вот Вы хотите увеличить частоту дискретизации в 160 раз. При этом уровень сигнала уменьшается в 160 раз, т.е. 16 битный сигнал становится фактически 9 битным. Неужели качество звука не пострадает?
des00
Цитата(Eger @ Nov 18 2011, 04:12) *
скажите мне пожалуйста, не флуда для а пользы ради.
Вот Вы хотите увеличить частоту дискретизации в 160 раз. При этом уровень сигнала уменьшается в 160 раз, т.е. 16 битный сигнал становится фактически 9 битным. Неужели качество звука не пострадает?

а что вам мешает его усилить ?
Fast
линейность ФЧХ принципиальна ?

Цитата(soolo @ Nov 18 2011, 12:48) *
Честно говоря, не понимаю смысла выкладывать тестовый файл. Ведь реально интерполятор будет работать с обычными звуковыми файлами (а там спектр сигнала вплоть до 20Гц-20кГц). Но файлом поделюсь. http://dl.dropbox.com/u/23094927/Test%20si...2016-bit%29.wav
при таком сигнале либо БИХ, либо полифазник из двух параллельных КИХ-ФНЧ в несколько сотен отсчетов
больше никак не достичь хорошей расфильтровки вблизи частоты Найквиста, если не хотите FFT
soolo
Ну вот и свершилось!
Lanczos и степень полинома 7 дали идеальный по параметрам результат.
Единственное, на слух всё-таки есть неточности в преобразовании высоких частот

Всем большое спасибо за ответы и советы. Узнал из этой темы пару фишек на будущее = )
thermit
Цитата
soolo:
Lanczos и степень полинома 7 дали идеальный по параметрам результат.



Есть подозрение, что оптимальный чебышевский фильтр вместо ланцоша даст еще более идеальный результат.
Fast
да как-то не верю, что все хорошо и звона нет
soolo, не хочу показаться назойливым, а можно теперь файл после Ланцоша 48к прикрепить ?
в последний разок
alex_os
Цитата(Самурай @ Nov 17 2011, 21:45) *
Я не совсем понимаю, а что мешает Вам реализовать честный интерполятор в 48/44.1 = 160/147 раз? Честно повышаете частоту дискретизации в 160 раз, честно фильтруете наложения (тем самым полифазным фильтром, про который тут дискуссия возникла), потом честно оставляете только каждый 147-ой отсчет, остальное честно выкидываете нафигsm.gif. Тем более что Вы сами говорили, что особых ограничений на ресурсы у Вас нет. Да и какие нафиг нужны ресурсы, когда все частоты "детские"??? Для справки, 160 = 2*2*2*2*2*5, т.е. частоту можно повышать постепенно, после каждого шага фильтруете наложения, первый фильтр навскидку 100...140-ого порядка (для подавления наложений в 100...120дБ), второй фильтр примерно 15-ый порядок, остальные фильтры на уровне нуля. Реализация фильтра 100-ого порядка на частоте 44кГц (та самая полифазность) требует 5-10MIPS, о чем тут вообще говорить?


Зачем постепенно повышать частоту дискретизации??. Если оптимизировать эту структуру и на нули не умножать и считать только те выходные отсчеты, которые нужны, то получится FIR в который данные заливаются с частотой 48 кГц а выходные данные считаются с частотой 44кГц. А коэффициенты фильтра каждый раз берутся из здоровенной таблицы. А длина фильтра вряд ли будет больше 20 sm.gif.
soolo
Цитата(Fast @ Nov 18 2011, 20:37) *
да как-то не верю, что все хорошо и звона нет
soolo, не хочу показаться назойливым, а можно теперь файл после Ланцоша 48к прикрепить ?
в последний разок

Остался на работе. В понедельник обязательно поделюсь
soolo
Цитата(soolo @ Nov 18 2011, 23:02) *
Остался на работе. В понедельник обязательно поделюсь

Как и обещал http://dl.dropbox.com/u/23094927/L7_44_48.wav
Fast
Цитата(soolo @ Nov 21 2011, 10:26) *
после Ланзоша уровень уменьшился на 3dB

а теперь посмотрите спектрограмму и мгновенный фурье-спектр в р-не 1млн отсчета (редактор CoolEdit 2.0)
скрины bmp http://depositfiles.com/files/gkpvj1uji

файл 44100.bmp - исходный
файл 48000ce.bmp - resampling с помощью CoolEdit
файл 48000lanczos.bmp - ваш Ланцош, с усилением в 3дБ

p.s.
т.е. если непонятно, то скажу вкратце - качество ужасно (особенно это заметно в области линейной прозвонки р-н 870тыс. отсчета, см. выше 20кГц)
soolo
Это не Ланцош понизил уровень, это я не мог записывать сигнал с той же амплитудой - так уж получилось =)
Результат не так и ужасен, особенно если учесть результаты других алгоритмов.
Шумы на уровне -85 дБ нас устраивают
Зато алгоритм на 100% гибкий и позволяет преобразовывать в любую частоту без увеличения вычислительной нагрузки. (Мы ушли от алгоритма "сначала увеличиваем частоту, затем уменьшаем" идёт только прямое преобразование.)
Вот результаты тестов

Неравномерность АЧХ (в диапазоне 40 Гц - 15 кГц), дБ +0.02, -0.04 Отлично
Уровень шума, дБ (А) -95.2 Отлично
Динамические диапазон, дБ (А) 94.4 Очень хорошо
Гармонические искажения, % 0.061 Средне
Гармонические искажения + шум, дБ(A) -60.6 Плохо
Интермодуляционные искажения + шум, % 0.033 Хорошо
Взаимопроникновение каналов, дБ -97.9 Отлично
Интермодуляции на 10 кГц, % 0.048 Хорошо
Общая оценка Очень хорошо

Боюсь что следующая ступенька качества возможна только с помощью Фурье
Fast
попробуйте протестировать не в среднем по больнице, а на интервале 836-994тыс. отсчеты
хотя если устраивает - вопросов нет
soolo
Цитата(Fast @ Nov 21 2011, 10:50) *
попробуйте протестировать не в среднем по больнице, а на интервале 836-994тыс. отсчеты
хотя если устраивает - вопросов нет

На те отсчёты фильтра вообще нужно кинуть =) Такого сигнала в принципе не было, это паразиты
Я же не говорю, что всё супер, я говорю, что в принципе неплохо, особенно учитывая все ограничения, которые стояли перед нами.
Fast
для интереса, т.е. чистоты эксперимента, попробуйте вот этот ФНЧ для 2x up-samp перед Lanczos
в нем 256 отводов, обе части симметричны, потребуется 128 умножений

Код
const int BL = 256;
const int16_T B[256] = {
       11,     22,      9,    -18,    -15,     14,     19,    -12,    -22,
        9,     25,     -7,    -27,      5,     29,     -4,    -31,      2,
       33,      0,    -35,     -1,     37,      3,    -40,     -5,     42,
        6,    -44,     -8,     47,     10,    -49,    -12,     52,     14,
      -54,    -16,     57,     18,    -60,    -20,     63,     22,    -66,
      -25,     69,     27,    -72,    -30,     76,     33,    -80,    -36,
       83,     39,    -87,    -43,     91,     46,    -96,    -50,    100,
       54,   -105,    -58,    110,     63,   -115,    -67,    121,     73,
     -126,    -78,    133,     84,   -139,    -90,    146,     97,   -154,
     -104,    162,    112,   -171,   -121,    180,    130,   -191,   -141,
      202,    152,   -214,   -165,    228,    179,   -243,   -195,    261,
      213,   -280,   -233,    302,    257,   -328,   -285,    359,    318,
     -395,   -358,    440,    407,   -496,   -470,    567,    553,   -664,
     -666,    800,    833,  -1008,  -1101,   1367,   1606,  -2135,  -2919,
     4946,  14721,  14721,   4946,  -2919,  -2135,   1606,   1367,  -1101,
    -1008,    833,    800,   -666,   -664,    553,    567,   -470,   -496,
      407,    440,   -358,   -395,    318,    359,   -285,   -328,    257,
      302,   -233,   -280,    213,    261,   -195,   -243,    179,    228,
     -165,   -214,    152,    202,   -141,   -191,    130,    180,   -121,
     -171,    112,    162,   -104,   -154,     97,    146,    -90,   -139,
       84,    133,    -78,   -126,     73,    121,    -67,   -115,     63,
      110,    -58,   -105,     54,    100,    -50,    -96,     46,     91,
      -43,    -87,     39,     83,    -36,    -80,     33,     76,    -30,
      -72,     27,     69,    -25,    -66,     22,     63,    -20,    -60,
       18,     57,    -16,    -54,     14,     52,    -12,    -49,     10,
       47,     -8,    -44,      6,     42,     -5,    -40,      3,     37,
       -1,    -35,      0,     33,      2,    -31,     -4,     29,      5,
      -27,     -7,     25,      9,    -22,    -12,     19,     14,    -15,
      -18,      9,     22,     11
};
\
и глянем разницу в картинках
thermit
Цитата
soolo:
Зато алгоритм на 100% гибкий и позволяет преобразовывать в любую частоту без увеличения вычислительной нагрузки.
Мы ушли от алгоритма "сначала увеличиваем частоту, затем уменьшаем" идёт только прямое преобразование.



Цитата
Боюсь что следующая ступенька качества возможна только с помощью Фурье


Да уш... ©

petrov
Цитата(thermit @ Nov 21 2011, 12:17) *
Да уш... ©


Непонятно зачем вообще вопрос задают, сами уже всё знают...
soolo
Цитата(Fast @ Nov 21 2011, 11:10) *
для интереса, т.е. чистоты эксперимента, попробуйте вот этот ФНЧ для 2x up-samp перед Lanczos

У нас нет up-samp перед Lanczos.
Я лишь тестер. Пойду бить программера, чтоб фильтровал после преобразования
Цитата(thermit @ Nov 21 2011, 11:17) *
Да уш... ©

Сам себе противоречу? Пойду убьюсь =) После полусотни тестов - в самый раз
Цитата(petrov @ Nov 21 2011, 11:30) *
Непонятно зачем вообще вопрос задают, сами уже всё знают...

Вопрос задавался, чтобы узнать пути решения проблемы. Форумчане подсказали, мы реализовали, протестировали и выбрали оптимальное для нас решение.
Теперь же вы начинаете критиковать это решение. Я уже пожалел, что написал его
petrov
Цитата(Fast @ Nov 21 2011, 12:10) *
для интереса, т.е. чистоты эксперимента, попробуйте вот этот ФНЧ для 2x up-samp перед Lanczos
в нем 256 отводов, обе части симметричны, потребуется 128 умножений


Полифазный надо делать с нечётным количеством коэффициентов, одна фаза получилась бы с одним единственным коэффициентом(ведь каждый второй выходной отсчёт равен входному), все вычисления на исходной частоте.
Fast
Цитата(soolo @ Nov 21 2011, 12:37) *
. Я уже пожалел, что написал его..
совершенно напрасно жалеете, результат он через труд сопли и кровь добывается, а не хвалебные речи и сладкие конфеты.
если мне разработчик говорит, что его уже тошнит от шлифования качества и сотой переделки, я отвечаю, если не вырвало - он еще не достиг в этом достаточного профессионального уровня. сорри за готичность.

Цитата(petrov @ Nov 21 2011, 12:40) *
..ведь каждый второй выходной отсчёт равен входному.
не могли бы пояснить этот момент, почему каждый второй идет на выход неизменным, мне кажется они не могут быть одинаковыми при любом раскладе


Цитата(soolo @ Nov 21 2011, 12:37) *
У нас нет up-samp перед Lanczos.
Я лишь тестер. Пойду бить программера, чтоб фильтровал после преобразования
упс, чуть не пропустил. Фильтровать надо ДО преобразования частоты
shkal
Посмотрите это, может быть интересно.
ad1896 datasheet
Раздел принципы работы.
petrov
Цитата(Fast @ Nov 21 2011, 15:59) *
не могли бы пояснить этот момент, почему каждый второй идет на выход неизменным, мне кажется они не могут быть одинаковыми при любом расклад


Например структура кубического Farrow, при mu=0 или 1, выходной отсчёт равен входному. У полуполосного фильтра с нечётным количеством коэффициентов каждый второй коэффициент нулевой кроме одного, что при полифазной структуре и приводит к тому что каждый второй выходной отсчёт равен входному. С чего бы входным отсчётам меняться, нам нужно всего лишь вычислить промежуточные отсчёты, одна ветка полифазника есть не что иное как дробная задержка на половину дискрета, другая выдаёт отсчёт без изменений.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.