Работа с массивами

Простейшие вопросы в области инженерной разработки

Работа с массивами

Postby mr.Getsby on 27 Mar 2018, 09:03

Здравствуйте!

Помогите пожалуйста разобраться с одним вопросиком:
Есть двумерный массив. Нужно выделить отсчёты сигнала и убрать шум. Для этого я решил использовать алгоритм CFAR. В этом случае выделяется двумерный массив меньшего размера (рисунок приложил к сообщению), задаются защитные ячейки и ячейка которая находится в центре этого массива, проверяется на наличие в ней сигнала. И так этим массивом (окном) нужно пробежаться по всему исходному массиву. Я реализовал это через двойной For Loop, но сейчас проблема в том, как мне собрать из этих массивов исходный массив?
Attachments
xxCFARDetector2D.png
Безымянный.png
CFAR для ФРК.vi
(17.88 KiB) Downloaded 28 times
mr.Getsby
interested
interested
 
Posts: 8
Joined: 26 Mar 2014, 21:27
LabVIEW Version: 2016
Karma: 0

Re: Работа с массивами

Postby Artem.spb on 27 Mar 2018, 09:27

зависит от метода сборки.
В простейшем случае (если за каждый цикл получаете один элемент), то выходные тунели с автоиндексацией.
autoindex.png
autoindex.png (11.17 KiB) Viewed 1297 times
Artem.spb
expert
expert
 
Posts: 1394
Joined: 31 Jul 2011, 23:05
Medals: 2
Activity (1) Автор (1)
LabVIEW Version: 12,14,15
Karma: 239
CLD hardware I/O VIP freelance

Re: Работа с массивами

Postby mr.Getsby on 27 Mar 2018, 15:18

Artem.spb wrote:зависит от метода сборки.
В простейшем случае (если за каждый цикл получаете один элемент), то выходные тунели с автоиндексацией.
<!-- ia0 -->autoindex.png<!-- ia0 -->
А если за каждый цикл получается двумерный массив (как в моём случае), как тогда можно это сделать? Вопрос именно в этом...
mr.Getsby
interested
interested
 
Posts: 8
Joined: 26 Mar 2014, 21:27
LabVIEW Version: 2016
Karma: 0

Re: Работа с массивами

Postby Artem.spb on 27 Mar 2018, 15:33

повторяю: всё зависит от метода сборки. Если надо просто последовательно склеить, то та же автоиндексация с конкатенацией, а если элементы соседних подмассивов обрабатываются (складываются, среднее и т.п.), то так не прокатит.
array.png
Artem.spb
expert
expert
 
Posts: 1394
Joined: 31 Jul 2011, 23:05
Medals: 2
Activity (1) Автор (1)
LabVIEW Version: 12,14,15
Karma: 239
CLD hardware I/O VIP freelance

Re: Работа с массивами

Postby IvanLis on 27 Mar 2018, 17:31

mr.Getsby wrote:Здравствуйте!

Помогите пожалуйста разобраться с одним вопросиком:
Есть двумерный массив. Нужно выделить отсчёты сигнала и убрать шум. Для этого я решил использовать алгоритм CFAR. В этом случае выделяется двумерный массив меньшего размера (рисунок приложил к сообщению), задаются защитные ячейки и ячейка которая находится в центре этого массива, проверяется на наличие в ней сигнала. И так этим массивом (окном) нужно пробежаться по всему исходному массиву. Я реализовал это через двойной For Loop, но сейчас проблема в том, как мне собрать из этих массивов исходный массив?


:evil: у вас в профиле написано 2011 версия, а файл сделан в 2016 !

Сейчас некогда разбираться в особенностях, но для свертки с ядром можно использовать уже готовую функцию 2D Convolution.
Посмотрите help (http://zone.ni.com/reference/en-XX/help ... nvolution/), наверняка Вам именно это и нужно, только "ядро свертки" правильно опишите.
User avatar
IvanLis
professor
professor
 
Posts: 4625
Joined: 02 Dec 2009, 17:44
Location: СССР
Medals: 7
Activity (2) Professionalism (1) Tutorials (1) Gold (1) Man of the year 2012 (1)
Автор (1)
LabVIEW Version: 2010
Karma: 727
hardware VIP bloggers teachers

Re: Работа с массивами

Postby mr.Getsby on 27 Mar 2018, 21:19

IvanLis wrote: :evil: у вас в профиле написано 2011 версия, а файл сделан в 2016 !

Сейчас некогда разбираться в особенностях, но для свертки с ядром можно использовать уже готовую функцию 2D Convolution.
Посмотрите help, наверняка Вам именно это и нужно, только "ядро свертки" правильно опишите.

Спасибо за ответ! Не совсем понял как тут использовать свёртку и что она даст??
Мне нужно просто посчитать средний уровень training cells и сравнить его с уровнем в красной ячейке. Если этот уровень выше, то значит что в красной ячейке сигнал и мы его оставляем. Если уровень ниже, то значению этой ячейки присваиваем 1. К примеру мой исходный массив размером 1024x1024. А моё окно всего лишь 11x13. И этим окном нужно пробежаться по всему массиву 1024x1024 и сравнить каждую ячейки со средним уровнем training cells. В принципе задача то не очень сложная... и я уже это сравнение и принятие решения реализовал... но вернуться снова к массиву 1024x1024 проблема... пробовал сделать по совету Artem.spb. Labview выдал ошибку "memory full". Очень затратная операция получается....
mr.Getsby
interested
interested
 
Posts: 8
Joined: 26 Mar 2014, 21:27
LabVIEW Version: 2016
Karma: 0

Re: Работа с массивами

Postby mr.Getsby on 28 Mar 2018, 09:49

В самом коде нашёл ошибки... исправляю...
mr.Getsby
interested
interested
 
Posts: 8
Joined: 26 Mar 2014, 21:27
LabVIEW Version: 2016
Karma: 0

Re: Работа с массивами

Postby mr.Getsby on 28 Mar 2018, 10:06

Уже что-то стало обрабатывать) это радует) но непонятно почему размерность массива после обработки увеличилась... исходный массив 1353х292 а после обработки выходит массив 17588х3212. Он увеличился пропорционально размером моего сдвигаемого окна 13х11...
Attachments
Безымянный1.png
Безымянный.png
CFAR для ФРК.vi
(24.14 KiB) Downloaded 26 times
mr.Getsby
interested
interested
 
Posts: 8
Joined: 26 Mar 2014, 21:27
LabVIEW Version: 2016
Karma: 0

Re: Работа с массивами

Postby mr.Getsby on 28 Mar 2018, 10:08

Понял почему... у меня окно сдвигается не на размер окна а на один отсчёт... поэтому и размерность стала больше...
mr.Getsby
interested
interested
 
Posts: 8
Joined: 26 Mar 2014, 21:27
LabVIEW Version: 2016
Karma: 0

Re: Работа с массивами

Postby IvanLis on 28 Mar 2018, 10:09

mr.Getsby wrote:Спасибо за ответ! Не совсем понял как тут использовать свёртку и что она даст??
Мне нужно просто посчитать средний уровень training cells и сравнить его с уровнем в красной ячейке.

Нужно внимательно почитать описание функции.
Результат вычисляется по формуле:
Image
Допустим вам нужно пройтись окном 3*3 для осреднения всех значений, тогда ядро будет размером 3*3, а значение его коэф. будет 1/9.
Например необходимо исключить центральный элемент, тогда приравниваем соответствующий коэф. "0", а остальные 1/9.
Посмотрите например: https://habrahabr.ru/post/142818/

В результате свертки получится 2D массив со средними значениями.
Потом останется их сравнить и принять решение.

Выкладывайте файл в более низкой версии (например 2010) со всеми заполненными значениями. Будет время постараюсь помочь.
User avatar
IvanLis
professor
professor
 
Posts: 4625
Joined: 02 Dec 2009, 17:44
Location: СССР
Medals: 7
Activity (2) Professionalism (1) Tutorials (1) Gold (1) Man of the year 2012 (1)
Автор (1)
LabVIEW Version: 2010
Karma: 727
hardware VIP bloggers teachers

Re: Работа с массивами

Postby mr.Getsby on 28 Mar 2018, 10:27

IvanLis wrote:Нужно внимательно почитать описание функции.

Допустим вам нужно пройтись окном 3*3 для осреднения всех значений, тогда ядро будет размером 3*3, а значение его коэф. будет 1/9.
Например необходимо исключить центральный элемент, тогда приравниваем соответствующий коэф. "0", а остальные 1/9.

В результате свертки получится 2D массив со средними значениями.
Потом останется их сравнить и принять решение.

Выкладывайте файл в более низкой версии (например 2010) со всеми заполненными значениями. Будет время постараюсь помочь.

Ну это более сложный вариант... Я просто с помощью Delete from array вытащил нужные мне отсчёты и посчитал их среднее. Сложность была в том что есть ещё защитные ячейки, которые не должны вносить вклад в среднее. Они выделены жёлтым на рисунке, который я приводил в первом сообщении.. Поэтому я решил просто порезать массив на два с помощью Delete from array.
В принципе наверное можно попробовать сделать простую децимацию... чтобы вернуться к исходной размерности... но это какой-то костыль получится..
Пересохранил все программы в 2010 версии.. вот только исходный файл для обработки сюда приложить не смог, потому что он весит 70 Мб. Залил на yandex disk
https://yadi.sk/d/qWoI8Bsf3Tq5Gy
Attachments
CFAR для ФРК.vi
(13.59 KiB) Downloaded 30 times
Spectrogram (SubVI).vi
(11.64 KiB) Downloaded 30 times
Блок - цветовая схема ДХ.vi
(13.17 KiB) Downloaded 27 times
Блок расчёта видимого окна по задержке.vi
(8.06 KiB) Downloaded 26 times
Блок чтения ионограммы.vi
(21.93 KiB) Downloaded 28 times
Обработка ФРК.vi
Файл запуска
(17.47 KiB) Downloaded 26 times
mr.Getsby
interested
interested
 
Posts: 8
Joined: 26 Mar 2014, 21:27
LabVIEW Version: 2016
Karma: 0

Re: Работа с массивами

Postby mr.Getsby on 28 Mar 2018, 15:15

Разобрался. Можно было реализовать через shift регистр. И осуществлять замену сразу в исходном массиве. Всем спасибо! Вопрос больше не актуален..
Attachments
Безымянный.png
Безымянный2.png
mr.Getsby
interested
interested
 
Posts: 8
Joined: 26 Mar 2014, 21:27
LabVIEW Version: 2016
Karma: 0


Return to Для чайников

Who is online

Users browsing this forum: Baidu and 13 guests

cron