Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: есть ли методы дизеринга (dithering) для линейной интерполяции при повышении тактовой частоты (upsampling)
Форум разработчиков электроники ELECTRONIX.ru > Цифровая обработка сигналов - ЦОС (DSP) > Алгоритмы ЦОС (DSP)
Страницы: 1, 2
Krys
Ну раз уж фильтр ставить, то зачем же ещё шумов добавлять ))) Тогда уж не нужны ни шумы, ни линейная интерполяция
ViKo
Цитата(Krys @ Apr 17 2015, 12:19) *
Ну раз уж фильтр ставить, то зачем же ещё шумов добавлять ))) Тогда уж не нужны ни шумы, ни линейная интерполяция

Хотелось бы сравнить, что выдаст более чистый сигнал: сначала сделать линейную интерполяцию, а потом пропустить ее через фильтр, или дополнить нулями и пропустить через фильтр. Мне представлялось, что первый способ лучше. Но после ваших картин уже не знаю.
Аналогично посмотреть с шумом и без. Вы же имеете инструмент. Или выдайте свои скрипты.
Krys
Цитата(ViKo @ Apr 17 2015, 16:28) *
Мне представлялось, что первый способ лучше
Ну по идее должно быть лучше, так что буду иметь в виду и такой способ.


Цитата(ViKo @ Apr 17 2015, 16:28) *
Или выдайте свои скрипты.
Не проблема, в прикреплении. А то действительно щас особо некогда всё подряд пробовать, извиняюсь. Если у Вас есть интерес, желание и время, то спасибо за участие.
petrov
Цитата(Krys @ Apr 17 2015, 05:54) *
petrov, Фарроу не годится в любом случае по ресурсам - сложнее он не раза в 2. Учитывая, что в линейной интерполяции нет умножителей вообще, а в Фарроу их 3 только на полином, да плюс ещё на коэффициенты.


В параболическом 2 полных умножителя, если вы увеличиваете частоту дискретизации в 2^n, то они точно так же упрощаются как и в линейном, коэффициенты тоже оч простые +-0.5 и сложения, это очень простая штука. Если подавления всё же не будет хватать, можно перед Фарроу ещё в 2 раза частоту увеличить полуполосным полифазным фильтром на распределённой арифметике, тоже очень простым.
Krys
Дайте пожалуйста ссылки на описанный Вами простой способ параболической интерполяции с простыми коэффициентами. И что-нибудь про оптимизированные half-band фильтры, которые на распределённой арифметике можно сделать. Заранее спасибо.
petrov
Цитата(Krys @ Apr 17 2015, 13:00) *
Дайте пожалуйста ссылки на описанный Вами простой способ параболической интерполяции с простыми коэффициентами. И что-нибудь про оптимизированные half-band фильтры, которые на распределённой арифметике можно сделать. Заранее спасибо.


Нажмите для просмотра прикрепленного файла

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

Про распределённую арифметику можно легко у альтеры-зайлинкса доки найти.
blackfin
Цитата(ViKo @ Apr 16 2015, 13:42) *
А на 10 поделить, не подскажете, где почитать? sm.gif А на 11? 12?

На 10 и на 12 подскажу.. На всякий случай... sm.gif

A/3 = A/(4-1) = (A/4)*[1/(1-1/4)] = (A/4)*[1+1/41+1/42+1/43+...] = (A>>2)+(A>>4)+(A>>6)+(A>>8)+...

A/5 = A/(4+1) = (A/4)*[1/(1+1/4)] = (A/4)*[1-1/41+1/42-1/43+...] = (A>>2)-(A>>4)+(A>>6)-(A>>8)+...

A/7 = A/(8-1) = (A/8)*[1/(1-1/8)] = (A/8)*[1+1/81+1/82+1/83+...] = (A>>3)+(A>>6)+(A>>9)+(A>>12)+...

A/9 = A/(8+1) = (A/8)*[1/(1+1/8)] = (A/8)*[1-1/81+1/82-1/83+...] = (A>>3)-(A>>6)+(A>>9)-(A>>12)+...

A/10 = A/(8+2) = (A/8)*[1/(1+1/4)] = (A/8)*[1-1/41+1/42-1/43+...] = (A>>3)-(A>>5)+(A>>7)-(A>>9)+...

A/12 = A/(16-4) = (A/16)*[1/(1-1/4)] = (A/16)*[1+1/41+1/42+1/43+...] = (A>>4)+(A>>6)+(A>>8)+(A>>10)+...

И тд..
Hose
В ддс спурс это одна частотная составляющая. Она заметна при анализе узкой полосой. Если ее замодулировать то ее мощность размажется в полосе модулирующего сигнала, мощность увеличится на мощность модуляции. В вашем случае нет дискретной частотной составляющей. Любая модуляция шумом ухудшит ситуацию.
Обратный вариант - бегающий полюс цик. Это два цика в параллель и суммирование их выходов с разными весами: вес А меняется от 0 до 1, Б = 1-А. - это самое близкое к тому о чем спрашивалось.
Линейная и любая другая интерполяеция есть частный случай фильтрации с послаблениями возможнымии благодаря замечательным свойствам сигнала. Прежде чем заявлять что линейная интерполяция лучше, необходимо проверить это на всех возможных реализациях сигнала.
Hose
Если это курсовой или дирломная, то качающийся полюс не стоит применять - устанете объяснять как работает.

Полуполосный фильтр это фир с импульсной син(х)/х. Умножителей меньше в 2 раза относительно остальных фир с симметричной импульсной. На каждое повышение частоты в 2 раза нужен такой фильтр.
Если жалко ресурсы, можно сделать один полифазный конвейерный фильтр на памяти. Но это тема для отдельной дипломной)
Maverick
Цитата(Hose @ Apr 17 2015, 18:20) *
Если это курсовой или дирломная, то качающийся полюс не стоит применять - устанете объяснять как работает.

что такое качающийся плюс?
это ж вроде разложение в ряд Маклорена или Тейлора, если я не ошибаюсь...

Krys
Всем спасибо за подсказки.

ЗЫ: это не курсовая и не дипломная, стар я для них уже ))) так... желание изобрести велосипед с минимумом ресурсов и с приемлемыми характеристиками.
shf_05
простая последовательность рассуждений приведет вас к пониманию, что идея с добавлением шума не годится:
если ваша система линейна и шум аддитивный, то сумма сигнал + помеха не размажет спектра сигнала

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

в DDS пики в спектре совсем по другой причине, чем у вас.
Krys
Цитата(shf_05 @ Apr 20 2015, 12:31) *
простая последовательность рассуждений приведет вас к пониманию, что идея с добавлением шума не годится:
если ваша система линейна и шум аддитивный, то сумма сигнал + помеха не размажет спектра сигнала
Это то я понимал с самого начала, поэтому отмёл эту идею сразу, даже без попыток отмоделировать. Это ув. ViKo предлагал добавлять шум ко входу и выходу.


Цитата(shf_05 @ Apr 20 2015, 12:31) *
если вам надо размазать спектр, то вводите мультипликативную помеху, но ваш сигнал будет искажен.
либо делайте нелинейную систему. опять же сигнал будет искажен.
Спасибо, вот это мысль в нужном направлении. То, что сигнал будет искажён - нестрашно, он и так даже от линейной интерполяции нехило искажается ))


Цитата(shf_05 @ Apr 20 2015, 12:31) *
в DDS пики в спектре совсем по другой причине, чем у вас.
Это тоже понятно. Мне просто понравился общий подход: чтобы палка не мешала, её надо размазать. Общая мощность ошибки увеличится, но её плотность будет мала, SFDR будет лучше.
ViKo
Krys, в вашем скрипте используются функции plot_real, plot_spec, которых нет в моем Matlab R2014b.
blackfin
Цитата(Krys @ Apr 20 2015, 11:10) *
Спасибо, вот это мысль в нужном направлении. То, что сигнал будет искажён - нестрашно, он и так даже от линейной интерполяции нехило искажается ))

Кстати, по поводу линейной интерполяции.. И если нет ресурсов для правильных фильтров..

Из теории рядов Фурье вроде как следует, что синусоиду лучше аппроксимировать трапецеидальным сигналом,
причем длительность каждого из фронтов трапеции должна равняться в точности: Tпериода/3,
а длительность каждой из "полок" должна равняться в точности: Tпериода/6.

При этом 3-я гармоника спектра должна получиться тождественно равной нулю.
То есть, отличными от нуля гармониками будут: 1-ая, 5-ая, 7-ая, 11-ая, и т.д.

Учитывая же, что амплитуды гармоник спадают как: 1/k2,
получим выигрыш по гармоникам примерно: (5/3)2 = 2,78 или 8,9[dB].

Как-то так..
Krys
Цитата(blackfin @ Apr 20 2015, 18:51) *
Из теории рядов Фурье вроде как следует, что синусоиду лучше аппроксимировать трапецеидальным сигналом,
причем длительность каждого из фронтов трапеции должна равняться в точности: Tпериод/3,
а длительность каждой из "полок" должна равняться в точности: Tпериод/6.
Спасибо, надо будет попробовать на досуге, сейчас времени маловато. Это же мой личный интерес, не курсовая и не основное задание по работе ))
К стати: при линейной интерполяции в полосе полезного сигнала вообще нет нелинейных искажений, правильно? Т.е. линейная интерполяция ничего в полосе не портит, только за полосой. А вот трапеция видимо наделает компонентов внутри полосы, их оттуда потом ничем не уберёшь, разве что заранее внести соответствующие предыскажения в генерируемый сигнал по типу DPD, это возможно.


Цитата(ViKo @ Apr 20 2015, 16:39) *
Krys, в вашем скрипте используются функции plot_real, plot_spec, которых нет в моем Matlab R2014b.
Да это просто удобное отображение. Можете их заменить просто обычным плотом, ничего не поменяется.
serjj
Цитата
Т.е. линейная интерполяция ничего в полосе не портит, только за полосой.

Смотря что вы имеете в виду под словом "портить". Завал в полосе, как вы уже убедились, она обеспечивает. У вас путаница по поводу природы и видов вносимых искажений.
Цитата
при линейной интерполяции в полосе полезного сигнала вообще нет нелинейных искажений, правильно?

Нелинейные искажения - это такие искажения, которые порождают компоненты за полосой сигнала, которых в исходном сигнале не было.
Искажения в полосе - это частотные искажения, иначе неравномерность АЧХ, вносимая системой.
Подумайте, как можно записать линейную интерполяцию в линейном виде, т.е. как линейную комбинацию элементов вектора, составленного из отчётов входного сигнала, которая бы соответствовала линейно интерполированному сигналу. Естественно сигнал нужно сначала передескритезировать, дополнив нулями. Если у вас этого не получится то ваша интерполяция нелинейна.
Вот пример. Возьмем два фильтра: FIR с единичными коэффициентами (скользящее среднее) и медианный фильтр. Построим АЧХ обоих фильтров:
Нажмите для просмотра прикрепленного файла
Видно, что оно с некоторой точностью совпадает.
Теперь пропустим некоторый полосовой сигнал через оба фильтра:
Нажмите для просмотра прикрепленного файла
Видно, что медианный фильтр внёс искажения вне полосы сигнала (спектр исходного сигнала приведен для сравнения). Медианный фильтр нелинейная система, он даёт нелинейные (внеполосные) искажения. С точки зрения математики, любая система для которой y = f([x_i]) не является линейной комбинацией элементов вектора x_i (или в общем случае матрицы), нелинейная. Однако не у каждой нелинейной системы будут выраженные нелинейные искажения.
Krys
Цитата(serjj @ Apr 21 2015, 14:00) *
Смотря что вы имеете в виду под словом "портить". Завал в полосе, как вы уже убедились, она обеспечивает
Да завал - это линейные искажения, я их даже за искажения не считаю ))
Я имел в виду под портить наличие интермодуляционных компонентов прямо в полосе сигнала. Т.е. берём для чистоты эксперимента чистую синусоиду, а лучше несколько рядом, пропускаем их через хорошо нелинейный интерполятор, получаем кучу лишних палок прямо внутри полосы сигнала (не говоря уж о палках за полосой). При этом при линейной интерполяции лишних палок нет внутри полосы сигнала, только за полосой.

Цитата(serjj @ Apr 21 2015, 14:00) *
Подумайте, как можно записать линейную интерполяцию
...
Вот пример
...
Большое спасибо, что разъясняете.
serjj
Цитата
Я имел в виду под портить наличие интермодуляционных компонентов прямо в полосе сигнала. Т.е. берём для чистоты эксперимента чистую синусоиду, а лучше несколько рядом, пропускаем их через хорошо нелинейный интерполятор, получаем кучу лишних палок прямо внутри полосы сигнала (не говоря уж о палках за полосой). При этом при линейной интерполяции лишних палок нет внутри полосы сигнала, только за полосой.

Когда я говорил о полосе я имел в виду не условную полосу (например полосу обработки), а полосу сигнала. Для синуса полоса сигнала это палка в частотном спектре. Интермодуляция порождает гармоники за полосой синуса. Тоже применимо и к полосовому сигналу. Другое дело, что для полосового сигнала, пропущенного через нелинейную систему, имеются помимо нелинейных искажений искажения в полосе. Если завал линейного фильтра типа скользящего среднего вносит искажения только в АЧХ, то в нелинейной системе могут возникнуть искажения и в ФЧХ. Но вот вам пример линейной системы, которая вызывает искажения АЧХ и ФЧХ в полосе сигнала - модель канала связи, аппроксимированная комплексным FIR фильтром. Нелинейные искажения при этом не появляются но в полосе полный треш. Как следствие - потребность в комплексном эквалайзере.
Так что если мы говорим о нелинейных искажениях, то их критерием являются именно внеполосные искажения.
Krys
Цитата(serjj @ Apr 21 2015, 15:04) *
Тоже применимо и к полосовому сигналу. Другое дело, что для полосового сигнала, пропущенного через нелинейную систему, имеются помимо нелинейных искажений искажения в полосе.
Вот это я имел в виду. Если конкретно по картинке из первого поста, то допустим полосовой сигнал занимает половину всей возможной полосы, т.е. четверть частоты дискретизации. Так вот хорошо нелинейный интерполятор даст интермодуляционные компоненты, залезшие прямо в эту полосу полосового сигнала. А линейный интерполятор даст компоненты, лежащие в других зонах Найквиста (зоны до интерполяции), но не в полосе полосового сигнала.


Цитата(serjj @ Apr 21 2015, 15:04) *
Так что если мы говорим о нелинейных искажениях, то их критерием являются именно внеполосные искажения.
Тут я либо что-то недопонял, либо несогласен )) Согласно моего абзаца выше нелинейные искажения могут дать интермодуляции прямо в полосе полосового сигнала.
petrov
Цитата(Krys @ Apr 21 2015, 11:36) *
Вот это я имел в виду. Если конкретно по картинке из первого поста, то допустим полосовой сигнал занимает половину всей возможной полосы, т.е. четверть частоты дискретизации. Так вот хорошо нелинейный интерполятор даст интермодуляционные компоненты, залезшие прямо в эту полосу полосового сигнала. А линейный интерполятор даст компоненты, лежащие в других зонах Найквиста (зоны до интерполяции), но не в полосе полосового сигнала.


В общем случае линейный интерполятор тоже может дать компоненты в полосе вашего сигнала(смотреть увеличение частоты дискретизации в нецелое количество раз), хоть эти искажения и линейные.
Krys
Ой, нецелое число раз - это уже совсем высший пилотаж ))
mihalevski
Если Вы реализовали частотный детектор, используя линейную интерполяцию
f(t)=FD(t), где t - непрерывное время, а f(t) соответствующая этому времени
мгновенная частота в спектре сигнала то попробуйте вычислить f(t) так

f(t) = ( FD( t ) + FD( t + 0.5 ) ) / 2.

В формуле число 0.5 "создает" сдвиг на половину такта перед линейным интерполятором.

Вроде полный бред да еще количество вычислений увеличивает в 2 раза но у меня результат
стал приемлемым и все пошло в работу.


Krys
да нет, у меня не частотный детектор. У меня просто повышение тактовой
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.