Страница 1 из 1

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

Добавлено: 27 мар 2018, 09:03
mr.Getsby
Здравствуйте!

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

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

Добавлено: 27 мар 2018, 09:27
Artem.spb
зависит от метода сборки.
В простейшем случае (если за каждый цикл получаете один элемент), то выходные тунели с автоиндексацией.
autoindex.png
autoindex.png (11.17 КБ) 3928 просмотров

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

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

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

Добавлено: 27 мар 2018, 15:33
Artem.spb
повторяю: всё зависит от метода сборки. Если надо просто последовательно склеить, то та же автоиндексация с конкатенацией, а если элементы соседних подмассивов обрабатываются (складываются, среднее и т.п.), то так не прокатит.
array.png

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

Добавлено: 27 мар 2018, 17:31
IvanLis
mr.Getsby писал(а):Здравствуйте!

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

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

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

Добавлено: 27 мар 2018, 21:19
mr.Getsby
IvanLis писал(а): :evil: у вас в профиле написано 2011 версия, а файл сделан в 2016 !

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

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

Добавлено: 28 мар 2018, 09:49
mr.Getsby
В самом коде нашёл ошибки... исправляю...

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

Добавлено: 28 мар 2018, 10:06
mr.Getsby
Уже что-то стало обрабатывать) это радует) но непонятно почему размерность массива после обработки увеличилась... исходный массив 1353х292 а после обработки выходит массив 17588х3212. Он увеличился пропорционально размером моего сдвигаемого окна 13х11...

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

Добавлено: 28 мар 2018, 10:08
mr.Getsby
Понял почему... у меня окно сдвигается не на размер окна а на один отсчёт... поэтому и размерность стала больше...

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

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

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

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

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

Добавлено: 28 мар 2018, 10:27
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

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

Добавлено: 28 мар 2018, 15:15
mr.Getsby
Разобрался. Можно было реализовать через shift регистр. И осуществлять замену сразу в исходном массиве. Всем спасибо! Вопрос больше не актуален..