|
Придумал алгоритм интерполяции. Протестируем результаты?, вызов от дилетанта |
|
|
|
Apr 7 2012, 12:23
|
Местный
  
Группа: Свой
Сообщений: 352
Регистрация: 13-08-11
Из: Воронеж
Пользователь №: 66 710

|
Пару дней назад пришлось вникнуть в азы ЦОС на примере ресемплинга. Почитал пару-тройку страничек в инете, про двойной апсемплинг, оконные функции, полиномы Лагранжа-Фарроу и т.п. И придумал свой алгоритм  Без таблиц, на чистой математике. По объему операций существенно меньше Фарроу. Реализовал его, как обычно, сначала на 1С  Посмотрел графики. Потом перевел в целочисленную математику и с помощью коллеги наваял программку - ресемплер wav файлов. С заданием частоты ресемплинга и выбором варианта - своего или Фарроу. Собственно, предлагаю: заинтересованные лица выкладывают вавки, я их ресемплю с нужной частотой двумя вариантами и выкладываю на всеобщее скачивание/заслушивание. Желающие делятся своими мнениями по поводу  ЗЫ поскольку я совершенный дилетант в сабжевом вопросе, я вполне допускаю что этот алгоритм уже давно придуман до меня. Но навскидку я не нашел ничего похожего. Графические примеры работы алгоритмов: точки 50, 70, 20, края диапазона добиты нулями. График - ось абсцисс вниз, ординат - вправо. Фарроу: CODE *--- 0 * * * * * * * * * *--- 0 * * * * * * * * * *--- 50 * * * * * * * * * *--- 70 * * * * * * * * * *--- 20 * * * * * * * * * *--- 0 * * * * * * * * *
Мой алгоритм: CODE *--- 0 * * * * * * * * * *--- 0 * * * * * * * * * *--- 50 * * * * * * * * * *--- 70 * * * * * * * * * *--- 20 * * * * * * * * * *--- 0 * * * * * * * * *
За качество обоих графиков извиняйте - они в псевдографике с грубым "разрешением", на самом деле они более красивые
Сообщение отредактировал _Ivana - Apr 7 2012, 12:31
|
|
|
|
11 страниц
1 2 3 > »
|
 |
Ответов
(1 - 99)
|
Apr 7 2012, 15:18
|
Знающий
   
Группа: Участник
Сообщений: 781
Регистрация: 3-08-09
Пользователь №: 51 730

|
Цитата _Ivana: По объему операций существенно меньше Фарроу. 1. Фарроу - структура интерполятора лагранжа с минимальным числом умножителей. 2. Интерполяция - большой раздел вычислительной математики. Интерполяция лагранжа - самый простой (со всех точек зрения) способ полиномиальной интерполяции. Придумать что-либо проще нее - это вряд-ли.
Сообщение отредактировал thermit - Apr 7 2012, 15:19
|
|
|
|
|
Apr 7 2012, 17:47
|
Местный
  
Группа: Свой
Сообщений: 352
Регистрация: 13-08-11
Из: Воронеж
Пользователь №: 66 710

|
Я не знаю как прокомментировать последние реплики. Во-первых, я нигде не утверждал что моя интерполяция полиномиальна. Хотя и обратного я тоже не утверждал  И таки да, по объему вычислений она проще Фарроу. К тому же, в первом посте я привел графики. Пусть и грубые, но там видно, что моя интерполяция не совпадает с Фарроу и не является ей, а значит и Лагранжем 3-го порядка как минимум. Если интересует проверка на других исходных данных - выложите ваши точки, покажу новые графики. Лучше подскажите нормальный спектроанализатор вавок (из файла на не со входа звуковухи), и чтобы весил не как СаундФордж. А если ещё и будет выдавать численные коэффициенты - вообще было бы хорошо. Сразу выложу вам цифры и спектры ресемплинга простых и не очень простых сигналов. Мой GoldWave не видит разницы при ресемплинге на +500Гц (в оцифровку 44600) как на синусе 500Гц (оцифровка 44100) так и на сумме синусов с биением частоты в 1%.
Сообщение отредактировал _Ivana - Apr 7 2012, 17:56
|
|
|
|
|
Apr 7 2012, 18:50
|
Знающий
   
Группа: Участник
Сообщений: 674
Регистрация: 26-08-05
Пользователь №: 7 997

|
Цитата(_Ivana @ Apr 7 2012, 20:47)  Я не знаю как прокомментировать последние реплики. Во-первых, я нигде не утверждал что моя интерполяция полиномиальна. Хотя и обратного я тоже не утверждал  И таки да, по объему вычислений она проще Фарроу. К тому же, в первом посте я привел графики. Пусть и грубые, но там видно, что моя интерполяция не совпадает с Фарроу и не является ей, а значит и Лагранжем 3-го порядка как минимум. Если интересует проверка на других исходных данных - выложите ваши точки, покажу новые графики. Лучше подскажите нормальный спектроанализатор вавок (из файла на не со входа звуковухи), и чтобы весил не как СаундФордж. А если ещё и будет выдавать численные коэффициенты - вообще было бы хорошо. Сразу выложу вам цифры и спектры ресемплинга простых и не очень простых сигналов. Мой GoldWave не видит разницы при ресемплинге на +500Гц (в оцифровку 44600) как на синусе 500Гц (оцифровка 44100) так и на сумме синусов с биением частоты в 1%. SpectraPlus. Действительно, спектр рассудит. Можно найти в 'радиосканнере'
Сообщение отредактировал sup-sup - Apr 7 2012, 18:59
|
|
|
|
|
Apr 7 2012, 19:41
|
Местный
  
Группа: Свой
Сообщений: 352
Регистрация: 13-08-11
Из: Воронеж
Пользователь №: 66 710

|
Спасибо, скачал, поставил. Сгенерировать ключ не удалось, использую 30-дневную версию. Действительно много возможностей. Навскидку, что увидел: Исходный синус 500Гц (44100) THD = 0.00063, IMD = 0.1798 ресемплится в 44600. Мой алгоритм: THD = 0.00124, IMD = 0.2349 Фарроу: THD = 0.00109, IMD = 0.2349 Если ничего не напутал  Биения 500Гц + 1% Исходный сигнал THD = 0.00054, IMD = 0.6593 Мой алгоритм: THD = 0.00180, IMD = 0.6442 Фарроу: THD = 0.00125, IMD = 0.6443 Термит, если нечего сказать конструктивно (кроме очевидной методики проверки отклонения от целевого сигнала). то можно просто не писать в этот топик? 2 картинки спектра ресемплинга биений 500Гц+1% (ресемплинг на 500Гц). Первая - мой алгоритм, вторая - Фарроу: Принимаются пожелания какие ещё тестовые сигналы ресемплить и посмотреть, спектр, какие может показательные коэффициенты (сигнал/шум там или что ещё из имеющегося в СпектраПлюсе)
Сообщение отредактировал _Ivana - Apr 7 2012, 19:29
Эскизы прикрепленных изображений
|
|
|
|
|
Apr 7 2012, 19:47
|
Знающий
   
Группа: Участник
Сообщений: 674
Регистрация: 26-08-05
Пользователь №: 7 997

|
Цитата(_Ivana @ Apr 7 2012, 22:41)  Спасибо, скачал, поставил. Сгенерировать ключ не удалось, использую 30-дневную версию. Действительно много возможностей. Навскидку, что увидел: Исходный синус 500Гц (44100) THD = 0.00063, IMD = 0.1798 ресемплится в 44600. Мой алгоритм: THD = 0.00124, IMD = 0.2349 Фарроу: THD = 0.00109, IMD = 0.2349 Если ничего не напутал  Биения 500Гц + 1% Исходный сигнал THD = 0.00054, IMD = 0.6593 Мой алгоритм: THD = 0.00180, IMD = 0.6442 Фарроу: THD = 0.00125, IMD = 0.6443 Термит, если нечего сказать конструктивно (кроме очевидной методики проверки отклонения от целевого сигнала). то можно просто не писать в этот топик? 2 картинки спектра ресемплинга биений 500Гц+1% (ресемплинг на 500Гц). Первая - мой алгоритм, вторая - Фарроу: Принимаются пожелания какие ещё тестовые сигналы ресемплить и посмотреть, спектр, какие может показательные коэффициенты (сигнал/шум там или что ещё из имеющегося в СпектраПлюсе)  Еще можно по спектрограмме оценить для сложного сигнала на разные артефакты. В SpectraPlus спектрограммы так себе. Самые лучшие, что я видел, делает SA (в том же 'радиосканнере' есть. Демо-версии достаточно. А ресемплить сигналы со сложным спектром, меняющимся во времени. Еще, близким к частоте Найквиста. Если алгоритм позволяет это.
Сообщение отредактировал sup-sup - Apr 7 2012, 19:51
|
|
|
|
|
Apr 7 2012, 19:56
|
Местный
  
Группа: Свой
Сообщений: 352
Регистрация: 13-08-11
Из: Воронеж
Пользователь №: 66 710

|
Цитата(sup-sup @ Apr 7 2012, 23:47)  А ресемплить сигналы со сложным спектром, меняющимся во времени. Еще, близким к частоте Найквиста. Если алгоритм позволяет это. Например какие? ГолдВэвйв много разных может генерить, СпектраПлюс поменьше вариантов, но тоже есть кое-что. Есть синус умноженный на экспоненту и много чего ещё диковинного, плюс самому можно формулы написать  Частотная модуляция . 500+-Гц. Ресемплинг тот же - с 44100 до 44600. Мой THD = 0.00091, IMD = 0.6729, слева Фарроу THD = 0.00112, IMD = 0.6729, справа
Сообщение отредактировал _Ivana - Apr 7 2012, 20:06
Эскизы прикрепленных изображений
|
|
|
|
|
Apr 7 2012, 20:09
|
Знающий
   
Группа: Участник
Сообщений: 781
Регистрация: 3-08-09
Пользователь №: 51 730

|
Цитата _Ivana: Термит, если нечего сказать конструктивно (кроме очевидной методики проверки отклонения от целевого сигнала). то можно просто не писать в этот топик? С начала этого топика кроме меня только 1 (один) человек ответил вам конструктивно. Пальцем тыкать не хочу. Это что касается конструктивизма в частности. Что касается конструктивизма вообще: 1 Да. Я хочу увидеть не непонятные картинки, а пиковую ошибку интерполяции гармонического сигнала в зависимости от частоты при частоте дискретизации = 1. Все остальное не несет никакой полезной информации. 2 Хотелось бы понять принципиальную новизну вашего метода. Ведь полиномиальная интерполяция - самая простая. Все другие способы (дробно-рациональная, тригонометрическая и т д) существенно сложнее. в этой связи 3 Обнародуйте свой алгоритм. едва-ли этим вы уроните кого-либо под стол.
|
|
|
|
|
Apr 7 2012, 20:25
|
Знающий
   
Группа: Участник
Сообщений: 674
Регистрация: 26-08-05
Пользователь №: 7 997

|
Цитата(_Ivana @ Apr 7 2012, 22:56)  Например какие? ГолдВэвйв много разных может генерить, СпектраПлюс поменьше вариантов, но тоже есть кое-что. Есть синус умноженный на экспоненту и много чего ещё диковинного, плюс самому можно формулы написать  Частотная модуляция . 500+-Гц. Ресемплинг тот же - с 44100 до 44600. Мой THD = 0.00091, IMD = 0.6729, слева Фарроу THD = 0.00112, IMD = 0.6729, справа Я предложил (по методике тестирования) для визуальной оценки смотреть спектрограммы в хорошем разрешении. Поиграться при этом размером FFT для нахождения лучшего разрешения по частоте и по времени. Это даст не усредненный замазанный результат, а более пиковый, как сказал thermit. Из сигналов можно взять ЛЧМ (chirp) от нулевой частоты до fs/2. Еще, сумму нескольких синусов в верху диапазона с разными фазами. И вообще, искать именно тот сигнал, который плохо интерполируется. В этом случае вопросов и не будет. Ищите неисправности в алгоритме и, если не находите, все хорошо. И смотреть в динамике, то есть спектрограммой. Это для качественной оценки одним взглядом. Более интересные места смотреть подробнее во временной и в частотной области.
Сообщение отредактировал sup-sup - Apr 7 2012, 20:30
|
|
|
|
|
Apr 7 2012, 20:54
|
Местный
  
Группа: Свой
Сообщений: 352
Регистрация: 13-08-11
Из: Воронеж
Пользователь №: 66 710

|
ОФФ: потому что я её хорошо знаю, и использую как тестовый инструмент для отладки разной математики. Она отлично выводит и таблицы и графики и псевдографики и я могу удобно просматривать любые промежуточные результаты в любом виде и формате. И всем рекомендую  Например, для первого поста потребовалась псевдографика с хитрыми непечатными символами а-ля пробел, ибо пробелы с краев отрезаются. В 1С я это сделал за минуту. ЗЫ я понимаю что критики с претензиями предпочитают наверное матлаб или маткад, и я с ними согласен, но его надо ещё найти, поставить и освоить.
|
|
|
|
|
Apr 7 2012, 21:21
|
Знающий
   
Группа: Участник
Сообщений: 781
Регистрация: 3-08-09
Пользователь №: 51 730

|
Цитата _Ivana: ЗЫ я понимаю что критики с претензиями предпочитают наверное матлаб или маткад, и я с ними согласен, но его надо ещё найти, поставить и освоить. Угу. Предпочитают. Дык для гениев еще ексель есть... Там даже синус имеецца. Не говоря уж про тангенсы всякие... Для гениев чуть меньшего размера осмелюсь порекомендовать это изделие www.jsoftware.com (v6.x).
Сообщение отредактировал thermit - Apr 7 2012, 21:26
|
|
|
|
|
Apr 7 2012, 21:45
|
Местный
  
Группа: Свой
Сообщений: 352
Регистрация: 13-08-11
Из: Воронеж
Пользователь №: 66 710

|
За рекомендации всегда спасибо. Но от специалистов они всегда ценнее и эффективнее. Я уже нашел интегрируемый в 1С вариант: CODE // синус function sin(value,sc=0) try if sc=0 then sc=createObject("MSScriptControl.ScriptControl"); endif; sc.language="VBscript"; except return getEmptyValue(); endtry; return sc.eval("sin("+value+")"); endFunction Вроде работает, график на глаз гладкий. Буду пробовать с этой функцией.
|
|
|
|
|
Apr 8 2012, 00:48
|
Участник

Группа: Участник
Сообщений: 63
Регистрация: 11-10-10
Из: Москва
Пользователь №: 60 055

|
Цитата(_Ivana @ Apr 8 2012, 00:54)  ОФФ: потому что я её хорошо знаю, и использую как тестовый инструмент для отладки разной математики. Она отлично выводит и таблицы и графики и псевдографики и я могу удобно просматривать любые промежуточные результаты в любом виде и формате. И всем рекомендую  Например, для первого поста потребовалась псевдографика с хитрыми непечатными символами а-ля пробел, ибо пробелы с краев отрезаются. В 1С я это сделал за минуту. ЗЫ я понимаю что критики с претензиями предпочитают наверное матлаб или маткад, и я с ними согласен, но его надо ещё найти, поставить и освоить. Интересно, попробовать вести бухгалтерию в Матлабе... Что-то в этом есть... Насчет интерполяции - как тут уже отмечали, интерполяция - это нахождение непрерывной функции, желательно выраженной с помощью простых действий - умножения, деления, сложения вычитания, может быть еще извлечения корня, проходящей через заданные точки. Имея такую функцию, мы можем найти ее значения, а, следовательно, значения входного сигнала в промежуточных точках. Насколько значение функции будет соответствовать входному сигналу? Неизвестно. Теоретически возможно, что входной сигнал между отсчетами улетает до небес. Поэтому мы должны сделать предположение, что сигнал - физическая величина, следовательно обладает конечной энергией и конечным - и весьма нешироким, спектром. Иначе неуместно говорить об интерполяции сигнала, а надо говорить об математической абстракции - провести кривую через столько-то точек. Удобным методом интерполяции является полиномиальная интерполяция - нахождение полинома степени N-1, выражающего функцию, проходящую через N точек. Лагранж предложил метод нахождения таких полиномов, а Фарроу - способ построения интерполятора оптимально использующего вычислительные мощности. Но по сути - это полиномиальная интерполяция, дающая одинаковый результат независимо от способа вычисления полинома, так как такой полином существует один. Такая интерполяция хорошо подходит, в частности, к музыке, так как музыкальный сигнал - это некий набор гармонических составляющих - синусоид, параметры которых меняются относительно медленно. Эти синусоиды можно разложить в ряд Тейлора, сложить разложения, и получим, как раз, многочлен, причем невысокой степени. Есть случаи, когда полиномиальная интерполяция малопригодна - например, при попытке интерполировать изображение, оно может потерять четкость переходов...
|
|
|
|
|
Apr 8 2012, 07:26
|
Гуру
     
Группа: Модераторы
Сообщений: 8 752
Регистрация: 6-01-06
Пользователь №: 12 883

|
Цитата(ViKo @ Apr 8 2012, 10:28)  Я думаю, что максимально верной интерполяцией нужно считать любую. Даже аппроксимацию при бесконечном числе точек нельзя выбрать. Пока не выбран критерий близости функций. Вот попробуйте - (0, 0), (1, 1), (100, 0), (101, -1). Можете продлить... И.... главное - докажите, что Ваша интерполяция "максимально верная".
|
|
|
|
|
Apr 8 2012, 07:34
|

Универсальный солдатик
     
Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362

|
Цитата(Tanya @ Apr 8 2012, 10:26)  Вот попробуйте - (0, 0), (1, 1), (100, 0), (101, -1). Можете продлить... И.... главное - докажите, что Ваша интерполяция "максимально верная". Имею в виду равномерную дискретизацию. Доказательство элементарное. Идеальный ФНЧ имеет именно такую импульсную характеристику. А вот, собственно, доказательство. Первая же формула. http://ru.wikipedia.org/wiki/%D0%9F%D0%B5%...%86%D0%B8%D1%8F
|
|
|
|
|
Apr 8 2012, 11:20
|
Знающий
   
Группа: Участник
Сообщений: 781
Регистрация: 3-08-09
Пользователь №: 51 730

|
Цитата _Ivana: Пока желающие общаются на сопутствующие темы, а я пытаюсь получить графики отклонений, для затравки 2 картинки сравнения методов. Красный - синус, желтый - отсчеты, зеленый - мой, синий - Фарроу: Ну, это уже лучше. Теперь огласите число операций на выходной отсчет вашего интерполятора.
|
|
|
|
|
Apr 8 2012, 11:50
|
Местный
  
Группа: Свой
Сообщений: 352
Регистрация: 13-08-11
Из: Воронеж
Пользователь №: 66 710

|
Понятно что лучше  Число операций на отсчет оглашу чуть позже. Картинки с графиками максимального и среднего отклонений тоже уже получил - вышло немного забавно  Сейчас формирую полные графики отклонений с учетом любой возможной фазы интерполируемого синуса на любой частоте (сдвиг по фазе от 0 до 2пи внутри любой частоты). Графики опять же чуть позже. А пока ТИПИЧНЫЕ (НЕ СЛУЧАЙНЫЕ) картинки сравнения интерполяций (мой зеленый, Фарроу синий): Видна некая тенденция. Которая, кстати говоря, и позволяет мне предполагать, что по некоторым критериям мой алгоритм может оказаться явно лучше  Собственно, искомые графики  Красный - мой, зеленый - Фароу По оси абсцисс - отношение частоты дискретизации к частоте исходного синуса. Ссылаясь на Котельникова, я эту величину не брал меньше 2  Начинается с 2 и возрастает до.... можете на графике посмотреть. Первый график - максимальный модуль отклонения (в абсолютных единицах, при синусе от -1 до +1). Второй - средний модуль отклонения. ЗЫ собственно, недавно кто-то говорил, что "Интерполяция - большой раздел вычислительной математики" (С). Вот видимо эта умная математика и привела в итоге к таким результатам сравнения алгоритмов
Эскизы прикрепленных изображений
|
|
|
|
|
Apr 8 2012, 12:14
|
Знающий
   
Группа: Участник
Сообщений: 781
Регистрация: 3-08-09
Пользователь №: 51 730

|
Цитата _Ivana: собственно, недавно кто-то говорил, что "Интерполяция - большой раздел вычислительной математики" (С). Вот видимо эта умная математика и привела в итоге к таким результатам сравнения алгоритмов Пока что вы продолжаете плодить малоинформативные картинки. В тех условиях, что вы задали (4 точки на период) любой алгоритм интерполяции будет работать плохо. Что и видно на ваших картинках. Задайте хотя бы 6 т/период, а лучше 8. А еще лучше выполнить измерение максимальной погрешности интерполяции для ряда частот 1/64 1/32 1/16 1/8 и выложить тут график.
|
|
|
|
|
Apr 8 2012, 12:22
|
Местный
  
Группа: Свой
Сообщений: 352
Регистрация: 13-08-11
Из: Воронеж
Пользователь №: 66 710

|
thermit, странная ситуация  Кроме Вас, в этой теме похоже никого это не интересует и никто не хочет хоть какие-то графики от меня получить. Получается, что только Вы (при всем Вашем неоправданном снисходительно-пренебрежительном отношении) и пытаетесь разобраться. Так разбирайтесь, читайте внимательнее. ПОСЛЕДНИЕ ГРАФИКИ - это И ЕСТЬ максимальная и средняя погрешности ОТ ОТНОШЕНИЯ ЧАСТОТЫ ДИСКРЕТИЗАЦИИ К САМОЙ ЧАСТОТЕ СИНУСА - Вашими словами, количества точек на период синуса!Разберитесь в графиках пожалуйста. Это именно то, что Вы просили (насколько я понял). Масштаб оси абсцисс правда обратно-логарифмический, но мне так удобнее, да и нагляднее так.
Сообщение отредактировал _Ivana - Apr 8 2012, 12:23
|
|
|
|
|
Apr 8 2012, 12:42
|
Местный
  
Группа: Свой
Сообщений: 352
Регистрация: 13-08-11
Из: Воронеж
Пользователь №: 66 710

|
Картинки при 2 точках на период (предел по Котельникову) я показал ТОЛЬКО с целью наглядной демонстрации различия алгоритмов. И сам график отклонений логично строить от значения 2 - предела по Котельникову,я уже об этом писал. Вот картинки при повышении частоты дискретизации, по 2 - с разным фазовым сдвигом. Они не такие наглядные, поэтому я их и не показывал. При дальнейшем повышении частоты дискретизации будет еще ненагляднее
Сообщение отредактировал _Ivana - Apr 8 2012, 12:51
Эскизы прикрепленных изображений
|
|
|
|
|
Apr 8 2012, 12:48
|
Знающий
   
Группа: Участник
Сообщений: 781
Регистрация: 3-08-09
Пользователь №: 51 730

|
Цитата Разберитесь в графиках пожалуйста. Это именно то, что Вы просили (насколько я понял). Масштаб оси абсцисс правда обратно-логарифмический, но мне так удобнее, да и нагляднее так. Ошибка при 2-4 точках на период маскирует ошибки для меньших частот. Поэтому ваши картинки по-прежнему малоинформативны. Пора огласить число операций.
|
|
|
|
|
Apr 8 2012, 12:55
|
Местный
  
Группа: Свой
Сообщений: 352
Регистрация: 13-08-11
Из: Воронеж
Пользователь №: 66 710

|
Цитата(thermit @ Apr 8 2012, 16:48)  Ошибка при 2-4 точках на период маскирует ошибки для меньших частот. Поэтому ваши картинки по-прежнему малоинформативны. Пора огласить число операций. Хотите, построю этот же график но не с 2 а с 5 или 6 точек на период? Это будет тот же график, только отрезанный и отмасштибированный. Со скольки точек построить? А число операций - штука тонкая, как я надеюсь, Вы понимаете. Где-то есть аппаратное умножение, где-то нет. И с делением тоже. Но в любом случае меньше Фарроу - это точно
|
|
|
|
|
Apr 8 2012, 13:02
|
Знающий
   
Группа: Участник
Сообщений: 781
Регистрация: 3-08-09
Пользователь №: 51 730

|
Цитата Хотите, построю этот же график но не с 2 а с 5 или 6 точек на период? Это будет тот же график, только отрезанный и отмасштибированный. Со скольки точек построить? C 8-ми точек на период. Естественно, растянутый по оси y. Цитата А число операций - штука тонкая, как я надеюсь, Вы понимаете. Где-то есть аппаратное умножение, где-то нет. И с делением тоже. Но в любом случае меньше Фарроу - это точно Не надо туман напускать. Умножение, сложение, деление, извлечение корня - операции. Сколько и каких именно подобных операций на 1 выходной отсчет требует ваш интерполятор?
Сообщение отредактировал thermit - Apr 8 2012, 13:02
|
|
|
|
|
Apr 8 2012, 13:06
|
Местный
  
Группа: Свой
Сообщений: 352
Регистрация: 13-08-11
Из: Воронеж
Пользователь №: 66 710

|
Цитата(thermit @ Apr 8 2012, 17:02)  C 8-ми точек на период. Естественно, растянутый по оси y. Наконец-то разумные пожелания. Сейчас построю, прикреплю. Цитата(thermit @ Apr 8 2012, 17:02)  Не надо туман напускать. Умножение, сложение, деление, извлечение корня - операции. Сколько подобных операций на 1 выходной отсчет требует ваш интерполятор? А почему бы мне не напустить тумана в этом вопросе? Я ведь пока не хочу обнародовать алгоритм  Но повторяю в 100500-й раз - гарантированно меньше Фарроу при любых аппаратных возможностях  При усеченных возможностях - ощутимо меньше
|
|
|
|
|
Apr 8 2012, 13:20
|
Знающий
   
Группа: Участник
Сообщений: 781
Регистрация: 3-08-09
Пользователь №: 51 730

|
Цитата А почему бы мне не напустить тумана в этом вопросе? Я ведь пока не хочу обнародовать алгоритм sm.gif Но повторяю в 100500-й раз - гарантированно меньше Фарроу при любых аппаратных возможностях sm.gif При усеченных возможностях - ощутимо меньше У нас есть такие приборы... Но мы вам про них не расскажем (цэ) Зачем было тогда сюда писать?
|
|
|
|
|
Apr 8 2012, 13:22
|
Местный
  
Группа: Свой
Сообщений: 352
Регистрация: 13-08-11
Из: Воронеж
Пользователь №: 66 710

|
Термит, Вы были правы - маскирует. Мой- красный, Фарроу - зеленый. И по моему (если я нигде ничего не напутал), это действительные показатели алгоритмов, а не накопленная ошибка округления или что-то ещё. Ну чтож - результат таков каков он есть  Хотя я оставляю ещё шанс что я ошибся при построении графиков, но он честно говоря невелик  Спасибо вам за помощь в анализе (несмотря на остальные моменты)  Цитата(thermit @ Apr 8 2012, 17:20)  У нас есть такие приборы... Но мы вам про них не расскажем (цэ) Зачем было тогда сюда писать? А вы не обижайтесь. В наш век Кали Юги на дворе не все всем все рассказывают  К тому же, в самом заголовке темы я предложил протестировать РЕЗУЛЬТАТЫ, а не говорил что буду обнародовать алгоритм
Эскизы прикрепленных изображений
|
|
|
|
|
Apr 8 2012, 13:32
|
Знающий
   
Группа: Участник
Сообщений: 781
Регистрация: 3-08-09
Пользователь №: 51 730

|
Цитата _Ivana: В наш век Кали Юги на дворе не все всем все рассказывают Гы. Я буду первым, кто скомуниздит ваш супералгоритм и сказочно обогатится...
|
|
|
|
|
Apr 8 2012, 13:37
|
Местный
  
Группа: Свой
Сообщений: 352
Регистрация: 13-08-11
Из: Воронеж
Пользователь №: 66 710

|
Шутки шутками, а вот если бы моя кривая прошла ниже Фарроу, тогда уже был бы совсем другой разговор  Хотя, надо наверное ещё покрутить - поанализировать отклонения. Статистическими методами, например. Вдруг да окажется, что для какого-то класса задач и сигналов мой алгоритм будет иметь преимущество?  Хотя имхо и так неплохие результаты, особенно учитывая разность в количестве операций  Средняя ошибка. Тоже уступаю Фарроу....
Сообщение отредактировал _Ivana - Apr 8 2012, 13:48
Эскизы прикрепленных изображений
|
|
|
|
|
Apr 8 2012, 13:48
|
.
     
Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753

|
Цитата(ViKo @ Apr 8 2012, 18:10)  В том-то и дело, что, если функция оцифрована в соответствии с теоремой Котельникова, это будет единственная функция, проходящая через все наши точки. Вот же ж идеалисты. Учебники прямо так и учат. Никаких нуансов. Физику процесса надо бы понимать чтоб так категорично заявлять. Если даже БПФ "затрудняется" точно посчитать амплитуду дробной частоты по _исходным сэмплам_. То уж дубовый интерполятор и подавно не сможет (идеально точно и однозначно). Не стоит забывать, что всегда кол-во сэмплов ограничено на практике. Цитата(_Ivana) ...особенно учитывая разность в количестве операций Даже в общих чертах не проясните во сколько/насколько быстрее?
Сообщение отредактировал GetSmart - Apr 8 2012, 13:54
--------------------
Заблуждаться - Ваше законное право :-)
|
|
|
|
|
Apr 8 2012, 13:55
|
Местный
  
Группа: Свой
Сообщений: 352
Регистрация: 13-08-11
Из: Воронеж
Пользователь №: 66 710

|
Цитата(GetSmart @ Apr 8 2012, 17:48)  Даже в общих чертах не проясните во сколько/насколько быстрее? В общих чертах... Ну например, при расчете Фарроу используется деление на 6 (хорошо, уговорили - на 3  ). Даже если есть аппаратное деление, то мой алгоритм быстрее ..... а вот не знаю насколько - но будет как раз протестировать!  А уж если нет аппаратного деления - тогда за счет необходимости его эмуляции на асме получается ещё бОльшая разница. Кстати сказать, даже если бы Фарроу и не требовал этого пресловутого деления на 6, то мой алгоритм все равно бы был быстрее  Но больше не выпытывайте пожалуйста  Если получится - протестирую на железе и скажу реальную разницу в скорости.
|
|
|
|
|
Apr 8 2012, 14:07
|
Знающий
   
Группа: Участник
Сообщений: 781
Регистрация: 3-08-09
Пользователь №: 51 730

|
Цитата _Ivana: Ну например, при расчете Фарроу используется деление на 6 (хорошо, уговорили - на 3 sm.gif ). Деление на константу это умножение на константу. Так что в фарроу никаких деление нет в принципе. Есть умножение на константу и перемножение 2-х операндов. Сумма есть.
|
|
|
|
|
Apr 8 2012, 14:21
|
Местный
  
Группа: Свой
Сообщений: 352
Регистрация: 13-08-11
Из: Воронеж
Пользователь №: 66 710

|
Цитата(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 сложений - если считать как я написал, не оптимизированно. Кто посчитает за меньшее? Прошу ваш вариант.
Сообщение отредактировал _Ivana - Apr 8 2012, 14:22
|
|
|
|
|
Apr 8 2012, 14:47
|
Вечный ламер
     
Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453

|
Цитата(_Ivana @ Apr 8 2012, 08:21)  Кто посчитает за меньшее? Прошу ваш вариант. да весь интернет знает, только вы в неведении Цитата На этом синтез фильтра Фарроу третьего порядка можно считать законченным и подведем некоторые итоги: ..... 2. Фильтр третьего порядка требует всего 3 операции умножения и может применяться в реальном времени.
--------------------
|
|
|
|
|
Apr 8 2012, 14:56
|
Участник

Группа: Участник
Сообщений: 46
Регистрация: 2-12-10
Из: Воронеж
Пользователь №: 61 357

|
Цитата(des00 @ Apr 8 2012, 18:47)  да весь интернет знает, только вы в неведении  Прошу прощения, что вмешиваюсь в беседу уважаемых метров DSP. На рисунке 7: "Модифицированный фильтр Фарроу третьего порядка" из приведенной Вами в пример статьи я насчитал 11 операций сложения и 6 операций умножения для итогового значения полинома в точке интерполяции. Если Вы знаете как сократить это число операций, то, пожалуйста, расскажите. Мне бы очень пригодилась данная информация. Заранее спасибо. P.S. Две операции умножения на 1/2, конечно, лучше заменить на арифметический сдвиг вправо (подразумевается целочисленная математика). Но умножение на 1/6 я пока не знаю чем заменить. Буду признателен, если подскажете.
Сообщение отредактировал NiceParty - Apr 8 2012, 15:05
|
|
|
|
|
Apr 8 2012, 14:57
|
Местный
  
Группа: Свой
Сообщений: 352
Регистрация: 13-08-11
Из: Воронеж
Пользователь №: 66 710

|
Цитата(des00 @ Apr 8 2012, 18:47)  да весь интернет знает, только вы в неведении  des00 вы просто верите цитатам из интернета, даже не пытаясь проанализировать их смысл? Если найдутся участники, понимающие о чем речь, а также понимающие разницу в количестве операций при умножении на 1/2 и 1/6 даже во флоатах, и при этом будут иметь желание продолжить дискуссию - я готов.
|
|
|
|
|
Apr 8 2012, 14:59
|
Гуру
     
Группа: Модераторы
Сообщений: 8 752
Регистрация: 6-01-06
Пользователь №: 12 883

|
Цитата(ViKo @ Apr 8 2012, 17:10)  В том-то и дело, что, если функция оцифрована в соответствии с теоремой Котельникова, это будет единственная функция, проходящая через все наши точки. Какая-такая -"Эта"? Вы меня убиваете (без Котельникова). Функция номер раз - кусочно-линейная. Функция номер два - кусочно-квадратичная. Дальше сами... Единственность опровергнута? Ваша.
|
|
|
|
|
Apr 8 2012, 15:13
|
Вечный ламер
     
Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453

|
Цитата(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 вы просто верите цитатам из интернета, даже не пытаясь проанализировать их смысл? а вы слишком узко смотрите на реализацию
--------------------
|
|
|
|
|
Apr 8 2012, 15:28
|

Универсальный солдатик
     
Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362

|
Цитата(Tanya @ Apr 8 2012, 17:59)  Какая-такая -"Эта"? Вы меня убиваете (без Котельникова). Функция номер раз - кусочно-линейная. Функция номер два - кусочно-квадратичная. Дальше сами... Единственность опровергнута? Ваша. Эта, единственная - это когда в результирующей (полученной с помощью интерполяции) функции не будет спектральных составляющих, выше, чем были в исходной функции (которую оцифровываем в соответствии с теоремой Котельникова). Номер раз - кусочно-линейная - имеет резкие изломы при переходе от точки к точке, что говорит, что в спектре этой функции будут составляющие, выходящие за половину частоты дискретизации, с которой исходная функция была оцифрована. Номер два - аналогично, может быть, не так очевидно, но гарантированно... Дальше сами - при любом отклонении результата интерполяции от той, единственной, исходной... в спектре появятся дополнительные составляющие.
|
|
|
|
|
Apr 8 2012, 15:28
|
Знающий
   
Группа: Участник
Сообщений: 781
Регистрация: 3-08-09
Пользователь №: 51 730

|
Цитата des00: все переходит к набору сумматоров + сдвиги Умножение на константу и без всяких извращений сведется к сдвигам/суммам. Дополнительная суета не требуется.
|
|
|
|
|
Apr 8 2012, 15:49
|
Участник

Группа: Участник
Сообщений: 46
Регистрация: 2-12-10
Из: Воронеж
Пользователь №: 61 357

|
Цитата(des00 @ Apr 8 2012, 19:13)  это же просто и уже обсуждаллсь на форуме, умножьте все коэффициенты на 6, в результате этого коэффициенты фильтра будут 1,2,3,6, за счет операции рекомбинации, аналогичной описанной в статье, все переходит к набору сумматоров + сдвиги. что просто реализуется на любой платформе. остается только рассчет полинома. как уже сказал 3 умножения. В кол-ве сложений ошибся, признаюсь. Считать, сколько их там, с учетом оптимальной рекомбинации лень.
в результате такой "моидификации", коэффициент усиления преобразования интерполятора будет 6. легко переводиться в 6/8. И совсем привередливым, кому хочеться получить 1цу, приводиться простым делением через умножение. В идеале, конечно хотелось бы получить Ку=1. По этой методике не вижу, где получится экономия на операциях, т.к. что умножать вначале, что в конце - все равно, операция не исчезает... Может я чего-то не догоняю. Если продемонстрируете формулами, чтобы было видно, сколько операций в одном случае, а сколько в другом, то буду премного благодарен. P.S. Мне считать не лень, но я не смог увидеть преимуществ в кол-ве операций. Может, неправильно считал...
|
|
|
|
|
Apr 8 2012, 15:57
|
Гуру
     
Группа: Модераторы
Сообщений: 8 752
Регистрация: 6-01-06
Пользователь №: 12 883

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

Группа: Участник
Сообщений: 63
Регистрация: 11-10-10
Из: Москва
Пользователь №: 60 055

|
Цитата(_Ivana @ Apr 8 2012, 20:00)  Подскажите кто знает, какие ещё показатели (кроме максимального и среднего модулей отклонений) и как я могу получить, зная отклонения моей интерполяции от целевой функции во множестве точек?  Какая-нибудь там дисперсия и прочая вероятностно-статистические показатели? Что они каким-то образом характеризовали работу алгоритма. Я все ещё не теряю надежды выявить сильные/слабые стороны обоих методов  А Вы знаете целевую функцию? Зачем Вам тогда интерполяция - просто вычислите значения функции в нужных точках...
|
|
|
|
|
Apr 8 2012, 16:39
|

Универсальный солдатик
     
Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362

|
Цитата(Tanya @ Apr 8 2012, 18:57)  1. Котельников никак и никого не учил оцифровывать. 2. Ни про какие частоты в разложении в ряд Фурье интерполяции нет никакого дела. Мухи отдельно. Ладно? 3. Изломы имеются только в точках пересечения прямых. Если новую функцию там не определять, то какие изломы? Вы же сомневаетесь в их существовании для кусочно-квадратичной. Так объясните, что есть та самая правильная интерполяция? Лучше формулой. А то я Ваши слова плохо понимаю. 1. Без комментариев  2. Есть очень тесная связь, для ЦОС. 3. Не понял... кусочно-линейная... состоит из кусков линейки(  )... в месте склейки кусков будут изломы... практически, в каждой точке исходной функции. В наличии изломов кусочно-квадратичной (из кусков квадратиков  )... тоже не сомневаюсь. Говорю о том, это будет менее заметно (ближе к той, единственной), но дополнительные спектральные составляющие обязательно будут. Вместо формул (я же уже дал ссылку, там русским по белому написано!) картинку покажу.
Эскизы прикрепленных изображений
|
|
|
|
|
Apr 8 2012, 17:53
|
Знающий
   
Группа: Участник
Сообщений: 674
Регистрация: 26-08-05
Пользователь №: 7 997

|
Цитата(_Ivana @ Apr 8 2012, 19:00)  Подскажите кто знает, какие ещё показатели (кроме максимального и среднего модулей отклонений) и как я могу получить, зная отклонения моей интерполяции от целевой функции во множестве точек?  Какая-нибудь там дисперсия и прочая вероятностно-статистические показатели? Что они каким-то образом характеризовали работу алгоритма. Я все ещё не теряю надежды выявить сильные/слабые стороны обоих методов  После интерполяции должен остаться такой же спектр в исходной полосе. А за ее пределами нулевой. Так как реально такого не бывает, качество интерполяции можно сравнивать с классической реализацией (добавление нулей и фильтрация ненужных спектральных компонентов). Это в идеале, действительно, единственно возможная кривая, как сказал ViKo. А тут уже зависит от качества интерполирующего фильтра. От его неравномерности в полосе, от переходной полосы и от затухания вне полосы. Вот этими параметрами можно и мериться.
Сообщение отредактировал sup-sup - Apr 8 2012, 17:59
|
|
|
|
|
Apr 8 2012, 18:19
|
Местный
  
Группа: Свой
Сообщений: 352
Регистрация: 13-08-11
Из: Воронеж
Пользователь №: 66 710

|
Спасибо за дельные рекомендации, померю по возможности. ЗЫ to all - вы меня только пожалуйста не бейте  Я тут ещё почитал немного интернетов, и понял что я придумал так называемую "интерполяцию сплайнами Катмулла-Рома", точнее один из её вариантов  И ещё и проанализировал её в сравнении с Лагранжем по максимальной и средней ошибке  Я действительно не знал об этом раньше (я бы до таких фамилий никогда не додумался  ), но раз дело такое - как обещал, выкладываю код, сравните по быстродействию с Фарроу: 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; }
Последние условия - нормализация, в алгоритме необязательная, но при практическом ресемплировании вавок очень нужная, особенно если сигнал задран по амплитуде и присутствуют полки максимальных значений. Еще раз прошу прощения у общественности за внесенный переполох и самонадеянную претензию на ноу-хау  В любом случае спасибо, это была интересная практика!
|
|
|
|
|
Apr 9 2012, 07:54
|
Местный
  
Группа: Свой
Сообщений: 352
Регистрация: 13-08-11
Из: Воронеж
Пользователь №: 66 710

|
Цитата(ViKo @ Apr 9 2012, 08:16)  Это не нормализация, действительно, нужная при обработке звука, а ограничение. Хорошо, пусть будет ограничение  ЗЫ есть у меня ещё одна идейка  Надо бы её проверить теперь, благо, спасибо Термиту, я уже знаю как навскидку проверять разные алгоритмы интерполяции, и проверялка уже написана. Только хорошо бы выполнить 4 условия: 1) формализовать её сначала математически а потом в коде 2) победить Фарроу по отклонениям 3) оптимизировать по операциям чтобы было в разумных пределах 4) самое главное - чтобы это потом не оказалось методом какого-нибудь Фермана-Зингельшухера  Начинаю серию №2, надеюсь реализовать её тоже.
|
|
|
|
|
Apr 9 2012, 13:03
|
Знающий
   
Группа: Свой
Сообщений: 552
Регистрация: 29-02-08
Пользователь №: 35 481

|
_Ivana. Интересно было бы посмотреть на спектр сигнала полученного вашим интерполятором, при интреполяции в несколько раз, при условии на вход подается синус, частота которого близка к 1/2 частоты дискретизации. Например 0.49 частоты дискретизации. Оценить уровень аллиаса, который при этом получится. А если серьезно... Как то давно, на первом курсе института был у меня такой случай. Выполняли достаточно простенькое задание. Зову препода - типа сделал. Он подходит проверять. Вводит начальные значения. Получает результат. Вводит другие значения - программа отрабаывает не правильно. Ну я соответственно исправляю. Опять зову. Он опять вводит несколько вариантов исходных данных. Программа в очередной раз ломается. Я опять исправляю. Опять зову. Опять вводит несколько вариантов. Программа работает. Препод в задумчивости.. Пробует еще несколько вариантов. Программа работает. Препод задумчиво, со звуком "ХМ" лезет в код. Изучает внимательно. Вводит очередные исходные данные - программа ломается. На что он с криком "Ура" заставляет снова думать. Мораль: Вы бы описали свой алгоритм, а люди бы посмотрели на него, и сказали бы свое мнение. Не исключаю, что то, что вы придумали - уже известно, и имеет определенные границы применения, либо определенные "грабли".
|
|
|
|
|
Apr 9 2012, 14:43
|
Местный
  
Группа: Свой
Сообщений: 352
Регистрация: 13-08-11
Из: Воронеж
Пользователь №: 66 710

|
Цитата(Михаил_K @ Apr 9 2012, 17:03)  _Ivana. Интересно было бы посмотреть на спектр сигнала полученного вашим интерполятором, при интреполяции в несколько раз, при условии на вход подается синус, частота которого близка к 1/2 частоты дискретизации. Например 0.49 частоты дискретизации. Оценить уровень аллиаса, который при этом получится. Запросто. Чуть позже, как будет время. Цитата(Михаил_K @ Apr 9 2012, 17:03)  Мораль: Вы бы описали свой алгоритм, а люди бы посмотрели на него, и сказали бы свое мнение. Не исключаю, что то, что вы придумали - уже известно, и имеет определенные границы применения, либо определенные "грабли". В данный момент размышления следующие. Фарроу (Лагранж 3-го порядка) - это имхо по сути (хотя многие могут со мной не согласиться) тот же кубический сплайн. Локальный, определяемый для 4-х точек, но действующий только на средний интервал из 3-х. Точно так же, как и сплайны Эрмита, например. Тот факт, что Лагранж при построении проходит через все 4 точки, не дает значения интерполирующей функции в левом и правом интервалах, поскольку при интерполяции собственно самих этих боковых интервалов (когда они являются центральными) полином проходит совершенно не так, как проходит в случае если интервал является правым или левым относительно центрального. Значит нельзя считать условие прохождение полинома через крайние точки самым оптимальным с точки зрения построения сплайна. Я придумал (а Катмулл и Ром до меня) другие условия: сплайн проходит через 2 точки и имеет определенные производные в них же, так чтобы полученная функция имела непрерывную первую производную. Сначала я придумал считать значение этой производной, как тангенс угла-биссектрисы исходных двух (словами трудно объяснить, надо на графике показывать). Только что проверил этот вариант - при малых дискретизациях ошибка выше Катмулла-Рома, при увеличении начиная где-то с 12 точек почти полностью сливается с Катмуллом-Ромом (график ниже). Но само значение производной рассчитывается через тангенсы-арктангенсы и достаточно сложно. Это и была моя вторая идея, которую я проверил только что. А потом я придумал считать производную как тангенс наклона соседних точек - собственно то, что потом узнал как Катмулла-Рома. ЗЫ сейчас я пытаюсь построить интерполяцию кубическим сплайном, зная точные значения производной искомой функции в точках отсчета. И сравнить её с Фарроу. Если она окажется лучше (а я на это рассчитываю), тогда мои предположения насчет неидеальности условия на сплайн Лагранжа-Фарроу верны, и может быть можно будет придумать ещё какой-нибудь вариант расчета производных по заданным отсчетам, который приводил бы к бОльшей точности чем Фарроу и был бы не очень громоздок. Собственно, на текущий момент мысли таковы. А снизу - график ошибки Фарроу, Катмулла-Рома и метода "биссектрисы" (как я его называю  ) И обещанный ресемплинг синуса 3920Гц с исходных 8000 до 44100  Upd: добавлен график сравнения ошибок 4-х методов: зеленый - Катмулла-Рома, синий - Фарроу, желтый - полиномами Лагранжа 4 степени, красный - кубическими сплайнами при условии точного знания производной интерполируемой функции во точках отсчета. Получается, красный - теоретически возможный предел для сплайнов 3-го порядка с условиями по производным в точках отсчета. Но достаточно хороший предел, надо сказать, можно к нему и постремиться  Осталось только придумать красивую и точную процедуру угадывания производных. Я придумал пока две - одна оказалась Катмуллом-Ромом, другая - сложнее неё и не лучше по результатам. Может придумаю ещё
Сообщение отредактировал _Ivana - Apr 9 2012, 18:40
Эскизы прикрепленных изображений
|
|
|
|
|
Apr 9 2012, 19:55
|
Знающий
   
Группа: Участник
Сообщений: 835
Регистрация: 9-08-08
Из: Санкт-Петербург
Пользователь №: 39 515

|
Цитата(_Ivana @ Apr 9 2012, 23:18)  гладкой функцией, и посчитать значение её производной в средней точке. На ум сразу приходит парабола. Но, похоже, это и есть то, что имеется в виду под "сплайнами, заканчивающимися параболой" http://alglib.sources.ru/interpolation/spline3.php Куда не сунься - все уже украдено до нас! Реалистичный Термит похоже снова прав... В общем случае кубический сплайн можно построить сразу по большому числу точек, обеспечив непрерывность первой и второй производной во всех точках. Для этого требуется решение относительно сложной системы линейных уравнений. В "сплайнах, заканчивающихся параболой" для крайних точек дополнительно задаётся условие равенства нулю третьей производной, для определённости. Таким образом, крайние отрезки интерполируются полиномами второй степени, а не третьей. Ещё замечу, что тест надо делать до 100 точек на период синусоиды, так как ошибка в 0.001 при 20 точках - это просто порнография  . Для максимальной ошибки 10^-6 требуется около 50-60 точек при использовании полинома Лагранжа. И лучше использовать логарифмический масштаб по вертикали.
|
|
|
|
|
Apr 9 2012, 20:16
|
Местный
  
Группа: Свой
Сообщений: 352
Регистрация: 13-08-11
Из: Воронеж
Пользователь №: 66 710

|
Спасибо, я почитал обзорно про фундаментальные, натуральные и прочие кубические сплайны, и пришел к выводу, что все они разделяются на 2 важных класса - локальные (требующие конечное число точек в окрестности интерполируемого значения) и остальные, которые решаются как вы и сказали "сразу по всем точкам". Мне бы хотелось остаться в рамках локальных сплайнов, по многим причинам. Про параболу и Катмулла-Рома: я с удивлением обнаружил, что если 3 точки интерполировать параболой, то производная в средней точке ВСЕГДА будет равна прямой через крайние  Ну вот так Лагранж 2-го порядка проводит свои полиномы! Но я найду способ учесть положение средней точки, у меня уже есть идеи  А про 100 точек и логарифмический масштаб... Вы правы конечно, но пока я просто качественно проверяю разные алгоритмы, для оценки предпочтения одного перед другими, без особого упора на абсолютные значения, и надеюсь что кривые отклонений не пересекутся где-то там на 50-100 точках  При более детальном количественном анализе конечно придется строить логарифмический масштаб и от 8 до 100 точек на период.
|
|
|
|
|
Apr 9 2012, 22:33
|
Местный
  
Группа: Свой
Сообщений: 352
Регистрация: 13-08-11
Из: Воронеж
Пользователь №: 66 710

|
Пока все мои попытки придумать производную точнее чем Катмулл-Ром потерпели неудачу. Но хотя бы выложу красивый график - как и просили, до 100 точек и в логарифмическом масштабе. Лагранж-4 обогнал-таки кубический сплайн с точными производными (если я нигде не ошибся). Да и сами графики какие-то подозрительно линейные, и весьма разнятся с представленными в недавней ссылке по сплайновой интерполяции... Хотя у меня и по оси абсцисс масштаб тоже логарифмический, а в тех графиках линейный, это может как-то объяснить красивую прямизну графиков  Но сами значения у меня повыше, например для сплайна с точными производными.
Сообщение отредактировал _Ivana - Apr 9 2012, 22:44
Эскизы прикрепленных изображений
|
|
|
|
|
Apr 10 2012, 07:08
|
Местный
  
Группа: Свой
Сообщений: 352
Регистрация: 13-08-11
Из: Воронеж
Пользователь №: 66 710

|
С интересом разглядывая последний график, я могу сказать следующее: 1) можно ввести параметр так называемой "мощности" алгоритма интерполяции - угол наклона прямой линии (или почти прямой) на графике. 2) сравнивать алгоритмы можно по погрешности при малых дискретизациях (стартовой погрешности) и мощности. Например, Лагранж-4 проигрывает сплайнам с производными при малом количестве точек, но за счет большей мощности обгоняет последний при где-то 28 точках и дальше только увеличивает свое преимущество. А Катмулл-Ром при малом количество точек близок к Фарроу (хотя и все равно хуже), но за счет меньшей мощности при увеличении количества точек все больше и больше отстает от него. Интересно поведение Фарроу и сплайна по производным - они имеют одинаковую (насколько можно судить по графикам) мощность, но сплайн по производным всегда на порядок (в 10 раз) точнее  3) из всего перечисленного можно предположить, что максимально достижимая мощность сплайнов с угадыванием производных (типа Катмулла-Рома и т.п.) равна мощности сплайна с известными производными, и следовательно мощности Фарроу (Лагранжа 3 порядка). А значит, как бы я не исхитрялся с алгоритмом угадывания производных, он уступит по мощности точным производным, и следовательно Фарроу  Я могу получить выигрыш только на начальном этапе - при малом (относительно) количестве точек, но потом Фарроу обгонит (как Лагранж-4 обогнал точные производные). Значит, теоретические изыскания могут рассчитывать только на то, что этот обгон состоится как можно позже, и математика алгоритма будет при этом проще Фарроу. У меня есть некоторые сомнения в целесообразности и осуществимости таких поисков. Фарроу оказался сильным (мощным  ). И он победил меня на поле кубических сплайнов как таковых, хотя сам им в какой-то степени и является. Остается только признать свое поражение...
|
|
|
|
|
Apr 10 2012, 08:57
|
Знающий
   
Группа: Свой
Сообщений: 552
Регистрация: 29-02-08
Пользователь №: 35 481

|
Цитата(_Ivana @ Apr 9 2012, 18:43)  В данный момент размышления следующие. Фарроу (Лагранж 3-го порядка) - это имхо по сути (хотя многие могут со мной не согласиться) тот же кубический сплайн. Локальный, определяемый для 4-х точек, но действующий только на средний интервал из 3-х. Точно так же, как и сплайны Эрмита, например. Тот факт, что Лагранж при построении проходит через все 4 точки, не дает значения интерполирующей функции в левом и правом интервалах, поскольку при интерполяции собственно самих этих боковых интервалов (когда они являются центральными) полином проходит совершенно не так, как проходит в случае если интервал является правым или левым относительно центрального. Значит нельзя считать условие прохождение полинома через крайние точки самым оптимальным с точки зрения построения сплайна. Я придумал (а Катмулл и Ром до меня) другие условия: сплайн проходит через 2 точки и имеет определенные производные в них же, так чтобы полученная функция имела непрерывную первую производную. Сначала я придумал считать значение этой производной, как тангенс угла-биссектрисы исходных двух (словами трудно объяснить, надо на графике показывать). Только что проверил этот вариант - при малых дискретизациях ошибка выше Катмулла-Рома, при увеличении начиная где-то с 12 точек почти полностью сливается с Катмуллом-Ромом (график ниже). Но само значение производной рассчитывается через тангенсы-арктангенсы и достаточно сложно. Это и была моя вторая идея, которую я проверил только что. А потом я придумал считать производную как тангенс наклона соседних точек - собственно то, что потом узнал как Катмулла-Рома. Изобретатель вы наш. Об этом уже много лет в институтах на лекциях рассказывают. Вы попробуйте сделать то, что я вам предложил.
|
|
|
|
|
Apr 10 2012, 09:57
|
Местный
  
Группа: Свой
Сообщений: 352
Регистрация: 13-08-11
Из: Воронеж
Пользователь №: 66 710

|
Цитата(Михаил_K @ Apr 10 2012, 12:57)  Изобретатель вы наш. Об этом уже много лет в институтах на лекциях рассказывают. Вы попробуйте сделать то, что я вам предложил. Одно дело на лекциях, а другое пощупать и убедиться самому. И я сделал все из того что вы предложили - и алгоритмы свои (все варианты) рассказал, и спектр синуса 0.49 от частоты дискретизации ресемпленный в несколько раз выложил. А больше вы вроде ничего не предлагали. Цитата(thermit @ Apr 10 2012, 13:41)  Есть готовы формулы, по которым можно посчитать детерминированную погрешность интерполяции (в том числе с кратными узлами) и не париться со всякими сомнительными экспериментами... А избыток энергии направить в какое-нить мирное русло. А мне мои эксперименты понравились и не кажутся такими сомнительными  И продолжая тему конструктивизма - вы знаете какое-нибудь другое мирное русло, в которое я мог бы направить свой избыток энергии, и которое было бы не менее интересно и увлекательно?  Хотя, у меня тоже есть идеи насчет других русел.
|
|
|
|
|
Apr 10 2012, 12:05
|
Местный
  
Группа: Свой
Сообщений: 352
Регистрация: 13-08-11
Из: Воронеж
Пользователь №: 66 710

|
Цитата(ViKo @ Apr 10 2012, 14:34)  Предлагаю. Синус с частотой 1kHz оцифруйте с частотой 5kHz. А потом интерполируйте до частоты дискретизации 50kHz. И покажите спектр с полосе 0-25kHz. Сделаю. Вечером, как дома буду. По Катмуллу-Рому. Хотя могу для сравнения ещё по Фарроу, Лагранжу 4 порядка, линейному... Цитата(Михаил_K @ Apr 10 2012, 15:36)  А где? Че-то не увидел На предыдущей странице в последнем посте средний график. С вполне предсказуемым результатом, как и для любого другого локального метода интерполяции по 4 точкам - хоть того же Фарроу.
|
|
|
|
|
Apr 10 2012, 13:59
|
Участник

Группа: Участник
Сообщений: 46
Регистрация: 2-12-10
Из: Воронеж
Пользователь №: 61 357

|
Цитата(Михаил_K @ Apr 10 2012, 16:44)  Понятно. Просто там такой ужОс изображен, что я сразу и не понял. Я так понимаю что наш синус - это пик в районе 4 кГц, и рядышком же стоит его алиас, практически того же уровня... Этот "ужОс" вполне предсказуем, т.к. при таком соотношении исходных частот сигнала и дискретизации ни одна полиномиальная интерполяция не даст нормального результата. Лично по моим наблюдениям для хоть какого-то приемлемого результата при полиномиальной интерполяции максимальная частота исходного сигнала не должна быть больше 1/4 частоты семплирования. А лучше 1/8. Именно поэтому прежде чем применять алгоритмы полиномиальной интерполяции (в частности Лагранж 3-й степени с оптимизацией расчета по Фарроу) рекомендуют апсемплинг в 2, 4 и т.д. раз. Если Вы знаете вариант полиномиальной интерполяции, который хорошо справляется с сигналами 0,48 частоты дискретизации, то расскажите, я буду весьма признателен. Заранее спасибо. С уважением, Александр.
|
|
|
|
|
Apr 10 2012, 15:57
|
Местный
  
Группа: Свой
Сообщений: 352
Регистрация: 13-08-11
Из: Воронеж
Пользователь №: 66 710

|
Цитата(ViKo @ Apr 10 2012, 14:34)  Предлагаю. Синус с частотой 1kHz оцифруйте с частотой 5kHz. А потом интерполируйте до частоты дискретизации 50kHz. И покажите спектр с полосе 0-25kHz. Первый - Катмулл-Ром, второй - Фарроу
Эскизы прикрепленных изображений
|
|
|
|
|
Apr 10 2012, 17:12
|
Местный
  
Группа: Свой
Сообщений: 352
Регистрация: 13-08-11
Из: Воронеж
Пользователь №: 66 710

|
По порядку - спектр исходного сигнала, после линейной интерполяции (  ) и Лагранж 4-го порядка.
Эскизы прикрепленных изображений
|
|
|
|
|
Apr 10 2012, 18:10
|

Универсальный солдатик
     
Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362

|
Цитата(_Ivana @ Apr 10 2012, 21:01)  Количество точек FFT = 16384. А на другие вопросы или ответил, или они риторические. Впрочем, могу прислать вам вавки - сами проанализируете. Тогда, если интерес у Вас не пропал, попробуйте интерполировать цифровыми фильтрами. Например, каскадным интегратором-гребенчатым фильтром, CIC. Похоже, интерполяция полиномами не даст качественного звука. Та же ссылка, что уже давал, а от нее - дальше... http://ru.wikipedia.org/wiki/%D0%9F%D0%B5%...%86%D0%B8%D1%8FНу, и сами синусоиды покажите, что ли? По паре периодов. Может, на глаз что-то неправильное попадется? А если разрядность увеличить? А если там ограничение возникает?
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|