Перейти к содержанию
    

Передискретизация звука методом интерполяции

Fast:

и каким же образом up-samp на полифазнике в N-раз (+Фарроу) нам поднимет качество больше чем up-samp на КИХ-фильтре в 2 раза (+Фарроу)?

 

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

 

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

 

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Берем, повышаем частоту дискретизации раз в 10
а чего не в 11, или в 500 ? хотелось понять сей великий сексуальный математический смысл =))

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Стоит казалось бы банальная задача: Сигнал с опорной частотой 44.1 кГц преобразовать в сигнал с частотой 48 кГц. Алгоритмы с FFT по некоторым причинам не подходят, поэтому было решено использовать интерполяцию. Но коэффициент 1.088 и звуки вплоть до всеми любимых 20 кГц пока что ставят нас в тупик. Алгоритмы Lanczos, B-Spline, Mittchel, Sinc результат дают, но где-то гармоники зашкаливают, где-то частоты урезаются.

В первую очередь интересуют минимальные гармонические искажения, задача вторая по степени важности - минимальный срез АЧХ. Может быть есть более подходящие для обработки звука алгоритмы? Подскажите, пожалуйста!

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Полифазные фильтры + интерполятор Farrow.

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

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

 

1. Все фильтры для интерполяции в 2 раза можно сделать Halfband-ами, вычислительные ресурсы уменьшатся в 2 раза.

2. Если Вам нужны только стандартные частоты, то выкинуть нафиг Farrow, он в этом случае совсем не нужен. Lanczos, B-Spline, Mittchel туда же:)

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Задаетесь ошибкой интерполяции для гармонического сигнала верхней частоты спектра. Гуглом можно найти формулу погрешности интерполяции. На основании ее можно вычислить соотношение между порядком полинома и шагом сетки. Ничего особо хитрого тут нет.

 

soolo:

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

 

Большие степеня полиномов и не требуются. Оверсемплинг побольше и фильтр покруче. Какие требования к преобразователю-то?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Попробовали. Результат неплох, но теряются высокие частоты. При больших степенях полинома - сильные искажения
фрагмент сигнала не могли бы прикрепить ? желательно PCM 16-бит line

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

soolo, наиболее распространённый для аудиосигналов метод интерполяции — полифазный НЧ-фильтр. В этом случае вы полностью контролируете затухание высоких частот, величину артефактов алиасинга, импульсную и фазовую характеристики. См. статью "Тест конвертеров частоты дискретизации".

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

фрагмент сигнала не могли бы прикрепить ? желательно PCM 16-бит line

Да, конечно. Только какой сигнал интересует? До обработки интерполятором или после?

Вообще, для тестов брался обычный тестовый сигнал из программы RMAA6, обрабатывался интерполятором и возвращался обратно в программу для анализа. Ну а звуковые файлы будут естественно с полным спектром.

Изменено пользователем soolo

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

Плохо пробовали, любое заданное качество можно получить.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Плохо пробовали, любое заданное качество можно получить.

Расскажите, пожалуйста, подробнее. Видимо, то, что очевидно для вас - для меня пока что тайна за семью печатями. Знания по вопросу передискретизации начал приобретать недавно, поэтому могу упускать из виду простейшие вещи.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Да, конечно. Только какой сигнал интересует? До обработки интерполятором или после?

Вообще, для тестов брался обычный тестовый сигнал из программы RMAA6, обрабатывался интерполятором и возвращался обратно в программу для анализа. Ну а звуковые файлы будут естественно с полным спектром.

исходный файл, до, в том виде как есть. хочу просто глянуть на спектр его и прикинуть во что выльется сложность сохранения качества.

 

RMAA не пользовал, только слышал об этом пакете.

а вот по ссылке Alexey Lukin очень любопытные тесты ресемплеров http://src.infinitewave.ca/

мне понравилась картинка eac3to (SSRS), сайт разработчика http://madshi.net/eac3to.zip

по ссылке есть исходники ресемплера, при беглом просмотре - это Фурье-интерполяция с окном Кайзера-Бесселя

 

не агитирую, но можно задуматься

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

исходный файл, до, в том виде как есть. хочу просто глянуть на спектр его и прикинуть во что выльется сложность сохранения качества.

Честно говоря, не понимаю смысла выкладывать тестовый файл. Ведь реально интерполятор будет работать с обычными звуковыми файлами (а там спектр сигнала вплоть до 20Гц-20кГц). Но файлом поделюсь. http://dl.dropbox.com/u/23094927/Test%20si...2016-bit%29.wav

при беглом просмотре - это Фурье-интерполяция с окном Кайзера-Бесселя

Да, Фурье решил бы все проблемы. Но, как я написал в шапке топика - от него отказались = (

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Расскажите, пожалуйста, подробнее. Видимо, то, что очевидно для вас - для меня пока что тайна за семью печатями. Знания по вопросу передискретизации начал приобретать недавно, поэтому могу упускать из виду простейшие вещи.

 

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

 

 

Да, Фурье решил бы все проблемы. Но, как я написал в шапке топика - от него отказались = (

 

Не обольщайтесь на счёт FFT, ничего так часто не встречается в ЦОС как его неправильное использование.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

скажите мне пожалуйста, не флуда для а пользы ради.

Вот Вы хотите увеличить частоту дискретизации в 160 раз. При этом уровень сигнала уменьшается в 160 раз, т.е. 16 битный сигнал становится фактически 9 битным. Неужели качество звука не пострадает?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...