Использование фильтров в цикле For loop

Захват, обработка и генерирование сигнала

Использование фильтров в цикле For loop

Postby Alex Dem on 26 Apr 2017, 18:02

Добрый день! Прошу помощи в решении следующей задачи.
С генератора шума сигнал попадает на 2 полосовых фильтра, затем выходные сигналы суммируются и результат выводится на график. Здесь все понятно. Как (и можно ли) добиться такого же результата, расположив полосовой фильтр внутри цикла For loop? В дальнейшем требуется количество фильтров и их параметры задавать пользователю в файле , вот почему интересует решение данной задачи. Спасибо.
Attachments
For loop filters.png
Alex Dem
junior
junior
 
Posts: 55
Joined: 06 May 2015, 22:24
LabVIEW Version: 2014
Karma: 7

Re: Использование фильтров в цикле For loop

Postby Kosist on 27 Apr 2017, 00:50

Можно - цикл For Loop будет индексироваться количеством нужных фильтров, которые будут обрабатывать входящий сигнал, а на выходе цикла собирать двумерный массив (или если сигнал будет последовательно фильтроваться, то на выходе будет одномерный массив как сейчас у Вас; и внутри цикла массив/сигнал будет передаваться между итерациями For Loop в сдвиговом регистре).
Мы делили апельсин - много наших полегло...
User avatar
Kosist
leader
leader
 
Posts: 782
Joined: 21 Feb 2011, 23:44
Location: СумГУ
Medals: 2
Activity (1) Gold (1)
LabVIEW Version: 2013-2017
Karma: 236
CLAD I/O VIP students

Re: Использование фильтров в цикле For loop

Postby Alex Dem on 27 Apr 2017, 06:45

Спасибо за ответ. Но проблема в том, что при работе фильтров внутри цикла For loop форма сигналов на выходе не такая, как при простом включении фильтров, что видно на графиках.
Как сделать так, чтобы результаты работы обоих вариантов совпадали?
Alex Dem
junior
junior
 
Posts: 55
Joined: 06 May 2015, 22:24
LabVIEW Version: 2014
Karma: 7

Re: Использование фильтров в цикле For loop

Postby Kosist on 27 Apr 2017, 12:07

Alex Dem wrote:Спасибо за ответ. Но проблема в том, что при работе фильтров внутри цикла For loop форма сигналов на выходе не такая, как при простом включении фильтров, что видно на графиках.
Как сделать так, чтобы результаты работы обоих вариантов совпадали?

Это потому что фильтр имеет вход (init/cont (init:F) = True), т.е. он "пред-заполнен", содержит значения с предыдущего исполнения. Поставьте везде значение входа на False, и графики будут одинаковые (чтобы проверить это, двумерный массив на выходе цикла Фор Луп разложите на два одномерных, и сложите их - получите то же, что и на Вашем третьем графике).
Мы делили апельсин - много наших полегло...
User avatar
Kosist
leader
leader
 
Posts: 782
Joined: 21 Feb 2011, 23:44
Location: СумГУ
Medals: 2
Activity (1) Gold (1)
LabVIEW Version: 2013-2017
Karma: 236
CLAD I/O VIP students

Re: Использование фильтров в цикле For loop

Postby Borjomy_1 on 27 Apr 2017, 15:00

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

Вот вам вариант многополосного фильтра, сделанный на основе обычного баттерворда. Я брал и копировал содержимое Butterworth Filter.vi и его SubVI, добавив хранение коэффициентов фильтров и его состояний.
Attachments
мультиполосный баттерворд.png
Мультиполосный баттерворд (SubVI).vi
(26.08 KiB) Downloaded 44 times
Borjomy_1
expert
expert
 
Posts: 1765
Joined: 28 Jun 2012, 09:32
Location: город семи холмов
Medals: 3
Activity (1) Professionalism (1) Silver (1)
LabVIEW Version: 4-8.6,9-14
Karma: 309
VIP

Re: Использование фильтров в цикле For loop

Postby Alex Dem on 27 Apr 2017, 20:32

Kosist, поставил везде False, результаты совпали.
Borjomy_1, я правильно понял, что если использовать Ваш пример, тогда
не будет начальной задержки в работе фильтров, как при init/cont = False, так как информация для фильтров в кластерах будет передаваться между итерациями?
Спасибо, за Вашу помощь.
Alex Dem
junior
junior
 
Posts: 55
Joined: 06 May 2015, 22:24
LabVIEW Version: 2014
Karma: 7

Re: Использование фильтров в цикле For loop

Postby Borjomy_1 on 27 Apr 2017, 22:21

Задержка будет, но только на первой итерации цикла, обязательно надо ставить на инит фильтра условие "не равно 0" от индекса цикла. Тогда фильтр будет правильно проинициализирован при первом проходе. В вашей реализации фильтр в принципе работать не будет, поскольку максимум, на что он способен - это автоматически проинициализироваться при первом запуске (при значении init=true). Та часть, что у вас в цикле For Loop, проинициализируется только на первый диапазон. Поэтому, для получения адекватных результатов всегда явно инициализируйте фильтр, либо другую функцию со входом Init.
Обратите внимание еще на то, что фильтры инициализируются при False, в отличие от большинства других функций. Но у них в имени входа явно прописано условие: init:false. А вот Point To Point версии фильтров инициализируются как большинство, по true. Явная инициализация не требует особых затрат, однако это предупреждает всякие неприятные неожиданности.
Также рекомендую в случае HighPass или LowPass фильтров подавать значение граничной полосы на оба входа (High и Low). В таком случае ошибка подачи этого значения на незадействованный вход и использование значения 0.46 по умолчанию для задействованного исключается, это, кстати, всех касается :wink:
Borjomy_1
expert
expert
 
Posts: 1765
Joined: 28 Jun 2012, 09:32
Location: город семи холмов
Medals: 3
Activity (1) Professionalism (1) Silver (1)
LabVIEW Version: 4-8.6,9-14
Karma: 309
VIP

Re: Использование фильтров в цикле For loop

Postby Alex Dem on 29 Apr 2017, 07:44

Borjomy_1, на основе Вашего SubVI все работает как надо, спасибо.
Не могли бы Вы объяснить, зачем у Вас использован Type Cast? Я раньше никогда этим элементом не пользовался,
но на входе и на выходе из него одинаковые массивы, в чем смысл его применения?
Attachments
for2.png
Alex Dem
junior
junior
 
Posts: 55
Joined: 06 May 2015, 22:24
LabVIEW Version: 2014
Karma: 7


Return to Обработка сигнала

Who is online

Users browsing this forum: No registered users and 6 guests

cron