Передискретизация

Все что касается фильтрации
Ivan Karamazov
Сообщения: 89
Зарегистрирован: 28 окт 2010, 22:31
Откуда: Москва

Передискретизация

Сообщение Ivan Karamazov »

Доброго времени,
чем дальше в сайт -- тем больше откровений.
Я всегда считал, что передискретизация делается на основе соотношений:
sync-txt_html_48bb0ab6.gif
sync-txt_html_48bb0ab6.gif (3.13 КБ) 14007 просмотров
Т.е. из этого (если подумать на *свежую* голову), можно получить все, что нужно -- т.е. как для визуализации дискретного сигнала во времени, так и для собственно передискретизации. (Не вполне понятно, правда, сколько "n" надо брать -- говорить о порядке соответствующего КИХ-фильтра в рамках формул выше не вполне уместно(?) :) )
Но. Представленный раздел "Фильтры Фарроу" предлагает заведомо менее ресурсоемкое решение (или мне кажется?).
Вопрос -- нельзя ли в кратце (чтобы избежать экспериментов, которые все заинтересованные, наверное, давным-давно проделали) в "двух словах" (качественно) сравнить Фарроу с sin(x)/x в свете задач передискретизации.
Т.е. задач две -- (1) визуализация сигнала, как гладкой кривой (быстрая, но не хуже аналогового осциллографа) и (2) собственно передискретизация (в разумных пределах во времени не ограниченная).
Заранее благодарен всем, не жду немедленного ответа.
Если ваши решения вам нравятся -- это хорошие решения. И наоборот.

Аватара пользователя
Бахурин Сергей
Администратор
Сообщения: 1116
Зарегистрирован: 05 окт 2010, 19:55
Контактная информация:

Re: Передискретизация

Сообщение Бахурин Сергей »

Алгоритмы передискретизации (resampling) строят по следующему принципу: представляют дискретный сигнал в виде непрерывной функции (назовем это интерполяцией) и снова дискретизируют непрерывную функцию но уже с другой частотой дискретизации. Приведенная вами формула в русскоязычной литературе называется ряд Котельникова, позволяет представить непрерывный сигнал x(t) своими отсчетами x[n] при соблюдении известных соотношений сигнала и частоты дискретизации. Такое представление непрерывного сигнала по своим дискретным отсчетам далеко неединственное. Существует также полиномиальная интерполяция и кусочно-полиномиальная интерполяция (способов интерполяции гораздо больше, но sinc и полиномиальная интерполяция, пожалуй, наиболее распространены).
Так вот если говорить о приведенной вами sinc инетрполяции, то надо сказать, что такой способ не очень удобный. Поскольку вы сами написали сумму бесконечного числа отсчетов для некоторого фиксированного t. На практике разумеется бесконечная сумма заменится конечной, но для одного передисрктизированного отсчета вам потребуются все исходные отсчеты сигнала (sinc - функция бесконечной длительности). Вы можете урезать sinc до определенной длительности, но это приведет к эффектам усечения, а значит возрастанию ошибки. Кроме того в вашем ряде есть неприяный синус, который надо как-то вычислять или предварительно табулировать. Поэтому на практике для ресэмплинга используют кусочно-полиномиальную интерполяцию, для которой разаботан алгоритм расчета к-тов кубического полинома за 3 умножения (фильтр Фарроу), 2 из которых и умножениями то назвать язык не повернется, поскольку умножение на 0.5 это банальный сдвиг вправо. Ну и еще 3 умножения на вычисление самого полинома. Итого 6 умножений на отсчет ресамплинга.
Теперь по качеству. Качество кусочно-полиномиальной интерполяции регулируется порядком полинома. Я использовал кусочно-полиномиальную интерполяцию для сглаживания осциллограмм. При этом я использовал полином 4 степени а не кубический, поскольку он давал лучшее качество. Интерполяцию по sinc отбросил сразу ввиду непосильной вычислительной сложности. Кроме того при цифровой кусочно-полиномиальной интерполяции (когда частота дискретизации на выходе в K раз выше частоты дискретизации на входе) можно дополнительно экономить, поскольку для одного полинома можно расчитать сразу K отсчетов ресамплинга (т.к. частота дискретизации выше в К раз, то между 2-мя отсчетами до ресэмплинга попадает K отсчетов после).
Но надо сказать, что для цифровой интерполяции, или сглаживания осциллограм (в К раз) также можно использовать CIC фильтры, которые вообще не требуют операций умножения, но при использовании CIC фильтров сложнее получить дробный ресамплинг.

Ivan Karamazov
Сообщения: 89
Зарегистрирован: 28 окт 2010, 22:31
Откуда: Москва

Re: Передискретизация

Сообщение Ivan Karamazov »

Спосибо большое за столь подробный ответ. Я, на самом деле, пока только примериваюсь к теме (т.е. с началом работы над реализацией раньше января ничего не выйдет), но тема важная (на мой взгляд). Посему еще 2 вопроса:
1. Любимая программа (а задача, по большому счету, повторить из нее все лучшее сверх своего) всегда (по кр. мере -- с 94-го года) делает передискретизацию в 2 прохода: если вниз -- (1) prefiltering, (2) downsampling и u наоборот, вверх -- (1) upsampling, (2) postfiltering. (От пре/пост фильтрации можно отказаться, я это делал только при преобразовании вверх -- на результирующем спектре при этом отчетливо видны "зеркалки" верхних(?) частот исходного сигнала). Т.е вопрос в том -- является ли это "уликой", что прога использует для "собственно передискретизации" отнюдь не sinc, а ту или иную разновидность интерполяции?
(Музыканты очень не любят CoolEdit/Audition, но все признают, что передискретизация у нее по качеству лучшая из всего-что-есть). (Насколько я понимаю, sinc-интерполяция структурно включает в себя ФНЧ, стремящийся быть приближением идеального, и никаких таких раздельных от передискретизации фильтраций не предполагает.)
2. [под впечатлением обработки сигнала "в целом"]. Предположим, у нас есть сведенный аудиопроект с частотой дискретизации 88200 Гц. Нужно сделать CD-мастеринг без потерь. Правильно ли я понимаю, что если сделать ДПФ, обнулить, все, что выше 22000 Гц, сделать ОДПФ и отбросить каждый 2-й отсчет, то получится идеально записанный сигнал с полосой 22000 Гц при частоте дискретизации 44100 Гц? (я знаю, что так просто адекватно воспроизвести такой CD не просто, но в данном случае это несущественно).
Спасибо. С уважением. Иван.
Если ваши решения вам нравятся -- это хорошие решения. И наоборот.

Аватара пользователя
Бахурин Сергей
Администратор
Сообщения: 1116
Зарегистрирован: 05 окт 2010, 19:55
Контактная информация:

Re: Передискретизация

Сообщение Бахурин Сергей »

1. давайте сразу отличать изменение частоты дискретизации в целое количество раз например было 1 кГц стало 4 кГц и дробное изменение было 1 кГц стало 1.1кГц.

2. Если речь идет о целом изменении частоты дискретизации, то ничего интерполировать не надо. Преобразование вниз делается каскадом фнч - дециматор, преобразование вверх: вставляем нули - фнч. При преобразовании вниз отказываться от фнч нельзя, иначе будет алиасинг.

3. При преобразовании вверх, после вставки межлу отсчетами K нулей ваш спектр просто повторяется К раз по частоте. Поэтому вы видите "зеркалки", которые должны быть подавлены фильтром. Если есть эти "зеркалки", то это означает лишь то что между отсчетами навставляли нулей (способ интерполяции эти зеркалки никак не характеризуют).

4. да в ряде котельникова sinc это фнч, который устраняет "зеркалки".
Предположим, у нас есть сведенный аудиопроект с частотой дискретизации 88200 Гц. Нужно сделать CD-мастеринг без потерь. Правильно ли я понимаю, что если сделать ДПФ, обнулить, все, что выше 22000 Гц, сделать ОДПФ и отбросить каждый 2-й отсчет, то получится идеально записанный сигнал с полосой 22000 Гц при частоте дискретизации 44100 Гц? (я знаю, что так просто адекватно воспроизвести такой CD не просто, но в данном случае это несущественно).
Ну в общем правильно, только фильтровать через ДПФ не очень хорошо. Гораздо лучше поставить фильтр исходя из требований к подавлению алиасинга или "зеркалок". Фильтр можно даже БИХ это не страшно, нелинейная ФЧХ не испортит ничего.

Ivan Karamazov
Сообщения: 89
Зарегистрирован: 28 окт 2010, 22:31
Откуда: Москва

Re: Передискретизация

Сообщение Ivan Karamazov »

В общем, спасибо большое -- вообще, и за последние посты в частности.
На самом деле, конечно, из-за того, что изначально сетка частот для студийного цифрового звука была установлена как 48-96-192 КГц, а аудио-CD -- 44,1 КГц -- на практике редко встречается возможность кратного преобразования частот, посему, как я понимаю, этот случай никто (в софте, в отличии от железа) никогда отдельно не рассматривал. Т.е. есть дополнительная ветка для экспериментов.
Насчет ДПФ -- не вполне согласен. Весь последний мой опыт показывет, что постольку, поскольку хватает памяти для *полного* ДПФ/ОДПФ (а зачем еще нужны ныне широкодоступные 64-разрядные машины/операционные системы) -- результаты (пока) превосходят ожидания -- как по скорости, так и по качеству. А вот блочное ДПФ с перекрытием, в смысле звука, годится, кажется, только для построения всевозможных спектрограмм.
Ну, вроде пока все у меня (я, кажется, достал всех весьма).
ps: на правах отзыва о неточности: где-то в недрах раздела о модуляции говорилось, что динамический диапазон аудио не превышает 40 дБ. Согласен, но с оговоркой "в системах связи и радио (теле) вещания". Аудио CD при своих 16-ти битах может обеспечивать динамический диапазон (по среднеквадратичному значению) порядка 72-80 дБ (в зависимости от допустимого превышения пикового значения над RMS) -- возможно из этого факта растут все недопонимания. ;)
Если ваши решения вам нравятся -- это хорошие решения. И наоборот.

Аватара пользователя
Бахурин Сергей
Администратор
Сообщения: 1116
Зарегистрирован: 05 окт 2010, 19:55
Контактная информация:

Re: Передискретизация

Сообщение Бахурин Сергей »

Ivan Karamazov писал(а):на правах отзыва о неточности: где-то в недрах раздела о модуляции говорилось, что динамический диапазон аудио не превышает 40 дБ. Согласен, но с оговоркой "в системах связи и радио (теле) вещания". Аудио CD при своих 16-ти битах может обеспечивать динамический диапазон (по среднеквадратичному значению) порядка 72-80 дБ (в зависимости от допустимого превышения пикового значения над RMS) -- возможно из этого факта растут все недопонимания. ;)
Согласен - весьма существенное замечание.

Ответить