Перейти к содержанию
    

Придумал алгоритм интерполяции. Протестируем результаты?

Спасибо, скачал, поставил. Сгенерировать ключ не удалось, использую 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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А ресемплить сигналы со сложным спектром, меняющимся во времени. Еще, близким к частоте Найквиста. Если алгоритм позволяет это.

Например какие? ГолдВэвйв много разных может генерить, СпектраПлюс поменьше вариантов, но тоже есть кое-что. Есть синус умноженный на экспоненту и много чего ещё диковинного, плюс самому можно формулы написать :)

 

Частотная модуляция . 500+-Гц. Ресемплинг тот же - с 44100 до 44600.

Мой THD = 0.00091, IMD = 0.6729, слева

Фарроу THD = 0.00112, IMD = 0.6729, справа

post-66710-1333829116_thumb.jpg

post-66710-1333829125_thumb.jpg

Изменено пользователем _Ivana

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

_Ivana:

Термит, если нечего сказать конструктивно (кроме очевидной методики проверки отклонения от целевого сигнала). то можно просто не писать в этот топик?

 

С начала этого топика кроме меня только 1 (один) человек ответил вам конструктивно. Пальцем тыкать не хочу.

Это что касается конструктивизма в частности.

 

Что касается конструктивизма вообще:

1 Да. Я хочу увидеть не непонятные картинки, а пиковую ошибку интерполяции гармонического сигнала в зависимости от частоты при частоте дискретизации = 1. Все остальное не несет никакой полезной информации.

 

2 Хотелось бы понять принципиальную новизну вашего метода. Ведь полиномиальная интерполяция - самая простая. Все другие способы (дробно-рациональная, тригонометрическая и т д) существенно сложнее.

 

в этой связи

 

3 Обнародуйте свой алгоритм. едва-ли этим вы уроните кого-либо под стол.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Например какие? ГолдВэвйв много разных может генерить, СпектраПлюс поменьше вариантов, но тоже есть кое-что. Есть синус умноженный на экспоненту и много чего ещё диковинного, плюс самому можно формулы написать :)

 

Частотная модуляция . 500+-Гц. Ресемплинг тот же - с 44100 до 44600.

Мой THD = 0.00091, IMD = 0.6729, слева

Фарроу THD = 0.00112, IMD = 0.6729, справа

Я предложил (по методике тестирования) для визуальной оценки смотреть спектрограммы в хорошем разрешении. Поиграться при этом размером FFT для нахождения лучшего разрешения по частоте и по времени. Это даст не усредненный замазанный результат, а более пиковый, как сказал thermit. Из сигналов можно взять ЛЧМ (chirp) от нулевой частоты до fs/2. Еще, сумму нескольких синусов в верху диапазона с разными фазами. И вообще, искать именно тот сигнал, который плохо интерполируется. В этом случае вопросов и не будет. Ищите неисправности в алгоритме и, если не находите, все хорошо. И смотреть в динамике, то есть спектрограммой. Это для качественной оценки одним взглядом. Более интересные места смотреть подробнее во временной и в частотной области.

Изменено пользователем sup-sup

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Хорошо. Термит прав, надо отойти от цифровых применений и просто чисто математически проинтерполировать синус с разной частотой, при этом посчитать максимальный модуль отклонения от чистого синуса на интервале и средний модуль отклонения на нем же. Я и сам думал так сделать. Жаль в 1С нет функции синуса, придется как-то выкручиваться. Но я сделаю это, для нескольких частот точно. И сравню с Фарроу. И выложу сюда. Как найду где взять точный чистый синус любого аргумента, простите за банальные трудности :)

 

ЗЫ а насчет гениев и инженеров у меня своя версия - мало и тех и других. Критикофф с претензиями зато дофига :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Да, вопрос от меня, как от критика с претензиями вам как к гению : При чем тут 1с?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Например, для первого поста потребовалась псевдографика с хитрыми непечатными символами а-ля пробел, ибо пробелы с краев отрезаются. В 1С я это сделал за минуту.

 

ЗЫ я понимаю что критики с претензиями предпочитают наверное матлаб или маткад, и я с ними согласен, но его надо ещё найти, поставить и освоить.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

_Ivana:

ЗЫ я понимаю что критики с претензиями предпочитают наверное матлаб или маткад, и я с ними согласен, но его надо ещё найти, поставить и освоить.

 

 

Угу. Предпочитают. Дык для гениев еще ексель есть... Там даже синус имеецца. Не говоря уж про тангенсы всякие...

 

Для гениев чуть меньшего размера осмелюсь порекомендовать это изделие www.jsoftware.com (v6.x).

Изменено пользователем thermit

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

За рекомендации всегда спасибо. Но от специалистов они всегда ценнее и эффективнее. Я уже нашел интегрируемый в 1С вариант:

// синус
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

Вроде работает, график на глаз гладкий. Буду пробовать с этой функцией.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Например, для первого поста потребовалась псевдографика с хитрыми непечатными символами а-ля пробел, ибо пробелы с краев отрезаются. В 1С я это сделал за минуту.

 

ЗЫ я понимаю что критики с претензиями предпочитают наверное матлаб или маткад, и я с ними согласен, но его надо ещё найти, поставить и освоить.

Интересно, попробовать вести бухгалтерию в Матлабе... Что-то в этом есть...

Насчет интерполяции - как тут уже отмечали, интерполяция - это нахождение непрерывной функции, желательно выраженной с помощью простых действий - умножения, деления, сложения вычитания, может быть еще извлечения корня, проходящей через заданные точки. Имея такую функцию, мы можем найти ее значения, а, следовательно, значения входного сигнала в промежуточных точках. Насколько значение функции будет соответствовать входному сигналу? Неизвестно. Теоретически возможно, что входной сигнал между отсчетами улетает до небес. Поэтому мы должны сделать предположение, что сигнал - физическая величина, следовательно обладает конечной энергией и конечным - и весьма нешироким, спектром. Иначе неуместно говорить об интерполяции сигнала, а надо говорить об математической абстракции - провести кривую через столько-то точек. Удобным методом интерполяции является полиномиальная интерполяция - нахождение полинома степени N-1, выражающего функцию, проходящую через N точек. Лагранж предложил метод нахождения таких полиномов, а Фарроу - способ построения интерполятора оптимально использующего вычислительные мощности. Но по сути - это полиномиальная интерполяция, дающая одинаковый результат независимо от способа вычисления полинома, так как такой полином существует один. Такая интерполяция хорошо подходит, в частности, к музыке, так как музыкальный сигнал - это некий набор гармонических составляющих - синусоид, параметры которых меняются относительно медленно. Эти синусоиды можно разложить в ряд Тейлора, сложить разложения, и получим, как раз, многочлен, причем невысокой степени.

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

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я думаю, что максимально верной интерполяцией нужно считать интерполяцию синусную, когда для каждой существующей выборки создают функцию sin(x)/x, с вершиной в этой выборке (а для остальных выборок эта функция будет в нуле), и затем складывают все эти функции. Дальше по полученной кривой вычисляют значения в любых других точках. Но это слишком сложный алгоритм.

 

Между выборками сигнал не должен меняться, как угодно, иначе частота дискретизации не будет удовлетворять теореме Котельникова.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я думаю, что максимально верной интерполяцией нужно считать

любую.

Даже аппроксимацию при бесконечном числе точек нельзя выбрать. Пока не выбран критерий близости функций.

Вот попробуйте - (0, 0), (1, 1), (100, 0), (101, -1). Можете продлить...

И.... главное - докажите, что Ваша интерполяция "максимально верная".

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вот попробуйте - (0, 0), (1, 1), (100, 0), (101, -1). Можете продлить...

И.... главное - докажите, что Ваша интерполяция "максимально верная".

Имею в виду равномерную дискретизацию. Доказательство элементарное. Идеальный ФНЧ имеет именно такую импульсную характеристику.

 

А вот, собственно, доказательство. Первая же формула.

http://ru.wikipedia.org/wiki/%D0%9F%D0%B5%...%86%D0%B8%D1%8F

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А вот, собственно, доказательство. Первая же формула.

Какое это доказательство? И чего? Ведь мы имеем некоторую функцию, заданную отсчетами в некоторых точках.

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

А почему Вы ограничиваете себя функцией заданной в точках, лежащих на равных расстояниях?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Пока желающие общаются на сопутствующие темы, а я пытаюсь получить графики отклонений, для затравки 2 картинки сравнения методов. Красный - синус, желтый - отсчеты, зеленый - мой, синий - Фарроу:

post-66710-1333879451_thumb.jpg

post-66710-1333879467_thumb.jpg

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...