Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Операция обратная к "скользящему среднему"
Форум разработчиков электроники ELECTRONIX.ru > Cистемный уровень проектирования > Математика и Физика
Страницы: 1, 2, 3, 4
Tarbal
Цитата(thermit @ Jan 15 2014, 12:55) *
Мне это никчему. Я стараюсь по мере сил наполнить темы хоть каким-то содержанием, в отличие от большинства гуру.



Этой импульсной х-ке соответствует передаточная функция (прямое z-преобразование)



Из передаточной функции получается разностное уравнение





Надо решить уравнение



получаем



полюсы







Когда хотят чего-то узнать обычно спрашивают, а не начинают разводить теории о практике.


Спасибо. Интересно.
А как ваше разностное уравнение стыкуется с полученым топикстартером?
X[i+N] = X[i-N-1] + (Y[i] - Y[i-1]) * 2N
mdmitry
Цитата(AndrewN @ Jan 15 2014, 00:54) *
P.S. Кроме того, нет никаких запретов на интегрирование разрывных функций. Смотрите определение интеграла. Поэтому ваш дурацкий пример интеграл с раз-два-три как-раз-то и считается как два пальца.

Напомню, что в есть два вида интегралов. Интегралы по Риману (о чем уже упоминал Stanislav) и интегралы по Лебегу.
AndrewN, проинтегрируйте, пожалуйста, функцию Вейерштрасса.
thermit
Цитата
Tarbal:
Спасибо. Интересно.
А как ваше разностное уравнение стыкуется с полученым топикстартером?
X[i+N] = X[i-N-1] + (Y[i] - Y[i-1]) * 2N


У тс несколько некорректно записаны уравнения.
Скользящее среднее должно быть так:
Y[i+N] = Y[i+N-1] + (X[i+N] - X[i-N-1]) / (2N+1)
или
Y[i] = Y[i-1] + (X[i] - X[i-2*N-1]) / (2N+1)
отсюда:
X[i] = X[i-2*N-1] + (Y[i] - Y[i-1]) * (2N+1)

У меня длина N у него 2*N+1
У меня x у него Y
У меня y у него X
У меня n у него i
Ну и до кучи я не делил/ не умножал на длину, что в общем-то и непринципиально...


_pv
Цитата(thermit @ Jan 15 2014, 22:48) *
У тс несколько некорректно записаны уравнения.

не то чтобы некорректно, по другому, я просто взял нечётное количество точек симметрично в обе стороны относительно текущего отсчёта, чтобы фазу не портить.
Stanislav
Цитата(mdmitry @ Jan 15 2014, 18:26) *
...AndrewN, проинтегрируйте, пожалуйста, функцию Вейерштрасса.
С цифирью всё гораздо проще. Т.к. цифровая функция определена на дискретном пространстве (только в узловых точках, множество которых в лучшем случае имеет мощность множества целых чисел), ни о какой интегрируемости не может быть и речи, по определению.
Более того, с практической точки зрения, множество цифровых сигналов вообще является конечным.sm.gif
Выходную последовательность КИХ-фильтра при должном усердии может получить и пятиклассник. Для этого нужно только уметь складывать и умножать (а для скользящего среднего - только складывать). Тутешним мыслителям, однако, проще нарисовать закорючку интеграла и над ней дружно камлать.
Со стороны уже ржут. Позорище, да и только.

Цитата(_pv @ Jan 15 2014, 20:16) *
не то чтобы некорректно, по другому, я просто взял нечётное количество точек симметрично в обе стороны относительно текущего отсчёта, чтобы фазу не портить.
В будущее, стало быть, заглянули?
Ну, в задачах ЦОС это жёстко не возбраняется. sm.gif
Фаза, однако, не испортится по-любому.
Tarbal
Цитата(thermit @ Jan 15 2014, 18:48) *
У тс несколько некорректно записаны уравнения.
Скользящее среднее должно быть так:
Y[i+N] = Y[i+N-1] + (X[i+N] - X[i-N-1]) / (2N+1)
или
Y[i] = Y[i-1] + (X[i] - X[i-2*N-1]) / (2N+1)
отсюда:
X[i] = X[i-2*N-1] + (Y[i] - Y[i-1]) * (2N+1)

У меня длина N у него 2*N+1
У меня x у него Y
У меня y у него X
У меня n у него i
Ну и до кучи я не делил/ не умножал на длину, что в общем-то и непринципиально...


Спасибо.

Теперь у меня когнитивный диссонанс:
Как эта формула может быть неустойчива, когда посредством простой арифметики я вижу, что она дает значение в точности то, которое было. При условии, что мы считаем, что нам известно первое значение.
thermit
Цитата
Tarbal:
Теперь у меня когнитивный диссонанс:
Как эта формула может быть неустойчива, когда посредством простой арифметики я вижу, что она дает значение в точности то, которое было. При условии, что мы считаем, что нам известно первое значение.



Дискретная система называется устойчивой, если для ее импульсной х-ки выполняется условие:



Очевидно, что для их восстанавливающего фильтра это условие не выполняется.
Ну и разнесет выход такой цепи на любой последовательности кроме единственной.
mdmitry
Цитата(Stanislav @ Jan 15 2014, 20:25) *
С цифирью всё гораздо проще. Т.к. цифровая функция определена на дискретном пространстве (только в узловых точках, множество которых в лучшем случае имеет мощность множества целых чисел), ни о какой интегрируемости не может быть и речи, по определению.

Конечно, а фильтр реализует дискретную свертку.
Я упомянул интегралы из-за этой фразы AndrewN:
Цитата
Кгм... А дискретные-то фильтры откуда произошли? Из свёрток, суть интегральных преобразований, со специальными ядрами.
Tarbal
Цитата(thermit @ Jan 15 2014, 21:00) *
Дискретная система называется устойчивой, если для ее импульсной х-ки выполняется условие:



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


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

Однако если считать по разностному уравнению мы будем получать те самые значения, которые были до усреднения, что не согласуется в моем понимании с разнесением последовательности.
Stanislav
Цитата(thermit @ Jan 15 2014, 22:00) *
Ну и разнесет выход такой цепи на любой последовательности кроме единственной.
Извините, но формально это не так.
Неустойчивые фильтры имеют право на жизнь, например, для последовательностей с конечным числом ненулевых значений.
Пример - алгоритм Герцеля.
thermit
Цитата
Stanislav:
Извините, но формально это не так.
Неустойчивые фильтры имеют право на жизнь, например, для последовательностей с конечным числом ненулевых значений.
Пример - алгоритм Герцеля.


Право на жизнь никто не оспаривает. Речь идет конечно же о последовательностях неограниченных во времени.
Stanislav
Цитата(mdmitry @ Jan 15 2014, 22:41) *
Я упомянул интегралы из-за этой фразы AndrewN:
Дык, в ЦОС под дискретными свёртками и пр., подразумеваются просто суммы рядов, конечных или бесконечных.
Названия "технические", не имеющее никакого отношения к математически строгим определениям.
В конце-то концов, из цифири нужно в реальный мир выползать, вот и придумываются некие аналогии.
Но тупо следовать им нельзя - вероятность сесть в лужу близка к 100%. Пользоваться ими можно только в определённых, осмысленных границах.

Цитата(thermit @ Jan 15 2014, 23:53) *
Право на жизнь никто не оспаривает. Речь идет конечно же о последовательностях неограниченных во времени.
И всё равно не любых. Таких последовательностей (формально) существует бесконечное множество.
(Не спора ради, а истины для). sm.gif

Наверное, была бы интересной задача минимизации ошибки при искусственном повышении устойчивости фильтров в системах с ограниченной разрядной сеткой.
Но это, думается, требует отдельной темы.
thermit
Цитата
Tarbal:
Как эта формула может быть неустойчива,...


Цитата
не об определении устойчивости спрашиваю


Определитесь с вопросами.

Цитата
Однако если считать по разностному уравнению мы будем получать те самые значения, которые были до усреднения, что не согласуется в моем понимании с разнесением последовательности.


Подайте что-нибудь другое. Увидите, что будет. Разговор опять плавно поехал в сторону словоблудия. Вопросы связанные с вашим мироощущением вне моей компетенции и этого топика.

Цитата
Stanislav:
И всё равно не любых. Таких последовательностей (формально) существует бесконечное множество.


Да. Их по крайней мере не меньше числа последовательностей, которые можно обработать соответствующим однородным фильтром.
Stanislav
Цитата(thermit @ Jan 16 2014, 00:13) *
Да. Их по крайней мере не меньше числа последовательностей, которые можно обработать соответствующим однородным фильтром.
sm.gif

Я бы сказал - больше.
Tarbal
Цитата(thermit @ Jan 15 2014, 23:13) *
Определитесь с вопросами.



Подайте что-нибудь другое. Увидите, что будет. Разговор опять плавно поехал в сторону словоблудия. Вопросы связанные с вашим мироощущением вне моей компетенции и этого топика.



Да. Их по крайней мере не меньше числа последовательностей, которые можно обработать соответствующим однородным фильтром.


Правильно ли я вас понял, что использование разностного уравнения для последовательного вычисления исходных значений не даст ожидаемого результата?
thermit
Цитата(Tarbal @ Jan 16 2014, 03:01) *
Правильно ли я вас понял, что использование разностного уравнения для последовательного вычисления исходных значений не даст ожидаемого результата?


Смотря что вы ожидаете. Если выход скользящего среднего представлен точно - обратный фильтр восстановит исходный сигнал без ошибок. Иначе, выход обратного фильтра будет содержать шум, который будет неограниченно расти с течением времени.
ViKo
Я считаю, что обратный фильтр - устойчивый, на грани устойчивости, с полюсами на единичной окружности z-плоскости. Для другого фильтра, при ошибках вычислений это было бы чревато возбуждением. В данном случае при расчетах не теряется ни одного бита (во всяком случае, это можно сделать). Одни сложения да вычитания. Деление-умножение можно не делать, если в прямом фильтре не делить среднее на количество. Но и при делениях, умножениях можно иметь достаточно разрядов, чтобы вычислять точно, если числа целые.
Подтвердить формулами свое предположение не могу (может, позже, в свободное от досуга время).
Нет, пожалуй, все же, можно говорить только об устойчивости пары прямой + обратный фильтры. Оставлю свое сообщение неизменным, как информацию для размышлений.
Импульсная характеристика обратного фильтра будет содержать палки - одна вверх, следом за ней вниз, через N (длина фильтра) все повторяется, и так до бесконечности.
thermit
Цитата(ViKo @ Jan 16 2014, 12:31) *
пожалуй, все же, можно говорить только об устойчивости пары прямой + обратный фильтры


Да.
TSerg
Немного соображений:

Вопрос ТС относится к т.н. редукционной проблеме Релея или классу обратных задач, также именуемых как задачи редукции, восстановления, реставрации (signal restoration).

Эта проблема возникла как раз из желания практиков приблизить реальную измерительную систему ( датчик ) к идеальной, т.е. устранить влияние датчика на результат измерения (хотя, в общем-то, это некорректно, поскольку без взаимодействия датчика и среды (объекта), измерения не может быть, как такового ).

Пример прикладной задачи с компенсацией аппаратной (весовой) функции термопары я упоминал выше.

В зависимости от того в каком базисе задача поставлена ( временной или пространственный ), соответственно решения сводятся к интегральным уравнениям свертки: Вольтерры (динамические системы) или Фредгольма (не динамические системы) соответствующего рода.
Для ур-ний Вольтерры I рода ( системы без ОС ) задача поиска решения, как правило, является некорректной ( неустойчивой ) и приходится прибегать к различного рода регуляризации.

Уравнения свертки во временной области h(t)*x(t) = y(t) или в частотной H(f)*X(f)=Y(f).

Очевидна, взаимосвязь исходной H(f) и реставрационной Hr(f) ( обратной ) весовыми функциями (ВВ) для их взаимо-компенсации:
Hr(f)=1/H(f).

Если усиление исходной весовой функции убывает с частотой, очевидно, что усиление обратной функции должно увеличиваться, но это приводит
к подчеркиванию шумов, что, в конечно итоге, может сделать решение нереализуемым.
Для компенсации негативного, в смысле усиления помех, действия реставрационной ВВ, вводят корректирующую ВВ:
Hr(f) = (1/H(f)) * W(f)

- при W(f) = 1, имеем инверсную фильтрацию.
- при W(f) = rect(f/fc) ( оконная функция того или иного вида), выполняется ограничение спектра на уровне fc.
- регуляризация Тихонова для решения некорректных задач ( гребневая регрессия ) и т.п.

Как правило, методы обратной фильтрации применимы к существенно высокочастотным шумам (в т.ч. шумам квантования) или вообще их отсутствию.

Во всех этих случаях поиск решения сводится к компромиссному выбору между сверхразрешением и зашумлением.
К примеру, если ДПФ корректора: B0+B1*Z^-1+..+Bn*Z^-N,
то коэф-т усиления "белого"шума K = sqrt(sum(B[i]^2))/sum(B[i] обычно выбирают в диапазоне 2..5.

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

Tarbal
Цитата(thermit @ Jan 16 2014, 11:51) *
Смотря что вы ожидаете. Если выход скользящего среднего представлен точно - обратный фильтр восстановит исходный сигнал без ошибок. Иначе, выход обратного фильтра будет содержать шум, который будет неограниченно расти с течением времени.


Спасибо. Теперь все понятно.
Кроме одного: полюса на единичной окружности не устроят разноса. Насколько я понимаю ситуацию для разноса им надо немножко выйти за окружность.
thermit
Цитата(Tarbal @ Jan 16 2014, 16:58) *
Спасибо. Теперь все понятно.
Кроме одного: полюса на единичной окружности не устроят разноса. Насколько я понимаю ситуацию для разноса им надо немножко выйти за окружность.


Нет. Чтобы не было разноса полюсы по модулю должны быть строго меньше 1 хотя и могут быть сколь угодно близки к ней. Иначе на чаcтотах полюсов бесконечный к-т передачи будет.
TSerg
Цитата(thermit @ Jan 16 2014, 18:29) *
.. хотя и могут быть сколь угодно близки к ней.


На практике - в рамках учета наследственных погрешностей вычислений, т.е. "не сколь угодно".

Tarbal
Цитата(thermit @ Jan 16 2014, 17:29) *
Нет. Чтобы не было разноса полюсы по модулю должны быть строго меньше 1 хотя и могут быть сколь угодно близки к ней. Иначе на чаcтотах полюсов бесконечный к-т передачи будет.


Спасибо. Понял.
fontp
QUOTE (Tarbal @ Jan 16 2014, 21:28) *
Спасибо. Понял.


Полюса на границе устроят "линейный" разнос, что хоть и лучше разноса экспоненциального, но тоже неприемлемо для длинных последовательностей
ViKo
Цитата(fontp @ Jan 16 2014, 20:58) *
Полюса на границе устроят "линейный" разнос, что хоть и лучше разноса экспоненциального, но тоже неприемлемо для длинных последовательностей

Линейный - в смысле, генерация с постоянной амплитудой, так надо думать. Разве ж это "разнос"? sm.gif
fontp
QUOTE (ViKo @ Jan 16 2014, 22:01) *
Линейный - в смысле, с постоянной амплитудой, так надо думать.


Линейный в смысле линейно нарастающего по шагу рекурсии.
Для произвольных последовательностей все это "не очень"

Возможно, можно кое-что получить для оценки финитного и гладкого импульсного отклика. Аппаратная функция часто бывает типа скользящего среднего, например в оптике. Но скорее результат можно получить алгебраически, подгоняя решение матричногоуравнения
ViKo
Цитата(fontp @ Jan 16 2014, 21:03) *
Линейный в смысле линейно нарастающего по шагу рекурсии

Прикидываю простейшую модель. Возьмем в качестве фильтра скользящего среднего сумму двух соседних членов входной последовательности. Обратный фильтр - разность двух соседних членов выходной последовательности. Это очевидно. Делить на два не будем, от этого ничего не меняется. Допустим, входные значения лежат в диапазоне 0..1. Диапазон выходных значений прямого фильтра может быть 0..2. Теперь попробуйте устроить "разнос". Задайте такую последовательность чисел в диапазоне 0..2, которая на после обратного фильтра выдаст нечто большее, чем -2..2. Вот и весь "разнос".
thermit
Кстати говоря, можно использовать цепи с полюсами на единичной окружности для генерации всяких хитровывернутых сигналов.
Например биквадратным звеном можно генерить гармонический сигнал. На вход такой цепи ничего не подается просто начальные условия задаются отличные от 0. Недостаток - через некоторое время генерацию разносит вследствие ошибок вычислений.
fontp
QUOTE (ViKo @ Jan 16 2014, 22:12) *
Прикидываю простейшую модель. Возьмем в качестве фильтра скользящего среднего сумму двух соседних членов входной последовательности. Обратный фильтр - разность двух соседних членов выходной последовательности. Это очевидно. Делить на два не будем, от этого ничего не меняется. Допустим, входные значения лежат в диапазоне 0..1. Диапазон выходных значений прямого фильтра может быть 0..2. Теперь попробуйте устроить "разнос". Задайте такую последовательность чисел в диапазоне 0..2, которая на после обратного фильтра выдаст нечто большее, чем -2..2. Вот и весь "разнос".


Не допустим. Если нет источника шума - результат будет точный.
Но шум любой природы будет накопляться. В вашем примере выход прямого фильтра будет часто 0-2, но иногда 3 и даже 4
thermit
Цитата(ViKo @ Jan 16 2014, 21:12) *
Прикидываю простейшую модель. Возьмем в качестве фильтра скользящего среднего сумму двух соседних членов входной последовательности. Обратный фильтр - разность двух соседних членов выходной последовательности. Это очевидно. Делить на два не будем, от этого ничего не меняется. Допустим, входные значения лежат в диапазоне 0..1. Диапазон выходных значений прямого фильтра может быть 0..2. Теперь попробуйте устроить "разнос". Задайте такую последовательность чисел в диапазоне 0..2, которая на после обратного фильтра выдаст нечто большее, чем -2..2. Вот и весь "разнос".


Да. Очевидно, что это не так.

Если прямой фильтр y(n)=x(n)+x(n-1), то обратный x(n)=y(n)-x(n-1);
Разнос? Да как 2 бита переслать...
ViKo
Цитата(thermit @ Jan 16 2014, 21:13) *
Недостаток - через некоторое время генерацию разносит вследствие ошибок вычислений.

А в обсуждаемых фильтрах ошибок вычислений может и не быть.

Цитата(thermit @ Jan 16 2014, 21:22) *
Да. Очевидно, что это не так.
Если прямой фильтр y(n)=x(n)+x(n-1), то обратный x(n)=y(n)-x(n-1);

Рекурсивная форма того же самого.
upd. Нет, не того... а чего?
fontp
QUOTE (ViKo @ Jan 16 2014, 22:26) *
А в обсуждаемых фильтрах ошибок вычислений может и не быть.


Рекурсивная форма того же самого.


Ошибок вычислений может не быть, если вычисления ведутся без нормировки и в целых числах

Например, рекурсивная форма вычисления скользящего среднего


Y(i) = Y(i-1) + x(i) - x(i-N)

будет вполне себе точной. ( В действительных числах ее снесет из-за интегрирования ошибок округления).
Обратная формула тоже будет точной, но только в том случае, если к Y походу не добавилось шума любой природы
thermit
Цитата(TSerg @ Jan 16 2014, 19:26) *
На практике - в рамках учета наследственных погрешностей вычислений, т.е. "не сколь угодно".


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

Цитата(ViKo @ Jan 16 2014, 21:26) *
А в обсуждаемых фильтрах ошибок вычислений может и не быть.


Это я для справки.

Цитата(ViKo @ Jan 16 2014, 21:26) *
Рекурсивная форма того же самого.


Рекурсивная цепь имеет минимум один несократимый полюс отличный от нуля. Нерекурсивная таких полюсов не имеет. Так что не того же самого. Смотрите внимательнее и не делайте поспешных выводов.
ViKo
Цитата(thermit @ Jan 16 2014, 21:43) *
Рекурсивная цепь имеет минимум один несократимый полюс отличный от нуля. Нерекурсивная таких полюсов не имеет. Так что не того же самого. Смотрите внимательнее и не делайте поспешных выводов.

Ok, не того. Но покажите мне на числах "разнос как два бита переслать" для вашего фильтра.

Странно. Фильтр скользящего среднего может быть рекурсивным или нерекурсивным. А обратный - только рекурсивный.
thermit
Цитата(ViKo @ Jan 16 2014, 21:52) *
Ok, не того. Но покажите мне на числах "разнос как два бита переслать" для вашего фильтра.


Подайте на вход последовательность 0 1 0 1 ... Или любую рандомную последоватедьность.
ViKo
Цитата(thermit @ Jan 16 2014, 22:18) *
Подайте на вход последовательность 0 1 0 1 ... Или любую рандомную последоватедьность.

Да, полезло... Именно для входного сигнала с частотой, определяемой полюсом фильтра. Спасибо, просвещен!
thermit
Цитата(ViKo @ Jan 16 2014, 22:30) *
Да, полезло... Именно для входного сигнала с частотой, определяемой полюсом фильтра. Спасибо, просвещен!


Да незачто. Хорошо, когда разговор переходит хоть в какую-то конструктивную плоскость и просвещение берет верх над мракобесием.
Stanislav
Цитата(ViKo @ Jan 16 2014, 22:01) *
Линейный - в смысле, генерация с постоянной амплитудой, так надо думать. Разве ж это "разнос"? sm.gif
Линейный в том смысле, что погрешности он не усиливает, но и не забывает. sm.gif


Цитата(thermit @ Jan 16 2014, 22:13) *
Недостаток - через некоторое время генерацию разносит вследствие ошибок вычислений.
Можно организовать "демпфирование" и "подкачку" такого резонатора. Тогда его разносить не будет. Цена - некоторая дополнительная погрешность, которую можно минимизировать в соответствии с разрядными возможностями.
Зато просто, как тапочек. sm.gif
thermit
Цитата
Stanislav:
Можно организовать "демпфирование" и "подкачку" такого резонатора. Тогда его разносить не будет. Цена - некоторая дополнительная погрешность, которую можно минимизировать в соответствии с разрядными возможностями.
Зато просто, как тапочек.


Те сместить полюс внутрь единичной окружности и подать вход. Это не наш метод. Лучше тогда полиномом...
Stanislav
Цитата(thermit @ Jan 17 2014, 00:00) *
Те сместить полюс внутрь единичной окружности и подать вход. Это не наш метод. Лучше тогда полиномом...
Полиномом некошерно - скучно, да и вычислений много.

А вход надо взять как бы с выхода. sm.gif С помощью некого нелинейного преобразования.
Tarbal
Цитата(ViKo @ Jan 16 2014, 21:52) *
Странно. Фильтр скользящего среднего может быть рекурсивным или нерекурсивным. А обратный - только рекурсивный.


Век живи -- век учись. Даже не могу себе представить рекурсивный фильтр скользящего среднего. Разве такое бывает?
ViKo
Цитата(Tarbal @ Jan 16 2014, 23:59) *
Век живи -- век учись. Даже не могу себе представить рекурсивный фильтр скользящего среднего. Разве такое бывает?

y(n) = y(n-1) + x(n) - x(n - N)
Stanislav
Цитата(Tarbal @ Jan 17 2014, 00:59) *
Век живи -- век учись. Даже не могу себе представить рекурсивный фильтр скользящего среднего. Разве такое бывает?
lol.gif
thermit, ликбез пора заканчивать, не в коня корм.

--------------------

"Генератор" одной "синусоиды". Легко можно расширить до целой вязанки. Для этого нужно увеличить количество пар полюсов (порядок фильтра).
Но подкачку придётся делать посложнее.

Код
N=3;
Damp=0.99;

y=zeros(1,1000);
y(1)=0.01;

a=ones(1,N);
a(2)=-1.8; % "частота"
b=N;

a=a.*(Damp.^[0:(N-1)]); % сдвиг полюсов


for (i=3:length(y)+1)
    y(i)=-a(2)*y(i-1)-a(3)*y(i-2);
    if(y(i)*y(i-1)<0)
        y(i)=y(i)+0.01*sign(y(i));
    end
end

figure (1)
plot (y)
grid on

clear all;

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

ЗЫ. Вот картинки. Ничего не напоминают?
Нажмите для просмотра прикрепленного файлаНажмите для просмотра прикрепленного файлаНажмите для просмотра прикрепленного файла
wink.gif

Выходной сигнал не так уж плох для столь малой "добротности" резонатора и примитивного способа подкачки:

Нажмите для просмотра прикрепленного файла
Tarbal
Цитата(ViKo @ Jan 17 2014, 00:13) *
y(n) = y(n-1) + x(n) - x(n - N)


Ах вот оно что. Термит как раз обратный этому фильтру восстанавливающий фильтр приводил.


Цитата(Stanislav @ Jan 17 2014, 01:20) *
lol.gif
thermit, ликбез пора заканчивать, не в коня корм.

Какой вы приятный собеседник.
alex_os
Цитата(Stanislav @ Jan 17 2014, 02:20) *
"Генератор" одной "синусоиды". Легко можно расширить до целой вязанки. Для этого нужно увеличить количество пар полюсов (порядок фильтра).
Но подкачку придётся делать посложнее.



Т.е. идея состоит в том, чтобы с помощью нелинейности компенсировать демпфирование фильтра или другими словами сделать более добротный фильтр средствами менее точной арифметики?
Stanislav
Цитата(alex_os @ Jan 17 2014, 08:58) *
Т.е. идея состоит в том, чтобы с помощью нелинейности компенсировать демпфирование фильтра или другими словами сделать более добротный фильтр средствами менее точной арифметики?
Это не совсем фильтр, а именно генератор колебаний, близких к гармоническим. Да, при малой разрядности будет работать.
Не считая "подкачки", на получение отсчёта одного тона требуется всего 2 операции умножения и 1 операция сложения.
Качество выходного сигнала становится особенно хорошим, если период сигнала выбирается кратным целому числу отсчётов.
Вот текст недописанной программы, с которым можно поиграться.
Код
S=1;        % количество сигналов

N=2*S+1;

Per_1=[20 30];   % период сигнала в отсчётах (дробный допустим)

Damp=0.99;  % затухание
Push=(1-Damp);

y=zeros(1,10000);
y(1)=Push;

a1=ones(1,N);
a1(2)=-2*cos(2*pi/Per_1(1)); %

a=a1;

%------------

a=a.*(Damp.^[0:(N-1)]); % сдвиг полюсов

for (i=3:length(y)+1)
    y(i)=sum(-a(2:N).*y(i-(1:N-1)));
    if(y(i)*y(i-1)<0)
        y(i)=y(i)+Push*sign(y(i)); % "подкачка"
    end
end

figure (1)
plot (y(1:1000))
grid on

yw = blackmanharris(2048).*y(7001:9048)';
Y = fft(yw);
Ya= abs(Y(1:1024));
Ya=Ya/max(Ya);

figure(2)
semilogy(0:1023, Ya)
xlim ([0,1023])
ylim ([1e-4, 1])
grid on

clear all;


ДПФ при периоде в 20 отсчётов:
Нажмите для просмотра прикрепленного файла

Выходная последовательность содержит только нечётные гармоники основного тона.
TSerg
// rate
// r = (0..1]

r := 0.005; // к примеру

for i=0 to 800
p += r;
if(p > 1) p -= 2;
out = p*(1-abs(p));

Совсем простой sin-генератор sm.gif
ViKo
Цитата(TSerg @ Jan 17 2014, 09:13) *
Совсем простой sin-генератор sm.gif

"Параболоид инженера ..." rolleyes.gif
TSerg
Давно кем-то сказано - "чем проще, тем дешевле; чем дешевле, тем быстрее; чем быстрее - тем дороже". sm.gif
Нажмите для просмотра прикрепленного файла

ViKo
Да, на глаз я не различаю, что из них что. 05.gif Просто констатирую. laughing.gif
"Кому и кобыла невеста" (с)
"Ренгент покажет" (с)
Код
%%  TSerg  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

N = 2048;    % Длина последовательности
T = 4;        % Количество периодов в последовательности

% rate r = 0..1
% r = 0.005;
r = T / N * 2;

p = zeros(1, N);
for (i = 2 : N)
  p(i) = p(i - 1) + r;
  if (p(i) > 1)
    p(i) = p(i) - 2;
  end
  g = 4 .* p .* (1 - abs(p));    % амплитуда равна 4 * 0.25
end

figure(1)
plot(1 : N, g)
xlim([0, N])
grid on

wg = blackmanharris(N) .* g(1 : N)';
sp = fft(wg);
sp = abs(sp(1 : N));
sp = sp / max(sp);

figure(2)
semilogy(1 : N, sp)
xlim([0, N / 2])
ylim([1e-6, 1])
grid on

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