Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Линейная интерполяция - вносит что-нибудь?
Шарага > Hard - Железо > Аудио
orthodox
Я тут призадумался, насчет как передискретизация делается в ЦАПах...
Представил себе увеличение числа отсчетов, где новые промежуточные значения между исходными отсчетами
забиваются линейной интерполяцией, к примеру. То есть как бы соединяют соседние, приложив линейку от одного до соседнего.

А спектр в НЧ - области, то есть звукового сигнала, при этом точно останется тот же?
Или такое преобразование все же что-то вносит, что не устранится после при фильтрации?
orthodox
Цитата(тау @ 9.9.2010, 10:26) *
останется. После линейной интерполяции уменьшается количество верхних гармоник за полосой сигнала , которые обычно фильтруют. Требования к аналоговому фильтру после ЦАП окажутся попроще.


А в идеале интерполяция должна быть не линейная, а вычисляемяая по ряду Котельникова с использованием sin(x)/x .  Тогда сигнал будет восстановлен наиболее точно.


Если предположить сравнение просто фильтрации с интерполяцией + фильтрация - в первом случае явно, при хорошем фильтре,
ничего не внесется. А при интерполяции - в НЧ область все же добавится, так я понял? Если не sin(x)/x , то появятся артефакты?
MrYuran
Цитата(orthodox @ 9.9.2010, 13:04) *
Если предположить сравнение просто фильтрации с интерполяцией + фильтрация - в первом случае явно, при хорошем фильтре,
ничего не внесется. А при интерполяции - в НЧ область все же добавится, так я понял? Если не sin(x)/x , то появятся артефакты?

В НЧ ничего добавиться не может.
Все добавки - за пределами частоты Найквиста
(Насколько я понимаю со своей 3- за ЦОС pardon.gif )
Designer56
Ничего не вносится. Только линейная интерполяция искажает АЧХ, поэтому и применяется более сложная- фильтры НЧ. Другое дело, что порядки цифровых ФНЧ получаются высокими, поскольку исходные частоты дискретизации- либо 44,1, либо 48 кГц. Их пополам не очень далеко отстоит от 20 кГц. Ну вот, высокий порядок ФНЧ означает множество промежуточных умножений- суммирований. Отсюда- "длинные" результаты, и потенциальные потери от округлений при промежуточных вычислениях. Как конкретные фирмы делают конкретные ЦФНЧ- тайна, покрытая мраком. Это- потенциальный источник "цифрового" звука. На чистом синусе при измерениях этого не видно. Скажем, тот же ЦФ для TDA1541 внутри имеет 40- битную шину, если мне память не изменяет. Но его делали во времена, когда Хайэнда не было, и инженеры относились к ТЗ серъезно. ЦФНЧ для сигма- дельта ещё ьолее уязвимы, поскольку, ко всему, они должеы иметь более высокую частоту передискретизации, и, соответственно, количество отводов- больше. Кстати, всякие 18-20 и 24 битные обычные ЦАП происходят именно попричине повышенной частоты передискретизации ЦФ (выше 4). Просто промежуточные значения начинают отличаться между собой на величину, меньшую кванта 16 битного.
orthodox
Цитата(MrYuran @ 9.9.2010, 15:50) *
В НЧ ничего добавиться не может.
Все добавки - за пределами частоты Найквиста
(Насколько я понимаю со своей 3- за ЦОС pardon.gif )

Ой ли?
А есть какие-то обоснования этого?
Designer56
есть, как не быть
orthodox
Цитата(Designer56 @ 9.9.2010, 17:50) *
есть, как не быть

Ну, например, так: если у меня есть ИКМ - последовательность отсчетов, и я вставляю между каждыми соседними еще один
отсчет, то могу заполнить (проставить значения этого доп отсчета) - какими хочу? Или только в промежутке между амплитудами соседних отсчетов? и если в промежутке - то уже тогда все равно какими?
Designer56
нулями заполняется. Потому что есть, во первых, эффект ф-и sin(x)/x на АЧХ, во вторых- заполнение нулями хотябы чуть- чуть снижает длину промежуточных результатов, о которых я выше упоминал.
orthodox
Цитата(Designer56 @ 9.9.2010, 18:34) *
нулями заполняется. Потому что есть, во первых, эффект ф-и sin(x)/x на АЧХ, во вторых- заполнение нулями хотябы чуть- чуть снижает длину промежуточных результатов, о которых я выше упоминал.

Ну, я бы предложил просто размножать отсчеты..то есть заполнять предыдущими.
Но ведь обычно не нулями и не предыдущими заполняют. а вычисляют что-то иное, интерполированное.
Причем, по разным законам. Иногда их даже можно выбирать с пульта smile.gif

То есть, вероятно, получается еще одна песенка в промежутке между отсчетами (так была устроена одна хитрая система скрэмблирования с подсознательным воздействием на психику, скрытые команды.)
Designer56
Цитата
Ну, я бы предложил просто размножать отсчеты..то есть заполнять предыдущими.
Но ведь обычно не нулями и не предыдущими заполняют. а вычисляют что-то иное, интерполированное.

вот сначала заполняют нулями- а потом интерполируют цифровым фильтром НЧ высокого порядка. И появляются промежуточные отсчеты. А так как ты предлагаешь- это называется интерполяция 0- го порядка. При этом АЧХ исказится умножением на упомянутую sin(x)/x. А если линейная интерполяция- то происходит нечто подобное, но уже АЧХ сигнала умножается на огибающую спектра треугольного периодического сигнала. И придется её корректировать так или иначе. В первых СД плеерах безо всякой передискретизации фильтр НЧ был что-то 9-10 порядка. аналоговый. И плюс подъем АЧХ, корректирующий спад от sin(x)/x.
orthodox
Цитата(Designer56 @ 9.9.2010, 18:57) *
вот сначала заполняют нулями- а потом интерполируют цифровым фильтром НЧ высокого порядка. И появляются промежуточные отсчеты.

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

А наш пользователь SL_Sm (вчера по телефону говорили) , видывал варианты, когда вместо ЦФ вначале пытаются вычислить сглаживание между отсчетами, и после уже дофильтровывают.
Думаешь, он ошибся в чем? А мне кажется, могли запросто, ради упрощения расчетов.

PS Я как-то определял алгоритм эффекта холла (реверберации в зале, а не магнитного датчика) - так оказалось, там такие левые приемчики для экономии памяти и вычислительной мощности, что мой, тупо в лоб имитирующий отражения от стен пола и потолка - оказался по натуральности эффекта на голову выше средней ценовой категории...
Designer56
Вот чем хуже- я уже ответил выше. На высоких частотах дискретизации sin(x)/x тоже влияет, но если заполнить нулями, то коэфф. заполнения прямоугольной импульсной последовательности будет меньше , и в полосе 0-20 кГц этим влиянием уже можно пренебречь. А фильрация- это и есть интерполяция.
orthodox
Цитата(Designer56 @ 9.9.2010, 19:09) *
Вот чем хуже- я уже ответил выше. На высоких частотах дискретизации sin(x)/x тоже влияет, но если заполнить нулями, то коэфф. заполнения прямоугольной импульсной последовательности будет меньше , и в полосе 0-20 кГц этим влиянием уже можно пренебречь.

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



Цитата
А фильрация- это и есть интерполяция.


Вот кто его знает... Вроде есть иные варианты.
Designer56
Если линейные- то так, или иначе, это фильтрация. Выгоднее сделать это один раз.
Вообще, интуитивно это просто: Теорема Котельникова просит на выходе перед фильтром отсчеты сигнала. Математически это значит произведение дельа- ф-и на значение сигнала в точках отсчетов. Т.е., по амплитуде это будет бесконечно- большие величины, а по интегралу- равны значениям сигнала в точках отсчетов. Это, естественно, нереализуемо никак- ни в цифре, ни в аналоге. Короткие импульсы амплитудой, равной значение сигнала в точках отсчетов, блтиже к дельта- ф-и по спектру в полосе интереса- до 20 кГц в нашем случае. Хотя общая амплитуда составляющих спектра, естественно, падает в отношении скважности. Но это в цифре легко поправляется масштабированием. В аналоге этого не делают по причине уменьшения отношения С/Ш, а делают коррекцию аЧХ. Если частота передискретизации ЦФ невелика, там тоже приходится делть коррекцию, но её сразу вводят при расчете коеффициентов ЦФ.
orthodox
Цитата(Designer56 @ 9.9.2010, 19:30) *
Если линейные- то так, или иначе, это фильтрация. Выгоднее сделать это один раз.

Ну вот то, что они нелинейные-то - как раз и беспокоит.
То есть имеется попытка попасть в линейность и угадать ход кривой в промежутках, а что не угадали - то уже дофильтровать...
И вроде бы это становится модным до чрезвычайности.
На слух как хвосты на ВЧ...


Цитата
Вообще, интуитивно это просто: Теорема Котельникова просит на выходе перед фильтром отсчеты сигнала. Математически это значит произведение дельа- ф-и на значение сигнала в точках отсчетов. Т.е., по амплитуде это будет бесконечно- большие величины, а по интегралу- равны значениям сигнала в точках отсчетов. Это, естественно, нереализуемо никак- ни в цифре, ни в аналоге. Короткие импульсы амплитудой, равной значение сигнала в точках отсчетов, блтиже к дельта- ф-и по спектру в полосе интереса- до 20 кГц в нашем случае. Хотя общая амплитуда составляющих спектра, естественно, падает в отношении скважности. Но это в цифре легко поправляется масштабированием. В аналоге этого не делают по причине уменьшения отношения С/Ш, а делают коррекцию аЧХ. Если частота передискретизации ЦФ невелика, там тоже приходится делть коррекцию, но её сразу вводят при расчете коеффициентов ЦФ.

Ну, теперь вроде дошло...
Designer56
Дык и любая другая линейная гарантирует. Только коррекция АЧХ сложнее получается, и, главное, зачем её делать дополнительно, если все равно фильтровать ВЧ приходится.
Designer56
да хоть таже линейная, когда отсчеты вычисляются как точки отрезка прямой между двумя заданными. Кстати, если экспоненциальная будет или полиномиальная- это тоже будет линейная.
Designer56
тут немного не о том. Разговор был про то, что перед фильтрацией заполнить промежутки не нулями, а чем- то с виду поближе к предполагаемой кривой сигнала. А фильтр вроде Ортодокс не исключал.
orthodox
Цитата(Designer56 @ 9.9.2010, 20:07) *
тут немного не о том. Разговор был про то, что перед фильтрацией заполнить промежутки не нулями, а чем- то с виду поближе к предполагаемой кривой сигнала. А фильтр вроде Ортодокс не исключал.

Не-не...Я именно то имел в виду, о чем GuruKiller сказал:
Цитата
Я не оч понял, кто чего "гарантирует". Синк просто даёт 100% восстановление. А т.н. линейная искажает АЧХ. Точнее никак не восстанавливает. Разве вообще, линейная лучше простого дублирования отсчётов?
Это ещё ладно, если все "линейные" спектр не искажают, а только АЧХ.


То есть вот как раз присоединяюсь...
Тем более, что как говорит слышащий человек - оно и слышно.
Designer56
а что он сказал? что фильтрация по теореме Котельникова фильтром "кирпичная стена" с импульсной х- кой sin(x)/x, которая, вообще говоря, физически нереализуема, восстанавливает сигнал полностью? Правильно, что тут скажешь. Я же говорил, что при передискретизации выгоднее заполнять промежутки нулями, т.е. нивелировать несколько влияние АЧХ от интерполяции 0- го порядка, такой, когда промежутки заполняются предыдущими значениями. Выгоднее чисто с точки зрения реализации алгоритма. Собственно, поэтому так и делают.
orthodox
Цитата(Designer56 @ 9.9.2010, 20:17) *
Собственно, поэтому так и делают.

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

Суть в была в подозрении, что не так ли и делается в серийных CD -плеерах, например....
Designer56
Цитата
не более ли выгодно попробовать угадать заранее полученную кривую,

вот фильтр её сразу и угадывает... Я понимаю, это сразу вызывает протест- взять и повыломать зубья у расчески. Но, тем не менее- если предполагается передискретизация с целью упрощения аналогового фильтра ( а другой цели у этой операции нет и не может быть), то заполнение нулями- оптимально. Кстати, вот всякие ДВД- аудио с дискретизацией до 192 квб/сек этот вопрос в лоб решают. Можно вообще безо всего все делать, в примитивным аналоговым фильтром, если последующая аппаратура выдерживает весь лишний шум на ВЧ, и не генерирует продукиов интермодуляции.
A.T.Tappman
А вот ещё другая хреня есть. Upsampling называется http://www.n-audio.com/articles/upsampling.htm
orthodox
Цитата(A.T.Tappman @ 10.9.2010, 10:31) *
А вот ещё другая хреня есть. Upsampling называется http://www.n-audio.com/articles/upsampling.htm

Это наоборот, как раз оно и есть.
Но хорошая статья, кое-что становится более понятным.
остается один только один вопрос - фильтры эти рекурсивные или нет, кто знает?
zzzzzzzz
Я когда-то давно занимался интерполяцией по нескольким отсчетам. До четырех исходных точек еще вполне простые алгебраические формулы получаются. И получаемая аналитическая функция вида у=к1*х3 + к2*х2 + к3*х + к4 позволяет восстановить ЛЮБОЕ количество точек внутри функции из четырех физических отсчетов с "сумасшедшей точностью"(с) для аудио. Любой микроконтроллер осилит такие простые расчеты. Если нужно, могу отсканерить свои старенькие записки с выведенными формулками.

Ну, и, конечно, набор точек смещать для каждого нового отсчета на один при новой интерполяции. Или работать сразу с множеством отсчетов.

Т.е. интерполяцию целесообразно проводить не по двум отсчетам, а по нескольким соседним. Без итерационных процессов, а тупой арифметикой. Сразу получая кучу (нужное количество) внутренних точек.
Designer56
Цитата
остается один только один вопрос - фильтры эти рекурсивные или нет, кто знает?

Исключительно нерекурсивные. Рекурсивные таких вещей не позволяют
zzzzzzzz
Цитата(Огурцов @ 10.9.2010, 18:39) *
Нужно! Не звука для, а приводов ради.

Если пригодится, - буду только рад. smile.gif

Нажмите для просмотра прикрепленного файла
Designer56
И мне так же кажется
orthodox
Цитата(Designer56 @ 10.9.2010, 15:00) *
Исключительно нерекурсивные. Рекурсивные таких вещей не позволяют

Каких вещей?
Мне казалось, что у нерекурсивных с КИХ - как раз проблемы получить хорошее подавление и
проблемы с получить ЧХ с резким обрывом.

Другое дело, что рекурсивные звук обгадят, но сейчас как раз и интересно, что ж его гадит в промышленных устройствах-то...


Цитата(zzzzzzzz @ 10.9.2010, 19:35) *
Если пригодится, - буду только рад. smile.gif

Нажмите для просмотра прикрепленного файла

Ну и что я увидел?
Мне показалось, что математики тут меньше, чем было бы
в ЦФ высокого порядка, если они нерекурсивные на самом деле - то порядок был бы высоким, да?

И это кажется не фильтр, да?

Отсюда опять же вопрос знатокам - не могли ли производители такой методой соблазниться, чтобы уменьшить общее число расчетов и облегчить работу фильтров?
Designer56
да и там и там проблемы одинаковы- в конечном итоге определяются точностью коэффициентов, или их размерностью, по другому.
Цитата
Каких вещей?

передискретизацию и децимацию

Цитата(orthodox @ 10.9.2010, 23:37) *
Другое дело, что рекурсивные звук обгадят, но сейчас как раз и интересно, что ж его гадит в промышленных устройствах-то...


с чего они должны обгадить звук особенно? если правильно все сделано, то ничего не гадят
zzzzzzzz
Цитата(GuruKiller @ 10.9.2010, 21:14) *
8-битник может ниасилить (в рилтайме). Порвёт себе чего-нить в процессе smile.gif
Для 4-ёх точех математика нехилая. Может оказаться, что синк по +-5 точкам будет проще. Хотя кол-во точек может быть и большим. По 10 точкам в расчётах всего 10 умножений и 10 сложений. А здесь по 4 точкам туева хуча и умножений и сложений (и ещё делений ?).
Да ладно, не так уж и страшно.
К тому же, отвечая и Ортодоксу, - это ж аналитическая функция, которая точно проходит через полученные точки. И прелесть её как раз в точности. Плюс, можно посчитать, например, хоть 1000 промежуточных точек, облегчив последующую фильтрацию. Эти точки-то потом считаются очень быстро, когда коэффициенты определены.
Designer56
я вот как- то издевался над системой. Пропустил сигнал в филипсовском плеере на TDA 1541 мимо интерполирующего ЦФ прямо на ЦАП без всякой передискретизации, а с него выход уже фильтровался АФ 3- го порядка. И ничего не услышал. Да и не должен был, или нужно было очень долго тестировать разные программы. Сам по себе ВЧ мусор на слух не мешает. Другое дело, что он может порождать продукты интермодуляции в последующих усилителях, да и ГГ тоже. И в усилителе активного фильтра в т.ч.
zzzzzzzz
Цитата(GuruKiller @ 11.9.2010, 3:55) *
С одной стороны, "тупая" линейная интерполяция тоже точно проходит через точки. В идеале функция должна быть не "аналитическая", а "гармоническая" чтобы в ней не было посторонних гармоник. Например синк - это настоящая гармоническая функция. Наверное только при устремлении степени полиномов в бесконечность они будут приближаться к гармонической функции. На практике же критерий - лишь бы на слух не было слышно. Ну и второй (или первый) критерий - кол-во расчётов. Всё таки у полиномов многовато. Вот интересно, если взять несколько сэмплов и сравнить алгоритмы двойного upsampling-а полиномом на 4 точки и с таким же по затратам свёртке синком (ессно на большее число точек), какой из них даст лучшее качество.
Ну да, вопрос практики первичен, как завещал ильичЪ.
Могу лишь добавить, что существует простой упрощающий приемчик для вычислений:
так как отсчеты по х, как правило, стабильны по времени, можно делать рассчеты коэффициентов, используя подстановку, например, такую x1=0 x2=4 x3=8 x4=12.
Это сильно упростит формулы и реализацию в МК. Найдя коэффициенты, находим значения Y при х=1,2,3,5,6,7,9,10,11. Потом обратно подменяем х на конкретные времена, например, х1=2025мкс, х2=2030мкс и т.д.
Не берусь судить что проще, Фурье или степенные полиномы. Это вопрос к практикам. Мне не пришлось сравнивать.

А "тупая" линейная интерполяция как раз содержит бесконечное количество гармоник, ибо есть точки изломов и прямые.
Ну, в известном смысле, в любой функции бесконечное кол-во гармоник, если это не синус-косинус. Вопрос в их величине.
НО, совсем не факт, что на входе - гармоническая функция! Кто сказал, что после пилы или дисторшн-эффекта мало гармоник? smile.gif

Вот, проделал подобное упрощение.
Если нигде не налажал. Что может быть проще-то?!!!


ПС. Если что - всё нужно проверять тщательнее, делалось очень быстро. Могут вкрасться неточности.
ПС2. Если всё делать правильно, со сдвигом выборки и интерполяцией с одной новой точкой, то итоговая функция всегда будет предельно "гладкой", без изломов. То есть, минимизация гармоник высших порядков будет автоматическая. То есть, это и фильтр отчасти, конечно. Честный фильтр.
zzzzzzzz
Спасибо за работу для "души".
1. А не кажется ли Вам, что в третьем случае присутствует не "облегчение жизни" фильтра, а явная "отсебятина" процесса интерполяции? Ведь вводные данные (рис.1) как раз не предполагают никаких более высокочастотных переходов в этом месте. И интерполяция (рис.3) выглядит убедительнее, чем на рис.2 только потому, что Вы изначально задали синусы, и "восстанавливали" сигнал ими же. В реальном аудио-сигнале это совсем не обязательно так.
Вот если Вы зададите не сумму синусов, а, например, сумму "пил", то ситуация изменится на полную противоположность. Полиномы сумеют "опознать" линейную функцию, а синки дадут "нервную дрожь" (суть, призвуки).
2.
Цитата
Очень остренький излом линейной интерполяции - всего лишь результат влияния наличия очень высоких гармоник. У полиномиального излом сглажен , эти ВЧ гармоники поменьше будут, но те , которые ближе к границе полезного спектра имеют все шансы быть плохо отфильтрованы аналоговым фильтром.
У линейной интерполяции и низкие гармоники будут гораздо больше, и, естественно, более высокие. Чем у полиноминальной, и у фурье.
3. А Вы не видели этих самих формул Фэрроу? Там то же, что и я навыводил? Просто любопытно. А то уже забыл всё.
zzzzzzzz
Цитата(GuruKiller @ 22.9.2010, 17:42) *
ИМХО тут всё по чесноку. Можно взять любой аудио сигнал, намеренно обрезанный почти впритык к верхней частоте в сигнале и синк восстановит его как был.
Я когда-то тоже понять не мог приколы, когда на картинке (дискретном сигнале) совсем не то, что в реале. И совсем уже полный прикол в том, что можно восстанавливать то, что якобы было потеряно/обрезано.
Как работает фурье понятно. И "выезжает" он в данном случае только за счет большего числа анализируемых отсчетов. Если взять полином того же порядка, то он сможет отобразить ничуть не хуже синка. Вот обсчитывать его, действительно, будет туговато.
Я вот в свое время на вывод полинома четвертой степени уже не отважился, слишком развесистые выкладки с матрицей. Но, возможно, что в эту степь просто никто особо не бегал, и там есть возможности какой-то оптимизации и упрощения процесса (например, параллельные матричные вычисления). А господин Фурье всё, что нужно, своевременно сказал. smile.gif
zzzzzzzz
Цитата(GuruKiller @ 22.9.2010, 18:26) *
Кстати, не объясните мне, как работает в данном конкретном примере синк?
Ну, если на "пальцах", то проводится, по сути, аналогичное определение коэффициентов. Только для другого ряда (Фурье). Членами этого ряда являются синусы с пропорциональными частотами и сдвигами фазы. Так, для данного случая, в интервале нас заинтересовавшем, коэффициент при соответствующем синусе определился исходя из 20 анализируемых точек.
Нажмите для просмотра прикрепленного файла
http://www.radioradar.net/articles/technic...oscope_int.html
А вот получить таким образом прямую весьма проблематично. Ибо число членов ряда конечно, а для такой задачи требуется бесконечное.
Цитата(GuruKiller @ 22.9.2010, 18:26) *
Моё имхо - синк по тем же 4 точкам будет лучше работать. И гоораздо быстрее.
Это вряд ли, что лучше. Быстрее - возможно. Но, а если заняться оптимизацией расчетов для степенных полиномов? smile.gif
zzzzzzzz
Цитата(тау @ 22.9.2010, 21:34) *
дык я их в программу вводил, вот по этой методе . Формулы для коэффициентов полинома третьей степени получаются проще чем у Вас - всего 3 умножения для 4 коэффициентов полинома.
Спасибо. Это круто. Поизучаю на досуге. А ведь кто-то роет потихоньку эту тему!
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2020 IPS, Inc.