Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Интерполировать синус по 5 точкам на период
Форум разработчиков электроники ELECTRONIX.ru > Цифровая обработка сигналов - ЦОС (DSP) > Алгоритмы ЦОС (DSP)
ViKo
Вопрос, скорее, для обсуждения разных вариантов. Лучшим по точности будет, очевидно, восстановление sinc функциями. Но как это сделать в реальности, микроконтроллером, а не в MATLAB? Кубическая интерполяция будет сильно ломать сигнал. Может, как-то полином 5 степени использовать? 7-й? А нет ли способа чисто синус найти подходящий? Какие еще есть способы?
И еще, если взять 10 точек на период, что здесь можно применить? Задачка выглядит намного более легкой. Значит, и способ найдется попроще.
Критерий "похожести", наверное - задать величину среднеквадратического отклонения интерполированного сигнала от оригинала. Не знаю, какое конкретное значение выбрать. Нужно, чтобы было "похоже" визуально. laughing.gif
Maverick
Цитата(ViKo @ Oct 19 2016, 13:23) *
Вопрос, скорее, для обсуждения разных вариантов. Лучшим по точности будет, очевидно, восстановление sinc функциями. Но как это сделать в реальности, микроконтроллером, а не в MATLAB? Кубическая интерполяция будет сильно ломать сигнал. Может, как-то полином 5 степени использовать? 7-й? А нет ли способа чисто синус найти подходящий? Какие еще есть способы?
И еще, если взять 10 точек на период, что здесь можно применить? Задачка выглядит намного более легкой. Значит, и способ найдется попроще.
Критерий "похожести", наверное - задать величину среднеквадратического отклонения интерполированного сигнала от оригинала. Не знаю, какое конкретное значение выбрать. Нужно, чтобы было "похоже" визуально. laughing.gif

попробуйте это
там бесплатно дается возможность пользоваться про версией после регистрации...

PS Мне помогло...
AlexandrY
Цитата(ViKo @ Oct 19 2016, 13:23) *
Нужно, чтобы было "похоже" визуально. laughing.gif


Да отфильтовать просто надо.
ViKo
Цитата(AlexandrY @ Oct 19 2016, 13:38) *
Да отфильтовать просто надо.

... цифровым НЧ фильтром, в идеале с бесконечной крутизной перехода между пропусканием и подавлением. А иначе полезут те же артефакты.

Цитата(Maverick @ Oct 19 2016, 13:37) *

Спасибо! Пользуюсь MATLAB-ом, он на все способен. В нем буду прикидывать. Вернее, кое-что уже имею, нужно вспомнить, посмотреть.
То есть, инструмент имеется. Нужны конкретные алгоритмы.
Ivan55
Может это поможет? по сути выполняет функции ФНЧ тока без операций умножения
Maverick
Цитата(ViKo @ Oct 19 2016, 14:12) *
... цифровым НЧ фильтром, в идеале с бесконечной крутизной перехода между пропусканием и подавлением. А иначе полезут те же артефакты.


Спасибо! Пользуюсь MATLAB-ом, он на все способен. В нем буду прикидывать. Вернее, кое-что уже имею, нужно вспомнить, посмотреть.
То есть, инструмент имеется. Нужны конкретные алгоритмы.

В отличии от матлаба по ссылке выводит формулу (линейную, квадратичную и кажется полиномиальную)
сразу. Показывая графики...
Tpeck
Цитата(ViKo @ Oct 19 2016, 13:23) *
Нужно, чтобы было "похоже" визуально. laughing.gif


Какой-то не инженерный критерий.... sm.gif
Уж очень субъективный. См. прикрепленный файл.
Ведь похож? sm.gif
_pv
фит полинома пятой степени по шести точкам выглядит очень похоже на синус.
и считается довольно просто, по сравнению со сплайнами не надо по всем данным от начала до конца бегать чтобы производным граничные условия задать.

просто для каждого отрезка делать полином 5 степени от +-3 точек влево/вправо.

а еще можно наверное усреднять все 5 полиномов которые содержат данный отрезок между двумя точками, возможно будет ещё красивее, а может и нет.
ViKo
Цитата(Tpeck @ Oct 19 2016, 14:39) *
Какой-то не инженерный критерий.... sm.gif
Уж очень субъективный. См. прикрепленный файл.
Ведь похож? sm.gif

Нет, не похож. И кубически интерполированный тоже не похож. Вот когда синус из двух парабол склеивали, было похоже.
Я критерий указал. Величина ошибки. Но ведь она, наверное, будет зависеть от того, как точки упали на синус?

Цитата(_pv @ Oct 19 2016, 14:46) *
фит полинома пятой степени по шести точкам выглядит очень похоже на синус.
и считается довольно просто, по сравнению со сплайнами не надо по всем данным от начала до конца бегать чтобы производным граничные условия задать.
просто для каждого отрезка делать полином 5 степени от +-3 точек влево/вправо.

Вот, так должно подойти. "Фит" - это что? Может, есть ссылки на расчеты такой интерполяции?
AlexandrY
Цитата(ViKo @ Oct 19 2016, 15:01) *
Нет, не похож. И кубически интерполированный тоже не похож. Вот когда синус из двух парабол склеивали, было похоже.
Я критерий указал. Величина ошибки. Но ведь она, наверное, будет зависеть от того, как точки упали на синус?


Тогда методом Ньютона.
Я бы тут лучше задался вопросом каким способом считать оценку несовпадения.
TSerg
Пойдем с конца.
Если известен период, то симулировать синус с желаемой погрешностью визуализации.
_pv
Цитата(ViKo @ Oct 19 2016, 19:07) *
Вот, так должно подойти. "Фит" - это что? Может, есть ссылки на расчеты такой интерполяции?

в общем случае, когда точек больше чем степень полинома - наименьшие квадраты:
http://mathworld.wolfram.com/LeastSquaresF...Polynomial.html

ну а вообще просто система из N уравнений для нахождения коэффициентов:
y(x1) = y1;
y(x2) = y2;
...
y(xn) = yn;


y(x) = a0 + a1*x +... an*x^n;
ViKo
Цитата(TSerg @ Oct 19 2016, 15:19) *
Пойдем с конца.
Если известен период, то симулировать синус с желаемой погрешностью визуализации.

Нет, период не известен. Даже, что синус, тоже притянуто за уши. Просто в документации будет записано "полоса частот такая-то". Если для максимальной частоты у меня выходит 5 выборок АЦП на период, желаю продемонстрировать, что наблюдается "синус".

Цитата(_pv @ Oct 19 2016, 15:19) *
в общем случае, когда точек больше чем степень полинома - наименьшие квадраты:
http://mathworld.wolfram.com/LeastSquaresF...Polynomial.html

Опять Wolfram. Что это за зверь такой?
Цитата
ну а вообще просто система из N уравнений для нахождения коэффициентов:

Этот путь понятен. Ходил. У меня есть свой матлабовский файл с полиномами разных степеней. Стряхну пыль, посимулирую.
А другие варианты есть?
TSerg
Тогда задача меняется:
Имеется сигнал с максимальной полосой Fmax. С частотой дискретизации Fs делаются выборки на протяжении не менее периода (или сколько?), причем на максимальной частоте это будет 5 выборок.
Далее необходимо выполнить визуализацию сигнала с обеспечение гладкости воспроизведения.
Желательно определиться с числом точек для визуализации.

Вот тут начинается самое интересное - если на максимальной частоте визуализированный сигнал д.б. похож на синус, то на что он должен быть поход на частоте Fmax/2?

P.S.
Я делал "гладкость" простым способом, как раньше по лекалу делали. Соединяем три точки, проводим только через две.
Как правило достаточно параболы + простой фильтр. Но это не для 5 точек на период, конечно.
ViKo
Выборок - куча.
Для Fmax/2, понятно, будет 10 выборок на период.
Здесь так же будет, через 3-ю и 4-ю точки из 1 - 6 проводим кривую 5-й степени.
_pv
Цитата(ViKo @ Oct 19 2016, 19:33) *
Опять Wolfram. Что это за зверь такой?

Mathematica. В закромах лежит, попробуйте, имхо куда лучше матлаба.
Нажмите для просмотра прикрепленного файла

Цитата(ViKo @ Oct 19 2016, 19:33) *
Этот путь понятен. Ходил. У меня есть свой матлабовский файл с полиномами разных степеней. Стряхну пыль, посимулирую.А другие варианты есть?

ну брать те же несколько соседних точек и теми же наименьшими квадратами, но уже правда нелинейными, натягивать на них синус, а не полином.
TSerg
Сшивание синусоиды параболой по 6-ти точкам ( 5 точек уже явно неудовлетворительно ):
http://shot.qip.ru/00gZ9L-1OPovQH3t/

По 9-ми точкам вполне удовлетворительно, с т.з. визуализации:
http://shot.qip.ru/00gZ9L-5OPovQH3v/

P.S.
Еще косинусная интерполяция:

float CosInterpolate(float v1, float v2, float a)
{
float angle = a * PI;
float prc = (1.0f - cos(angle)) * 0.5f;
return v1*(1.0f - prc) + v2*prc;
}
serjj
Цитата
Нет, период не известен. Даже, что синус, тоже притянуто за уши. Просто в документации будет записано "полоса частот такая-то". Если для максимальной частоты у меня выходит 5 выборок АЦП на период, желаю продемонстрировать, что наблюдается "синус".


Для демонстрации "синуса" нужно ИМХО смотреть на спектр сигнала и на количество и соотношение гармоник: какие, сколько, каково соотношение между ними и т.д. Из наблюдения за колебанием во временной области ничего разумного заключить нельзя. Поэтому, сделать Фурье, для максимальной частоты будет хорошо наблюдаемая гармоника в районе fs/5, что и требуется показать.
TSerg
Цитата(serjj @ Oct 20 2016, 16:56) *
для максимальной частоты будет хорошо наблюдаемая гармоника в районе fs/5, что и требуется показать.

Так я и предложил эмуляцию на крайних частотах cranky.gif

P.S.
Т.е. должны быть два режима: измерительный (в диапазоне нормальных частот), когда все по честному и тестово-демонстрационный, в диапазоне крайних частот, когда делается симуляция по 1..3 крайним тестовым частотам, значения которых оговорены в ПМ.

P.P.S.
И это не обман Заказчика, поскольку мы, на основе реальных измерений, алгоритмически выявляем крайние частоты и показываем их наличие в удобной и понятной для всех визуальной форме.
serjj
Удобная и понятная для всех визуальная форма - это спектр.
TSerg
Цитата(serjj @ Oct 20 2016, 19:12) *
Удобная и понятная для всех визуальная форма - это спектр.

Да, но у ТС похоже что-то вроде генератора частот с визуализацией сигнала во временной области.
Мы не знаем всех ньюансов ТЗ, а потому и гадать не будем.
jorikdima
Нелинейное вписывание. Он же фит. Почему нужно полином-5 вписывать? Почему синус не вписать? Вычислительно сложно?
ViKo
В свое время вот эту статью нашел (здесь в форуме и автор был, и ссылку на эту статью я давал). Также несколько других, представляющих интерес. По этим статьям в MATLAB экспериментировал. Сейчас пересмотрел. Вижу, что интерполяция сплайном Эрмита по 6 точкам, как в статье, дает примерно такой же результат, как интерполяция полиномом 5 степени. Но проще.
TSerg, гадание, зачем это нужно, не понадобится, если заглянуть в мой профиль. rolleyes.gif
TSerg
Цитата(ViKo @ Oct 20 2016, 20:38) *
гадание, зачем это нужно, не понадобится, если заглянуть в мой профиль

Дефки? Голые?

Цитата(ViKo @ Oct 20 2016, 20:38) *
Вижу, что интерполяция сплайном Эрмита по 6 точкам

Косинусом проще и не хуже.
petrov
Передискретизация у вас довольно большая, поэтому никакой бесконечной крутизны и длинного ФНЧ не требуется, увеличиваем частоту дискретизации ещё в два раза добавлением нулей, давим праразитный спектральный образ полуполосным ФНЧ, отсюда экономия вычислений на полифазной реализации и нулевых коэффициентах полуполосного фильтра, затем простым дробным параболическим интерполятором Фарроу любые точки вычисляем.
ViKo
Частота выборок в 5 раз больше частоты сигнала - это большая передискретизация?
Мне не нужно в реальном времени фильтровать. Поэтому все эти полифазные фильтры, хитроумные перетрахивания операторов (Фарроу) не нужны. Нужны формулы, а как их использовать, найдем способ.

Цитата(TSerg @ Oct 20 2016, 21:09) *
Косинусом проще и не хуже.

Вычислить косинус посложнее полинома 7 степени будет. С чего вдруг стало проще?
serjj
Если реальное время не является критичным, можно использовать DFT интерполяцию. Пример:
Нажмите для просмотра прикрепленного файла

Здесь разумеется проявляются краевые эффекты, поэтому выводить лучше значения в интервале [N_guard...N_dft-N_guard]. Ну это уже детали реализации.
petrov
Цитата(ViKo @ Oct 21 2016, 05:38) *
Частота выборок в 5 раз больше частоты сигнала - это большая передискретизация?


Да. Фильтр простой будет, скажем 5 умножений на константы на входной частоте дискретизации, зависит от требований к подавлению.

Цитата(ViKo @ Oct 21 2016, 05:38) *
Мне не нужно в реальном времени фильтровать. Поэтому все эти полифазные фильтры, хитроумные перетрахивания операторов (Фарроу) не нужны. Нужны формулы, а как их использовать, найдем способ.


Не имеет значения, в реальном, не в реальном, зачем лишние вычисления, параболический Фарроу - простой способ любой отсчёт вычислить промежуточный, но требует побольше чем 5 отсчётов на период, увеличиваем в два раза до 10, половина отсчётов остаётся исходная, нужно вычислить только вторую половину между исходными отсчётами, а это всего лишь ФНЧ симметричный с чётным количеством коэффициентов, который даёт задержку в пол такта исходной частоты дискретизации, единственное требование к которому - АЧХ константная вплоть до вашей крайней частоты.
ViKo
Так а почему сразу по 10 выборкам не интерполировать, если этот Фарроу требует больше 5 выборок? И почему он столько требует?
А, понял. Ломать сильно будет. Ну так на одном Фарроу теория не остановилась.
Параболический - кубическая парабола, естественно?
То есть, поскольку кубическим полиномом интерполяция не блещет качеством, вы предлагаете интерполировать в 2 этапа. Что же не полиномом 5-й степени?
petrov
Цитата(ViKo @ Oct 21 2016, 14:53) *
Так а почему сразу по 10 выборкам не интерполировать...


Вы 5 на период задали в исходной постановке.

Цитата(ViKo @ Oct 21 2016, 14:53) *
И почему он столько требует?


Потому что простой, чем меньше передискретизация тем сложнее интерполятор для вычисления произвольной точки между исходными отсчётами.
ViKo
Цитата(serjj @ Oct 21 2016, 11:32) *
Если реальное время не является критичным, можно использовать DFT интерполяцию. Пример:
Нажмите для просмотра прикрепленного файла

Здесь разумеется проявляются краевые эффекты, поэтому выводить лучше значения в интервале [N_guard...N_dft-N_guard]. Ну это уже детали реализации.

Спасибо. Посмотрел, что работает. Синус восстанавливает прилично. Но этот алгоритм не соответствует требованию "просто".
А на края окно можно наложить, наверное.
Время не реальное (250 МВыб/с), но и не бесконечное. Возможно, и так получится. Нужно смотреть, во сколько уложится.
А как будет интерполироваться этим алгоритмом перепад?
petrov
Цитата(ViKo @ Oct 21 2016, 14:53) *
То есть, поскольку кубическим полиномом интерполяция не блещет качеством, вы предлагаете интерполировать в 2 этапа. Что же не полиномом 5-й степени?


Думаю полиномом 5-й степени больше вычислений, впрочем это от архитектуры вычислительного устройства зависит, вам виднее, я со своей FPGAшной колокольни смотрю.
ViKo
Цитата(petrov @ Oct 21 2016, 15:01) *
Вы 5 на период задали в исходной постановке.

Так то на период. Выборок - куча. Можно хоть по 10-ти интерполировать. Шучу.

Цитата(petrov @ Oct 21 2016, 15:06) *
Думаю полиномом 5-й степени больше вычислений, впрочем это от архитектуры вычислительного устройства зависит, вам виднее, я со своей FPGAшной колокольни смотрю.

Понятно. Я микроконтроллером буду интерполировать. rolleyes.gif
petrov
Цитата(ViKo @ Oct 21 2016, 15:12) *
Так то на период. Выборок - куча. Можно хоть по 10-ти интерполировать.


Я так понял, что в вашем сигнале нет частот выше, чтоб на период меньше 5 отсчётов приходилось, выборок в фильтре и будет куча использоваться, больше 5.
Den64
Такое предлагали? Пользовался, мне понравилось. Буржуи делают для людей, очень просто и удобно.
ViKo
Цитата(Den64 @ Oct 21 2016, 15:27) *
Такое предлагали? Пользовался, мне понравилось. Буржуи делают для людей, очень просто и удобно.

Вещь хорошая. Но не по теме.

Цитата(petrov @ Oct 21 2016, 15:18) *
Я так понял, что в вашем сигнале нет частот выше, чтоб на период меньше 5 отсчётов приходилось, выборок в фильтре и будет куча использоваться, больше 5.

Имеется в виду одновременно, для вычисления одного интервала интерполяции.
Будем считать, что выше частот нет. А если есть, интерполируем, что получим.
serjj
Цитата(ViKo @ Oct 21 2016, 15:05) *
Спасибо. Посмотрел, что работает. Синус восстанавливает прилично. Но этот алгоритм не соответствует требованию "просто".
А на края окно можно наложить, наверное.
Время не реальное (250 МВыб/с), но и не бесконечное. Возможно, и так получится. Нужно смотреть, во сколько уложится.
А как будет интерполироваться этим алгоритмом перепад?


Перепад чего смотря. Если амплитуды, то прекрасно, это легко проверить в том же скрипте rolleyes.gif Как и любой другой перепад.

А по сложности. Если у вас 250Msps, и вы хотите визуализировать сигнал на передискретезации, например, х10, то, наверное, это будет не потоковая визуализация, т.к. 2.5Gsps, допустим хотя бы байт на сэмпл = 20Gbps - согласитесь как-то многовато. Значит, скорее это будет какая-то произвольная выборка из данных АЦП, которая будет интерполироваться в N раз (в 10, например), выводиться на экран, далее берётся другая выборка и так по кругу. Правильно я понимаю?

Тогда предложенное решение несложное, т.к. требует использования непотокового БПФ/ОБПФ, которое реализуется "малой кровью" как в аппаратуре так и на компьютере.

ЗЫ: по поводу краёв, окно будет нужно, если вы хотите строить спектр этого сигнала. Для корректной визуализации проще выбрать только те значения, которые подходят. Например, с помощью ОБПФ было получено 8192 точки. Можно вывести на экран 8000 точек, выкинув первые и последние 96.

ЗЗЫ: по поводу "приличности восстановления синуса". Метод, основанный на БПФ-ОБПФ - лучший линейный метод, т.к. он использует все доступные точки исходного сигнала для получения промежуточных значений. В этом плане он будет оптимальнее любого фильтра, т.к. фильтр будет просто напросто короче. С другой стороны нелинейные методы могут дать схожий результат по значительно меньшему количеству точек. Но тут вы рискуете получить всевозможные артефакты, как то: ложные экстремумы между точками, биения - это нелинейные искажения, которые присущи данным методам.
ViKo
Цитата(serjj @ Oct 21 2016, 16:43) *
Значит, скорее это будет какая-то произвольная выборка из данных АЦП, которая будет интерполироваться в N раз (в 10, например), выводиться на экран, далее берётся другая выборка и так по кругу. Правильно я понимаю?
Тогда предложенное решение несложное, т.к. требует использования непотокового БПФ/ОБПФ, которое реализуется "малой кровью" как в аппаратуре так и на компьютере.
ЗЫ: по поводу краёв, окно будет нужно, если вы хотите строить спектр этого сигнала. Для корректной визуализации проще выбрать только те значения, которые подходят. Например, с помощью ОБПФ было получено 8192 точки. Можно вывести на экран 8000 точек, выкинув первые и последние 96.

Правильно. Не только в 10 раз. В много больше. Не по кругу, а от начала до конца. Фрагмент.
Выбрасывать выборки не хочу. Интерполирую, дополнив края чем-нибудь.
Метод БПФ-ОБПФ восстанавливает синус той же амплитуды. Это радует. А полиномиальные ломают, до амплитудных значений не дотягивают. Я так вижу в МАТЛАБе.
TSerg
Цитата(ViKo @ Oct 21 2016, 05:38) *
Вычислить косинус посложнее полинома 7 степени будет. С чего вдруг стало проще?

Потому, что, "как известно", удовлетворительной считается аппроксимация кривых для целей визуализации с СКП не более 3%.
Посчитать косинус с такой погрешностью это точно менее затратно, чем полином 7 степени.
dimka76
А чем интерполяция sin(x)/x не подходит ?
Наглядные примеры разных методов для разных сигналов.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.