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

Простейшие вопросы в области инженерной разработки
Ответить
mr.Getsby
interested
interested
Сообщения: 8
Зарегистрирован: 26 мар 2014, 21:27
Версия LabVIEW: 2016
Контактная информация:

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

Сообщение mr.Getsby »

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

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

Activity Автор
professor
professor
Сообщения: 3393
Зарегистрирован: 31 июл 2011, 23:05
Награды: 2
Версия LabVIEW: 12-18
Благодарил (а): 49 раз
Поблагодарили: 172 раза
Контактная информация:

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

Сообщение Artem.spb »

зависит от метода сборки.
В простейшем случае (если за каждый цикл получаете один элемент), то выходные тунели с автоиндексацией.
autoindex.png
autoindex.png (11.17 КБ) 3925 просмотров
mr.Getsby
interested
interested
Сообщения: 8
Зарегистрирован: 26 мар 2014, 21:27
Версия LabVIEW: 2016
Контактная информация:

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

Сообщение mr.Getsby »

Artem.spb писал(а):зависит от метода сборки.
В простейшем случае (если за каждый цикл получаете один элемент), то выходные тунели с автоиндексацией.
<!-- ia0 -->autoindex.png<!-- ia0 -->
А если за каждый цикл получается двумерный массив (как в моём случае), как тогда можно это сделать? Вопрос именно в этом...
Artem.spb

Activity Автор
professor
professor
Сообщения: 3393
Зарегистрирован: 31 июл 2011, 23:05
Награды: 2
Версия LabVIEW: 12-18
Благодарил (а): 49 раз
Поблагодарили: 172 раза
Контактная информация:

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

Сообщение Artem.spb »

повторяю: всё зависит от метода сборки. Если надо просто последовательно склеить, то та же автоиндексация с конкатенацией, а если элементы соседних подмассивов обрабатываются (складываются, среднее и т.п.), то так не прокатит.
array.png
Аватара пользователя
IvanLis

Activity Professionalism Tutorials Gold Man of the year 2012
Автор
guru
guru
Сообщения: 5462
Зарегистрирован: 02 дек 2009, 17:44
Награды: 7
Версия LabVIEW: 2015, 2016
Откуда: СССР
Благодарил (а): 28 раз
Поблагодарили: 86 раз

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

Сообщение IvanLis »

mr.Getsby писал(а):Здравствуйте!

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

Сейчас некогда разбираться в особенностях, но для свертки с ядром можно использовать уже готовую функцию 2D Convolution.
Посмотрите help (http://zone.ni.com/reference/en-XX/help ... nvolution/), наверняка Вам именно это и нужно, только "ядро свертки" правильно опишите.
mr.Getsby
interested
interested
Сообщения: 8
Зарегистрирован: 26 мар 2014, 21:27
Версия LabVIEW: 2016
Контактная информация:

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

Сообщение mr.Getsby »

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

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

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

Сообщение mr.Getsby »

В самом коде нашёл ошибки... исправляю...
mr.Getsby
interested
interested
Сообщения: 8
Зарегистрирован: 26 мар 2014, 21:27
Версия LabVIEW: 2016
Контактная информация:

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

Сообщение mr.Getsby »

Уже что-то стало обрабатывать) это радует) но непонятно почему размерность массива после обработки увеличилась... исходный массив 1353х292 а после обработки выходит массив 17588х3212. Он увеличился пропорционально размером моего сдвигаемого окна 13х11...
Вложения
Безымянный1.png
Безымянный.png
CFAR для ФРК.vi
(24.14 КБ) 79 скачиваний
mr.Getsby
interested
interested
Сообщения: 8
Зарегистрирован: 26 мар 2014, 21:27
Версия LabVIEW: 2016
Контактная информация:

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

Сообщение mr.Getsby »

Понял почему... у меня окно сдвигается не на размер окна а на один отсчёт... поэтому и размерность стала больше...
Аватара пользователя
IvanLis

Activity Professionalism Tutorials Gold Man of the year 2012
Автор
guru
guru
Сообщения: 5462
Зарегистрирован: 02 дек 2009, 17:44
Награды: 7
Версия LabVIEW: 2015, 2016
Откуда: СССР
Благодарил (а): 28 раз
Поблагодарили: 86 раз

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

Сообщение IvanLis »

mr.Getsby писал(а):Спасибо за ответ! Не совсем понял как тут использовать свёртку и что она даст??
Мне нужно просто посчитать средний уровень training cells и сравнить его с уровнем в красной ячейке.
Нужно внимательно почитать описание функции.
Результат вычисляется по формуле:
Изображение
Допустим вам нужно пройтись окном 3*3 для осреднения всех значений, тогда ядро будет размером 3*3, а значение его коэф. будет 1/9.
Например необходимо исключить центральный элемент, тогда приравниваем соответствующий коэф. "0", а остальные 1/9.
Посмотрите например: https://habrahabr.ru/post/142818/

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

Выкладывайте файл в более низкой версии (например 2010) со всеми заполненными значениями. Будет время постараюсь помочь.
mr.Getsby
interested
interested
Сообщения: 8
Зарегистрирован: 26 мар 2014, 21:27
Версия LabVIEW: 2016
Контактная информация:

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

Сообщение mr.Getsby »

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

Допустим вам нужно пройтись окном 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
Вложения
CFAR для ФРК.vi
(13.59 КБ) 96 скачиваний
Spectrogram (SubVI).vi
(11.64 КБ) 89 скачиваний
Блок - цветовая схема ДХ.vi
(13.17 КБ) 86 скачиваний
Блок расчёта видимого окна по задержке.vi
(8.06 КБ) 88 скачиваний
Блок чтения ионограммы.vi
(21.93 КБ) 83 скачивания
Обработка ФРК.vi
Файл запуска
(17.47 КБ) 85 скачиваний
mr.Getsby
interested
interested
Сообщения: 8
Зарегистрирован: 26 мар 2014, 21:27
Версия LabVIEW: 2016
Контактная информация:

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

Сообщение mr.Getsby »

Разобрался. Можно было реализовать через shift регистр. И осуществлять замену сразу в исходном массиве. Всем спасибо! Вопрос больше не актуален..
Вложения
Безымянный.png
Безымянный2.png
Ответить
  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Для чайников»