Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Придумал алгоритм интерполяции. Протестируем результаты?
Форум разработчиков электроники ELECTRONIX.ru > Цифровая обработка сигналов - ЦОС (DSP) > Алгоритмы ЦОС (DSP)
Страницы: 1, 2, 3, 4
thermit
Цитата
_Ivana:
Ну например, при расчете Фарроу используется деление на 6 (хорошо, уговорили - на 3 sm.gif ).


Деление на константу это умножение на константу. Так что в фарроу никаких деление нет в принципе.
Есть умножение на константу и перемножение 2-х операндов. Сумма есть.

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

Насчет ПЛИС и модемов глаза не открылись, я просто не знаю эту область. Но это не отменяет принципиального факта меньшего количества операций в моем алгоритме sm.gif
des00
Цитата(_Ivana @ Apr 8 2012, 09:11) *
Но это не отменяет принципиального факта меньшего количества операций в моем алгоритме sm.gif

т.е. вы делаете его быстрее чем 3 умножения и 4 сложения ?
_Ivana
Цитата(des00 @ Apr 8 2012, 18:15) *
т.е. вы делаете его быстрее чем 3 умножения и 4 сложения ?

Давайте разберемся. Вот Фарроу:
CODE

а3 = (1/6)*(у3 - у0) + (1/2)*(у1 - у2);
а1 = (1/2)*(у3 - у1) - а3;
а2 = у3 - у2 - а1 - а3;
а0 = у2;

х = т - 1;

у = а3*х;
у = (у + а2)*х;
у = (у + а1)*х;
у = у + а0;

Ваша фраза про "3 умножения и 4 сложения" относится к чему? Даже если оставить в стороне вычисление итогового значения полинома (что ещё 3 умножения и 4 сложения - одно на приведение параметра допустим), то получается 3 умножения и 8 сложений. Хотя, я не оптимизировал, может и можно ужать. Но если говорить о полном цикле операций Фарроу - то это 6 умножений и 12 сложений - если считать как я написал, не оптимизированно. Кто посчитает за меньшее? Прошу ваш вариант.
des00
Цитата(_Ivana @ Apr 8 2012, 08:21) *
Кто посчитает за меньшее? Прошу ваш вариант.

да весь интернет знает, только вы в неведении wink.gif

Цитата
На этом синтез фильтра Фарроу третьего порядка можно считать законченным и подведем некоторые итоги:
.....
2. Фильтр третьего порядка требует всего 3 операции умножения и может применяться в реальном времени.
NiceParty
Цитата(des00 @ Apr 8 2012, 18:47) *
да весь интернет знает, только вы в неведении wink.gif


Прошу прощения, что вмешиваюсь в беседу уважаемых метров DSP.
На рисунке 7: "Модифицированный фильтр Фарроу третьего порядка" из приведенной Вами в пример статьи я насчитал 11 операций сложения и 6 операций умножения для итогового значения полинома в точке интерполяции.

Если Вы знаете как сократить это число операций, то, пожалуйста, расскажите. Мне бы очень пригодилась данная информация.
Заранее спасибо.

P.S. Две операции умножения на 1/2, конечно, лучше заменить на арифметический сдвиг вправо (подразумевается целочисленная математика).
Но умножение на 1/6 я пока не знаю чем заменить. Буду признателен, если подскажете.
_Ivana
Цитата(des00 @ Apr 8 2012, 18:47) *
да весь интернет знает, только вы в неведении wink.gif

des00 вы просто верите цитатам из интернета, даже не пытаясь проанализировать их смысл?
Если найдутся участники, понимающие о чем речь, а также понимающие разницу в количестве операций при умножении на 1/2 и 1/6 даже во флоатах, и при этом будут иметь желание продолжить дискуссию - я готов.
Tanya
Цитата(ViKo @ Apr 8 2012, 17:10) *
В том-то и дело, что, если функция оцифрована в соответствии с теоремой Котельникова, это будет единственная функция, проходящая через все наши точки.

Какая-такая -"Эта"?
Вы меня убиваете (без Котельникова).
Функция номер раз - кусочно-линейная.
Функция номер два - кусочно-квадратичная.
Дальше сами... Единственность опровергнута? Ваша.
des00
Цитата(NiceParty @ Apr 8 2012, 08:56) *
P.S. Две операции умножения на 1/2, конечно, лучше заменить на арифметический сдвиг вправо (подразумевается целочисленная математика).
Но умножение на 1/6 я пока не знаю чем заменить. Буду признателен, если подскажете.

это же просто и уже обсуждаллсь на форуме, умножьте все коэффициенты на 6, в результате этого коэффициенты фильтра будут 1,2,3,6, за счет операции рекомбинации, аналогичной описанной в статье, все переходит к набору сумматоров + сдвиги. что просто реализуется на любой платформе. остается только рассчет полинома. как уже сказал 3 умножения. В кол-ве сложений ошибся, признаюсь. Считать, сколько их там, с учетом оптимальной рекомбинации лень.

в результате такой "моидификации", коэффициент усиления преобразования интерполятора будет 6. легко переводиться в 6/8. И совсем привередливым, кому хочеться получить 1цу, приводиться простым делением через умножение.

Цитата(_Ivana @ Apr 8 2012, 08:57) *
des00 вы просто верите цитатам из интернета, даже не пытаясь проанализировать их смысл?

а вы слишком узко смотрите на реализацию sm.gif
_Ivana
Цитата(des00 @ Apr 8 2012, 19:13) *
а вы слишком узко смотрите на реализацию sm.gif

Вы правы, спасибо за демонстрацию оптимизации, я смотрел узко. Но даже при этом мой алгоритм быстрее на любых платформах sm.gif
Так что отвечая на ваш вопрос выше - да, я свое значение считаю быстрее Фарроу при любой оптимизации последнего и платформе sm.gif
ViKo
Цитата(Tanya @ Apr 8 2012, 17:59) *
Какая-такая -"Эта"?
Вы меня убиваете (без Котельникова).
Функция номер раз - кусочно-линейная.
Функция номер два - кусочно-квадратичная.
Дальше сами... Единственность опровергнута? Ваша.

Эта, единственная - это когда в результирующей (полученной с помощью интерполяции) функции не будет спектральных составляющих, выше, чем были в исходной функции (которую оцифровываем в соответствии с теоремой Котельникова).
Номер раз - кусочно-линейная - имеет резкие изломы при переходе от точки к точке, что говорит, что в спектре этой функции будут составляющие, выходящие за половину частоты дискретизации, с которой исходная функция была оцифрована.
Номер два - аналогично, может быть, не так очевидно, но гарантированно...
Дальше сами - при любом отклонении результата интерполяции от той, единственной, исходной... в спектре появятся дополнительные составляющие.
thermit
Цитата
des00:
все переходит к набору сумматоров + сдвиги


Умножение на константу и без всяких извращений сведется к сдвигам/суммам. Дополнительная суета не требуется.
NiceParty
Цитата(des00 @ Apr 8 2012, 19:13) *
это же просто и уже обсуждаллсь на форуме, умножьте все коэффициенты на 6, в результате этого коэффициенты фильтра будут 1,2,3,6, за счет операции рекомбинации, аналогичной описанной в статье, все переходит к набору сумматоров + сдвиги. что просто реализуется на любой платформе. остается только рассчет полинома. как уже сказал 3 умножения. В кол-ве сложений ошибся, признаюсь. Считать, сколько их там, с учетом оптимальной рекомбинации лень.

в результате такой "моидификации", коэффициент усиления преобразования интерполятора будет 6. легко переводиться в 6/8. И совсем привередливым, кому хочеться получить 1цу, приводиться простым делением через умножение.


В идеале, конечно хотелось бы получить Ку=1.
По этой методике не вижу, где получится экономия на операциях, т.к. что умножать вначале, что в конце - все равно, операция не исчезает...
Может я чего-то не догоняю. Если продемонстрируете формулами, чтобы было видно, сколько операций в одном случае, а сколько в другом, то буду премного благодарен.

P.S. Мне считать не лень, но я не смог увидеть преимуществ в кол-ве операций. Может, неправильно считал...
Tanya
Цитата(ViKo @ Apr 8 2012, 19:28) *
Эта, единственная - это когда в результирующей (полученной с помощью интерполяции) функции не будет спектральных составляющих, выше, чем были в исходной функции (которую оцифровываем в соответствии с теоремой Котельникова).
Номер раз - кусочно-линейная - имеет резкие изломы при переходе от точки к точке, что говорит, что в спектре этой функции будут составляющие, выходящие за половину частоты дискретизации, с которой исходная функция была оцифрована.
Номер два - аналогично, может быть, не так очевидно, но гарантированно...
Дальше сами - при любом отклонении результата интерполяции от той, единственной, исходной... в спектре появятся дополнительные составляющие.

1.Котельников никак и никого не учил оцифровывать.
2. Ни про какие частоты в разложении в ряд Фурье интерполяции нет никакого дела. Мухи отдельно. Ладно?
3. Изломы имеются только в точках пересечения прямых. Если новую функцию там не определять, то какие изломы?
Вы же сомневаетесь в их существовании для кусочно-квадратичной.
Так объясните, что есть та самая правильная интерполяция?
Лучше формулой. А то я Ваши слова плохо понимаю.
_Ivana
Подскажите кто знает, какие ещё показатели (кроме максимального и среднего модулей отклонений) и как я могу получить, зная отклонения моей интерполяции от целевой функции во множестве точек? sm.gif Какая-нибудь там дисперсия и прочая вероятностно-статистические показатели? Что они каким-то образом характеризовали работу алгоритма. Я все ещё не теряю надежды выявить сильные/слабые стороны обоих методов sm.gif
Pavel_SSS
Цитата(_Ivana @ Apr 8 2012, 20:00) *
Подскажите кто знает, какие ещё показатели (кроме максимального и среднего модулей отклонений) и как я могу получить, зная отклонения моей интерполяции от целевой функции во множестве точек? sm.gif Какая-нибудь там дисперсия и прочая вероятностно-статистические показатели? Что они каким-то образом характеризовали работу алгоритма. Я все ещё не теряю надежды выявить сильные/слабые стороны обоих методов sm.gif

А Вы знаете целевую функцию? Зачем Вам тогда интерполяция - просто вычислите значения функции в нужных точках...
ViKo
Цитата(Tanya @ Apr 8 2012, 18:57) *
1. Котельников никак и никого не учил оцифровывать.
2. Ни про какие частоты в разложении в ряд Фурье интерполяции нет никакого дела. Мухи отдельно. Ладно?
3. Изломы имеются только в точках пересечения прямых. Если новую функцию там не определять, то какие изломы?
Вы же сомневаетесь в их существовании для кусочно-квадратичной.
Так объясните, что есть та самая правильная интерполяция?
Лучше формулой. А то я Ваши слова плохо понимаю.

1. Без комментариев sm.gif
2. Есть очень тесная связь, для ЦОС.
3. Не понял... кусочно-линейная... состоит из кусков линейки(sm.gif)... в месте склейки кусков будут изломы... практически, в каждой точке исходной функции. В наличии изломов кусочно-квадратичной (из кусков квадратиков sm.gif)... тоже не сомневаюсь. Говорю о том, это будет менее заметно (ближе к той, единственной), но дополнительные спектральные составляющие обязательно будут.
Вместо формул (я же уже дал ссылку, там русским по белому написано!) картинку покажу.
sup-sup
Цитата(_Ivana @ Apr 8 2012, 19:00) *
Подскажите кто знает, какие ещё показатели (кроме максимального и среднего модулей отклонений) и как я могу получить, зная отклонения моей интерполяции от целевой функции во множестве точек? sm.gif Какая-нибудь там дисперсия и прочая вероятностно-статистические показатели? Что они каким-то образом характеризовали работу алгоритма. Я все ещё не теряю надежды выявить сильные/слабые стороны обоих методов sm.gif


После интерполяции должен остаться такой же спектр в исходной полосе. А за ее пределами нулевой.
Так как реально такого не бывает, качество интерполяции можно сравнивать с классической реализацией (добавление нулей и фильтрация ненужных спектральных компонентов). Это в идеале, действительно, единственно возможная кривая, как сказал ViKo.
А тут уже зависит от качества интерполирующего фильтра. От его неравномерности в полосе, от переходной полосы и от затухания вне полосы. Вот этими параметрами можно и мериться.
ViKo
К "единственно возможной кривой" можно прийти на основании простейших рассуждений. Если мы оцифровали сигнал в соответствии с теоремой Котельникова, полученный массив выборок однозначно определяет наш сигнал. Никакая интерполяция не должна изменить этот сигнал. Не добавляется никакой дополнительной информации. Изменяется только форма его представления.
_Ivana
Спасибо за дельные рекомендации, померю по возможности.

ЗЫ to all - вы меня только пожалуйста не бейте sm.gif Я тут ещё почитал немного интернетов, и понял что я придумал так называемую "интерполяцию сплайнами Катмулла-Рома", точнее один из её вариантов sm.gif И ещё и проанализировал её в сравнении с Лагранжем по максимальной и средней ошибке sm.gif Я действительно не знал об этом раньше (я бы до таких фамилий никогда не додумался sm.gif ), но раз дело такое - как обещал, выкладываю код, сравните по быстродействию с Фарроу:
CODE

SHORT InterpolateKatmullRom(int t, SHORT y0, SHORT y1, SHORT y2, SHORT y3)
{ int y, a0, a1, a2, a3;

y = y2 - y1;
a0 = y1;
a1 = (y2 - y0)>>1;
a3 = (y3 - y0);
a3 = (a3 - y)>>1;
a3 = (a3 - y);
a2 = y - a3 - a1;

y = a3*t;
y = y>>16;
y = (y + a2)*t;
y = y>>16;
y = (y + a1)*t;
y = y>>16;
y = y + a0;

if (y > 32767) y = 32767;
else if (y < -32768) y = -32768;

return (SHORT)y;
}

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

Еще раз прошу прощения у общественности за внесенный переполох и самонадеянную претензию на ноу-хау sm.gif В любом случае спасибо, это была интересная практика!
ViKo
Цитата(_Ivana @ Apr 8 2012, 21:19) *
Последние условия - нормализация, в алгоритме необязательная, но при практическом ресемплировании вавок очень нужная, особенно если сигнал задран по амплитуде и присутствуют полки максимальных значений.

Это не нормализация, действительно, нужная при обработке звука, а ограничение.
_Ivana
Цитата(ViKo @ Apr 9 2012, 08:16) *
Это не нормализация, действительно, нужная при обработке звука, а ограничение.

Хорошо, пусть будет ограничение sm.gif

ЗЫ есть у меня ещё одна идейка sm.gif Надо бы её проверить теперь, благо, спасибо Термиту, я уже знаю как навскидку проверять разные алгоритмы интерполяции, и проверялка уже написана. Только хорошо бы выполнить 4 условия:
1) формализовать её сначала математически а потом в коде
2) победить Фарроу по отклонениям
3) оптимизировать по операциям чтобы было в разумных пределах
4) самое главное - чтобы это потом не оказалось методом какого-нибудь Фермана-Зингельшухера sm.gif

Начинаю серию №2, надеюсь реализовать её тоже.
Михаил_K
_Ivana. Интересно было бы посмотреть на спектр сигнала полученного вашим интерполятором, при интреполяции в несколько раз, при условии на вход подается синус, частота которого близка к 1/2 частоты дискретизации. Например 0.49 частоты дискретизации. Оценить уровень аллиаса, который при этом получится.
А если серьезно...
Как то давно, на первом курсе института был у меня такой случай. Выполняли достаточно простенькое задание. Зову препода - типа сделал. Он подходит проверять. Вводит начальные значения. Получает результат. Вводит другие значения - программа отрабаывает не правильно. Ну я соответственно исправляю. Опять зову. Он опять вводит несколько вариантов исходных данных. Программа в очередной раз ломается. Я опять исправляю. Опять зову. Опять вводит несколько вариантов. Программа работает. Препод в задумчивости.. Пробует еще несколько вариантов. Программа работает. Препод задумчиво, со звуком "ХМ" лезет в код. Изучает внимательно. Вводит очередные исходные данные - программа ломается. На что он с криком "Ура" заставляет снова думать.
Мораль:
Вы бы описали свой алгоритм, а люди бы посмотрели на него, и сказали бы свое мнение. Не исключаю, что то, что вы придумали - уже известно, и имеет определенные границы применения, либо определенные "грабли".
thermit
http://electronix.ru/forum/index.php?showt...t&p=1046889

Собственно,мнение тут одно: Все уже давно придумано.
_Ivana
Цитата(Михаил_K @ Apr 9 2012, 17:03) *
_Ivana. Интересно было бы посмотреть на спектр сигнала полученного вашим интерполятором, при интреполяции в несколько раз, при условии на вход подается синус, частота которого близка к 1/2 частоты дискретизации. Например 0.49 частоты дискретизации. Оценить уровень аллиаса, который при этом получится.

Запросто. Чуть позже, как будет время.
Цитата(Михаил_K @ Apr 9 2012, 17:03) *
Мораль:
Вы бы описали свой алгоритм, а люди бы посмотрели на него, и сказали бы свое мнение. Не исключаю, что то, что вы придумали - уже известно, и имеет определенные границы применения, либо определенные "грабли".

В данный момент размышления следующие. Фарроу (Лагранж 3-го порядка) - это имхо по сути (хотя многие могут со мной не согласиться) тот же кубический сплайн. Локальный, определяемый для 4-х точек, но действующий только на средний интервал из 3-х. Точно так же, как и сплайны Эрмита, например. Тот факт, что Лагранж при построении проходит через все 4 точки, не дает значения интерполирующей функции в левом и правом интервалах, поскольку при интерполяции собственно самих этих боковых интервалов (когда они являются центральными) полином проходит совершенно не так, как проходит в случае если интервал является правым или левым относительно центрального. Значит нельзя считать условие прохождение полинома через крайние точки самым оптимальным с точки зрения построения сплайна. Я придумал (а Катмулл и Ром до меня) другие условия: сплайн проходит через 2 точки и имеет определенные производные в них же, так чтобы полученная функция имела непрерывную первую производную. Сначала я придумал считать значение этой производной, как тангенс угла-биссектрисы исходных двух (словами трудно объяснить, надо на графике показывать). Только что проверил этот вариант - при малых дискретизациях ошибка выше Катмулла-Рома, при увеличении начиная где-то с 12 точек почти полностью сливается с Катмуллом-Ромом (график ниже). Но само значение производной рассчитывается через тангенсы-арктангенсы и достаточно сложно. Это и была моя вторая идея, которую я проверил только что. А потом я придумал считать производную как тангенс наклона соседних точек - собственно то, что потом узнал как Катмулла-Рома.

ЗЫ сейчас я пытаюсь построить интерполяцию кубическим сплайном, зная точные значения производной искомой функции в точках отсчета. И сравнить её с Фарроу. Если она окажется лучше (а я на это рассчитываю), тогда мои предположения насчет неидеальности условия на сплайн Лагранжа-Фарроу верны, и может быть можно будет придумать ещё какой-нибудь вариант расчета производных по заданным отсчетам, который приводил бы к бОльшей точности чем Фарроу и был бы не очень громоздок.

Собственно, на текущий момент мысли таковы. А снизу - график ошибки Фарроу, Катмулла-Рома и метода "биссектрисы" (как я его называю sm.gif ) И обещанный ресемплинг синуса 3920Гц с исходных 8000 до 44100 sm.gif

Upd: добавлен график сравнения ошибок 4-х методов: зеленый - Катмулла-Рома, синий - Фарроу, желтый - полиномами Лагранжа 4 степени, красный - кубическими сплайнами при условии точного знания производной интерполируемой функции во точках отсчета. Получается, красный - теоретически возможный предел для сплайнов 3-го порядка с условиями по производным в точках отсчета. Но достаточно хороший предел, надо сказать, можно к нему и постремиться sm.gif Осталось только придумать красивую и точную процедуру угадывания производных. Я придумал пока две - одна оказалась Катмуллом-Ромом, другая - сложнее неё и не лучше по результатам. Может придумаю ещё sm.gif
_Ivana
В продолжение эпического мыслевыражения sm.gif Задача: имеем 3 точки при равномерной дискретизации. Надо придумать, какую мы хотим производную интерполирующего сплайна в средней точке. Катмулл и Ром предложили просто - линия через крайние точки, средняя точка игнорируется - получается относительно большая ошибка. Я сейчас подумал - мы можем интерполировать эти 3 точки какой-нибудь красивой гладкой функцией, и посчитать значение её производной в средней точке. На ум сразу приходит парабола. Но, похоже, это и есть то, что имеется в виду под "сплайнами, заканчивающимися параболой" sm.gif http://alglib.sources.ru/interpolation/spline3.php Куда не сунься - все уже украдено до нас! Реалистичный Термит похоже снова прав...
Timmy
Цитата(_Ivana @ Apr 9 2012, 23:18) *
гладкой функцией, и посчитать значение её производной в средней точке. На ум сразу приходит парабола. Но, похоже, это и есть то, что имеется в виду под "сплайнами, заканчивающимися параболой" sm.gif http://alglib.sources.ru/interpolation/spline3.php Куда не сунься - все уже украдено до нас! Реалистичный Термит похоже снова прав...

В общем случае кубический сплайн можно построить сразу по большому числу точек, обеспечив непрерывность первой и второй производной во всех точках. Для этого требуется решение относительно сложной системы линейных уравнений. В "сплайнах, заканчивающихся параболой" для крайних точек дополнительно задаётся условие равенства нулю третьей производной, для определённости. Таким образом, крайние отрезки интерполируются полиномами второй степени, а не третьей.
Ещё замечу, что тест надо делать до 100 точек на период синусоиды, так как ошибка в 0.001 при 20 точках - это просто порнографияsm.gif. Для максимальной ошибки 10^-6 требуется около 50-60 точек при использовании полинома Лагранжа. И лучше использовать логарифмический масштаб по вертикали.
_Ivana
Спасибо, я почитал обзорно про фундаментальные, натуральные и прочие кубические сплайны, и пришел к выводу, что все они разделяются на 2 важных класса - локальные (требующие конечное число точек в окрестности интерполируемого значения) и остальные, которые решаются как вы и сказали "сразу по всем точкам". Мне бы хотелось остаться в рамках локальных сплайнов, по многим причинам.

Про параболу и Катмулла-Рома: я с удивлением обнаружил, что если 3 точки интерполировать параболой, то производная в средней точке ВСЕГДА будет равна прямой через крайние sm.gif Ну вот так Лагранж 2-го порядка проводит свои полиномы! Но я найду способ учесть положение средней точки, у меня уже есть идеи sm.gif

А про 100 точек и логарифмический масштаб... Вы правы конечно, но пока я просто качественно проверяю разные алгоритмы, для оценки предпочтения одного перед другими, без особого упора на абсолютные значения, и надеюсь что кривые отклонений не пересекутся где-то там на 50-100 точках sm.gif При более детальном количественном анализе конечно придется строить логарифмический масштаб и от 8 до 100 точек на период.
_Ivana
Пока все мои попытки придумать производную точнее чем Катмулл-Ром потерпели неудачу.
Но хотя бы выложу красивый график - как и просили, до 100 точек и в логарифмическом масштабе. Лагранж-4 обогнал-таки кубический сплайн с точными производными (если я нигде не ошибся). Да и сами графики какие-то подозрительно линейные, и весьма разнятся с представленными в недавней ссылке по сплайновой интерполяции... Хотя у меня и по оси абсцисс масштаб тоже логарифмический, а в тех графиках линейный, это может как-то объяснить красивую прямизну графиков sm.gif Но сами значения у меня повыше, например для сплайна с точными производными.
_Ivana
С интересом разглядывая последний график, я могу сказать следующее:
1) можно ввести параметр так называемой "мощности" алгоритма интерполяции - угол наклона прямой линии (или почти прямой) на графике.
2) сравнивать алгоритмы можно по погрешности при малых дискретизациях (стартовой погрешности) и мощности. Например, Лагранж-4 проигрывает сплайнам с производными при малом количестве точек, но за счет большей мощности обгоняет последний при где-то 28 точках и дальше только увеличивает свое преимущество. А Катмулл-Ром при малом количество точек близок к Фарроу (хотя и все равно хуже), но за счет меньшей мощности при увеличении количества точек все больше и больше отстает от него. Интересно поведение Фарроу и сплайна по производным - они имеют одинаковую (насколько можно судить по графикам) мощность, но сплайн по производным всегда на порядок (в 10 раз) точнее sm.gif
3) из всего перечисленного можно предположить, что максимально достижимая мощность сплайнов с угадыванием производных (типа Катмулла-Рома и т.п.) равна мощности сплайна с известными производными, и следовательно мощности Фарроу (Лагранжа 3 порядка). А значит, как бы я не исхитрялся с алгоритмом угадывания производных, он уступит по мощности точным производным, и следовательно Фарроу sm.gif Я могу получить выигрыш только на начальном этапе - при малом (относительно) количестве точек, но потом Фарроу обгонит (как Лагранж-4 обогнал точные производные). Значит, теоретические изыскания могут рассчитывать только на то, что этот обгон состоится как можно позже, и математика алгоритма будет при этом проще Фарроу. У меня есть некоторые сомнения в целесообразности и осуществимости таких поисков. Фарроу оказался сильным (мощным sm.gif ). И он победил меня на поле кубических сплайнов как таковых, хотя сам им в какой-то степени и является. Остается только признать свое поражение... smile3046.gif
Михаил_K
Цитата(_Ivana @ Apr 9 2012, 18:43) *
В данный момент размышления следующие. Фарроу (Лагранж 3-го порядка) - это имхо по сути (хотя многие могут со мной не согласиться) тот же кубический сплайн. Локальный, определяемый для 4-х точек, но действующий только на средний интервал из 3-х. Точно так же, как и сплайны Эрмита, например. Тот факт, что Лагранж при построении проходит через все 4 точки, не дает значения интерполирующей функции в левом и правом интервалах, поскольку при интерполяции собственно самих этих боковых интервалов (когда они являются центральными) полином проходит совершенно не так, как проходит в случае если интервал является правым или левым относительно центрального. Значит нельзя считать условие прохождение полинома через крайние точки самым оптимальным с точки зрения построения сплайна. Я придумал (а Катмулл и Ром до меня) другие условия: сплайн проходит через 2 точки и имеет определенные производные в них же, так чтобы полученная функция имела непрерывную первую производную. Сначала я придумал считать значение этой производной, как тангенс угла-биссектрисы исходных двух (словами трудно объяснить, надо на графике показывать). Только что проверил этот вариант - при малых дискретизациях ошибка выше Катмулла-Рома, при увеличении начиная где-то с 12 точек почти полностью сливается с Катмуллом-Ромом (график ниже). Но само значение производной рассчитывается через тангенсы-арктангенсы и достаточно сложно. Это и была моя вторая идея, которую я проверил только что. А потом я придумал считать производную как тангенс наклона соседних точек - собственно то, что потом узнал как Катмулла-Рома.


Изобретатель вы наш. Об этом уже много лет в институтах на лекциях рассказывают. Вы попробуйте сделать то, что я вам предложил.
thermit
Есть готовы формулы, по которым можно посчитать детерминированную погрешность интерполяции (в том числе с кратными узлами) и не париться со всякими сомнительными экспериментами... А избыток энергии направить в какое-нить мирное русло.
_Ivana
Цитата(Михаил_K @ Apr 10 2012, 12:57) *
Изобретатель вы наш. Об этом уже много лет в институтах на лекциях рассказывают. Вы попробуйте сделать то, что я вам предложил.

Одно дело на лекциях, а другое пощупать и убедиться самому. И я сделал все из того что вы предложили - и алгоритмы свои (все варианты) рассказал, и спектр синуса 0.49 от частоты дискретизации ресемпленный в несколько раз выложил. А больше вы вроде ничего не предлагали.

Цитата(thermit @ Apr 10 2012, 13:41) *
Есть готовы формулы, по которым можно посчитать детерминированную погрешность интерполяции (в том числе с кратными узлами) и не париться со всякими сомнительными экспериментами... А избыток энергии направить в какое-нить мирное русло.

А мне мои эксперименты понравились и не кажутся такими сомнительными sm.gif И продолжая тему конструктивизма - вы знаете какое-нибудь другое мирное русло, в которое я мог бы направить свой избыток энергии, и которое было бы не менее интересно и увлекательно? sm.gif Хотя, у меня тоже есть идеи насчет других русел.
ViKo
Цитата(_Ivana @ Apr 10 2012, 12:57) *
Одно дело на лекциях, а другое пощупать и убедиться самому. И я сделал все из того что вы предложили - и алгоритмы свои (все варианты) рассказал, и спектр синуса 0.49 от частоты дискретизации ресемпленный в несколько раз выложил. А больше вы вроде ничего не предлагали.

Предлагаю. Синус с частотой 1kHz оцифруйте с частотой 5kHz. А потом интерполируйте до частоты дискретизации 50kHz. И покажите спектр с полосе 0-25kHz.
Михаил_K
Цитата(_Ivana @ Apr 10 2012, 13:57) *
и спектр синуса 0.49 от частоты дискретизации ресемпленный в несколько раз выложил. А больше вы вроде ничего не предлагали.

А где? Че-то не увидел
_Ivana
Цитата(ViKo @ Apr 10 2012, 14:34) *
Предлагаю. Синус с частотой 1kHz оцифруйте с частотой 5kHz. А потом интерполируйте до частоты дискретизации 50kHz. И покажите спектр с полосе 0-25kHz.

Сделаю. Вечером, как дома буду. По Катмуллу-Рому. Хотя могу для сравнения ещё по Фарроу, Лагранжу 4 порядка, линейному...

Цитата(Михаил_K @ Apr 10 2012, 15:36) *
А где? Че-то не увидел

На предыдущей странице в последнем посте средний график. С вполне предсказуемым результатом, как и для любого другого локального метода интерполяции по 4 точкам - хоть того же Фарроу.
Михаил_K
Понятно. Просто там такой ужОс изображен, что я сразу и не понял. Я так понимаю что наш синус - это пик в районе 4 кГц, и рядышком же стоит его алиас, практически того же уровня. А вот теперь уменьшая частоту синуса, найдите такую, при которой алиас будет ниже дБ на 40 - 45. Ну и всякий мусор тоже должен быть не выше этого уровня. И напишите ее значение относительно частоты дискретизации.
NiceParty
Цитата(Михаил_K @ Apr 10 2012, 16:44) *
Понятно. Просто там такой ужОс изображен, что я сразу и не понял. Я так понимаю что наш синус - это пик в районе 4 кГц, и рядышком же стоит его алиас, практически того же уровня...

Этот "ужОс" вполне предсказуем, т.к. при таком соотношении исходных частот сигнала и дискретизации ни одна полиномиальная интерполяция не даст нормального результата.
Лично по моим наблюдениям для хоть какого-то приемлемого результата при полиномиальной интерполяции максимальная частота исходного сигнала не должна быть больше 1/4 частоты семплирования. А лучше 1/8. Именно поэтому прежде чем применять алгоритмы полиномиальной интерполяции (в частности Лагранж 3-й степени с оптимизацией расчета по Фарроу) рекомендуют апсемплинг в 2, 4 и т.д. раз.
Если Вы знаете вариант полиномиальной интерполяции, который хорошо справляется с сигналами 0,48 частоты дискретизации, то расскажите, я буду весьма признателен.
Заранее спасибо.
С уважением, Александр.
rudy_b
Цитата(_Ivana @ Apr 10 2012, 10:08) *
...Остается только признать свое поражение...

Не торопитесь. С точки зрения практики, минимизация нужна именно там, где ошибка велика (по сравнению с прочими ее источниками, а их немало). А когда величина ошибки становится малой - не столь важны ее небольшие колебания.
_Ivana
Цитата(ViKo @ Apr 10 2012, 14:34) *
Предлагаю. Синус с частотой 1kHz оцифруйте с частотой 5kHz. А потом интерполируйте до частоты дискретизации 50kHz. И покажите спектр с полосе 0-25kHz.

Первый - Катмулл-Ром, второй - Фарроу
ViKo
А линейную интерполяцию можете забомбить, для сравнения?
Что-то много лишнего. Откуда взялись частоты 2 kHz и 3 kHz? Если частота дискретизации была 5 kHz, то будут только 1 kHz и 4 kHz, ну и т.д. 14, 16, 19, 21... После интерполяции в идеале должны были остаться только 1 kHz и 49 kHz.
А много ли точек в вашем кадре, по которому спектр вычисляете? А не увеличить ли количество раз в 250? И окна еще разные можно попробовать.

P.S. А линейный масштаб по частоте приятнее будет смотреться.
_Ivana
По порядку - спектр исходного сигнала, после линейной интерполяции (sm.gif ) и Лагранж 4-го порядка.
ViKo
Где какой? А красный и синий что за спектры?
ViKo
P.S. А линейный масштаб по частоте приятнее будет смотреться.
_Ivana
Лагранж-4 из последних 3-х картинок самый зашумленный. Синий - мгновенный, красный - пиковый.
ViKo
Ну, и как это понимать? Что линейная интерполяция более качественная???
_Ivana
Подозреваю что на вашем примере - да. При ресемплировании того же синуса 1кГц из 44100 в те же 50000 будет совершенно другая картина, спектр линейного преобразования будет содержать больше ВЧ составляющих.
ViKo
Цитата(_Ivana @ Apr 10 2012, 20:47) *
Подозреваю что на вашем примере - да.

Странно...
То есть, имеем 5 точек на синусоиде. Забили внутри каждого промежутка между точками еще по 9 (увеличили частоту дискретизации в 10 раз). В первый раз тупо ровненько по прямой, во второй - по хитрому полиному Лагранжа. И оказалось, что первый вариант лучше?
Можно узнать ответы на все вопросы в сообщении 91?
_Ivana
Количество точек FFT = 16384. А на другие вопросы или ответил, или они риторические.
Впрочем, могу прислать вам вавки - сами проанализируете.
ViKo
Цитата(_Ivana @ Apr 10 2012, 21:01) *
Количество точек FFT = 16384. А на другие вопросы или ответил, или они риторические.
Впрочем, могу прислать вам вавки - сами проанализируете.

Тогда, если интерес у Вас не пропал, попробуйте интерполировать цифровыми фильтрами. Например, каскадным интегратором-гребенчатым фильтром, CIC. Похоже, интерполяция полиномами не даст качественного звука.
Та же ссылка, что уже давал, а от нее - дальше...
http://ru.wikipedia.org/wiki/%D0%9F%D0%B5%...%86%D0%B8%D1%8F

Ну, и сами синусоиды покажите, что ли? По паре периодов. Может, на глаз что-то неправильное попадется?
А если разрядность увеличить? А если там ограничение возникает?
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.