LINUX.ORG.RU

А какие алгоритмы ресемплинга (8000->44100, 44100->8000) сейчас самые кошерные? По цена/качество?


2

3

Ну чтобы не сильно ело процессор, но выдавало качество с маленьким недостатком, но на который всем пофиг? Читал про варианты «долго и хорошо» и «на базе FFT и тоже, в принципе, хорошо». Про FFT не очень понятно - если мне нужно убить полосу выше 4 кгц, я могу обнулить бины, но ЧД-то старая останется.

Я в этом профан, но попробую пальцем в небо ткнуть: линейная, квадратичная, кубическая и прочая интерполяция не достаточно крута?

obinos
()

И раз уж пошла такая пьянка, разве с помощью обратного преобразования фурье можно сделать ресемплирование?

obinos
()
Ответ на: комментарий от lazyklimm

эмм, ты где это откопал?

Ну например в IP телефонии бывает применяется даже частота дискретизации 4000 Гц. Качество конечно дерьмо, несмотря на все заявления, что для голоса этого достаточно.

m0rph ★★★★★
()
Ответ на: комментарий от obinos

«Через FFT» - это частый путь в обработке сигналов, сам тащусь, иногда так неожиданно. Например через FFT делают качественную реверберацию, соответствующую заданному помещению по снятому в этом помещении записи хлопка/щелчка.

kiverattes ★☆
() автор топика
Ответ на: комментарий от lazyklimm

Ну например записи телефонного канала в этом хранятся. У них же лимит до 3400 гц, поэтому семплировать их на 8000 - самое подходящее их экономических соображений, особенно когда их нужно хранить сотни нефти.

kiverattes ★☆
() автор топика
Ответ на: комментарий от kiverattes

да, пардон, не подумал, что-то я совсем повернулся на музыке.

lazyklimm ★★★★★
()
Ответ на: комментарий от kiverattes

Например через FFT делают качественную реверберацию, соответствующую заданному помещению по снятому в этом помещении записи хлопка/щелчка.

Ну да, я догадываюсь, зачем и как может использоваться FFT, но ведь есть задачи, где можно обойтись и без него?

Ну и между делом, я прошёл по приведённой выше ссылке на Вики, увидел, что при ресемплировании используют Фурье, но не для того, чтобы произвести само ресемплирование, а чтобы отфильтровать лишние частоты, которые могу создать нежелательные шумы после изменения частоты дискретизации.

А в итоге всё равно используют интерполяцию.

obinos
()
Ответ на: комментарий от obinos

Ну нормальные простые фильтры легко делаются без FFT, с ним даже хуже получается. Ну например ФНЧ реализуется примитивным алгоритмом с потреблением нескольких байт памяти. Непонятно даже, нафига там FFT, если нужно сделать простой ФНЧ. Про интерполяцию до меня не дошло... как она алгоритмически реализуется, особенно для случаев, когда 2 разные частоты дескретизации не соотносятся в целое число раз. Подъём до каких-нибудь 7 мгц и опускание обратно меня чё-то мало устраивает, нафига столько памяти жрать...

kiverattes ★☆
() автор топика

libsamplerate. имеет несколько настроек для изменения параметра цена/качество. скорость зависит от железа. на процессорах без аппаратного FP можно не пытаться.

waker ★★★★★
()
Ответ на: комментарий от kiverattes

как она алгоритмически реализуется, особенно для случаев, когда 2 разные частоты дескретизации не соотносятся в целое число раз

для получения коэффициента интерполяции k/n (k,n - целые) делается последовательно интерполяция в k раз + децимация в n раз

registrant ★★★★★
()
Ответ на: комментарий от kiverattes

Про интерполяцию до меня не дошло... как она алгоритмически реализуется, особенно для случаев, когда 2 разные частоты дескретизации не соотносятся в целое число раз

Ну в случае линейной интерполяции по двум точкам (t1, x1) и (t2, x2), мы можем полагаем, что они связаны линейной функцией x = f(t).

Тогда, чтобы вычислить значение нового (x', t') где t1 <= t' <= t2 мы задаём функцию:

x' = (x2 - x1) / (t2 - t1) * (t' - t1) + x1

obinos
()
Ответ на: комментарий от registrant

для получения коэффициента интерполяции k/n (k,n - целые) делается последовательно интерполяция в k раз + децимация в n раз

Я человек далёкий от обработки сигналов, мне скорее ближе чистая математика, но из чистого любопытства: увеличение числа проходов не добавляет лишний шум и как сильно это сказывается на времени работы алгоритмы?

obinos
()
Ответ на: комментарий от obinos

любая обработка в какой-то степени корежит исходную информацию. передискретизация не исключение (по сути это набор фильтров). но именно _шум_ не добавляется.

registrant ★★★★★
()
Ответ на: комментарий от kiverattes

Можно подробности про реверберацию?

slapin ★★★★★
()
Ответ на: комментарий от kiverattes

ты уперся в конкретную реализацию. на самом деле все много проще и делается парой простеньких фильтров (CIC или полифазный), буфером FIFO и PLL в случае аппаратной реализации.

registrant ★★★★★
()
Ответ на: комментарий от bhfq

ну оно по-разному называется. где-то FPU, где-то VFP, и т.д.

waker ★★★★★
()
Ответ на: комментарий от registrant

Мне честно пофиг в какой, главное - реализацию в студию и чтобы сильно не пожирало ЦП (-; Или статью о реализации.

kiverattes ★☆
() автор топика
Ответ на: комментарий от kiverattes

Посмотри, как это сделано в «foobar 2000» и «Album Player (Aplayer)». Это два наиболее ценимых за качество звука аудиоплеера для PC. В сопроводительной документации наверняка этот вопрос раскрыт.

Deleted
()
Ответ на: комментарий от registrant

обработка в какой-то степени корежит исходную информацию.

но именно _шум_ не добавляется.

А что же тогда такое «шум», если не искажение исходного сигнала?

obinos
()
Ответ на: комментарий от registrant

это можно делать в целочисленной арифметике

Прошу прощения, но мне не совсем понятно, а как целочисленная арифметика позволяет избежать ошибок округления?

obinos
()
Ответ на: комментарий от obinos

http://ru.wikipedia.org/wiki/Шум

а в данном случае речь идет об искажении АЧХ главным образом. хотя, в некоторых реализациях появятся ошибки округления, они похожи на шум

registrant ★★★★★
()
Ответ на: комментарий от obinos

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

registrant ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.