Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
0 / 0 / 0
Регистрация: 28.04.2009
Сообщений: 127

Найти логическое решение, чтобы отфильтровать шум

07.04.2019, 11:56. Показов 2522. Ответов 39
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Во вложении файл. Там график пульсации тока. Помогите найти логическое решение, чтобы отфильтровать шум.
Уже всю голову сломал, не могу найти решение. Мне даже не код нужен, я его напишу. Мне нужен алгоритм, как эту логику реализовать.
Миниатюры
Найти логическое решение, чтобы отфильтровать шум  
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
07.04.2019, 11:56
Ответы с готовыми решениями:

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

Отсеивать совпадения среди коллекций (Логическое решение)
Привет, Задача: Сверить определенный массив коллекций с остальными элементами массива этой же коллекции. Как пытаюсь решить. Есть...

Как отфильтровать текст чтобы с его момощью можно было назвать файл?
Вообщем есть переменная ,в ней есть текст в котором могут быть любые символы.Нужно отфильтровать текст так чтобы этим названием можно было...

39
 Аватар для Toros1992
899 / 554 / 275
Регистрация: 26.11.2015
Сообщений: 1,758
Записей в блоге: 2
07.04.2019, 12:06
У вас же на картинке все написано. Считать за шум все, что меньше 6
0
0 / 0 / 0
Регистрация: 28.04.2009
Сообщений: 127
07.04.2019, 12:36  [ТС]
Есть последовательность вершин. Какие-то выше, какие-то ниже. На рисунке наглядно я изобразил шум и вершины Мин и Макс, которые нужно получить.
Но вы попробуй последовательно перебрать все точки и написать алгоритм... Это с виду кажется так просто. Хотя может это для меня так сложно))))
0
 Аватар для aenye
304 / 186 / 45
Регистрация: 05.07.2018
Сообщений: 580
07.04.2019, 12:47
slavavs, Не совсем понятно, что именно будет принято за шум. Но в общем это делается через дискретизацию и квантование. Когда сигнал (или что у Вас) нормализован, тогда уже можно его вменяемо программно обработать. Например, засунуть в список значения, не являющиеся шумом, и сравнивать все значения из последовательности сигнала с этим списком. Все что совпадает - окей, что нет - шум.
0
0 / 0 / 0
Регистрация: 28.04.2009
Сообщений: 127
07.04.2019, 12:57  [ТС]
Я не понимаю что такое дискретизация и квантование, но комментарий ваш нравится)))
Есть большие пульсации (более 6 значений), и мелкие, менее 6 (это шум).
Основная проблема алгоритмировать эти точки (Мин и макс).Если точка Мин уже сформирована (при условии что график прошел вверх более 6 значений), то теперь нужно определить точку Макс (она будет сформирована при условии если график относительно нее пройдет вниз более 6 значений). Но все было бы просто, ЕСЛИ бы не было промежуточных значений, которые нужно отфильтровать (не учитывать).
Предположим, что первая точка Мин у нас сформировалась, теперь нужно получить Макс. Точка Макс образовывается выше значения 6, относительно Мин. Итак, вот образовывается Макс, график пошел вниз, но он не прошел 6 делений, и опять пошел вверх, далее превысил этот временный Макс, теперь мы игнорируем этот Макс и ищем новый...
0
 Аватар для samana
2639 / 1567 / 853
Регистрация: 23.02.2019
Сообщений: 3,876
07.04.2019, 12:58
Я не совсем понял, но вам нужно найти границу этого минимального 6? Тогда псевдокод:
var минимальное_6 = минимальное число из массива + 6;
исключить все элементы массива, которые меньше минимальное_6;
0
0 / 0 / 0
Регистрация: 28.04.2009
Сообщений: 127
07.04.2019, 13:20  [ТС]
не границу найти...
Во вложении файл. У меня есть массив всех значений по которым строится график. Моя задача получить на выходе массив (Чередование Мин и Макс) в котором будут исключены точки шумов. Должно остаться 12 точке (как по рис).
Миниатюры
Найти логическое решение, чтобы отфильтровать шум  
0
 Аватар для aenye
304 / 186 / 45
Регистрация: 05.07.2018
Сообщений: 580
07.04.2019, 13:32
slavavs, Можно положить значения Ваших точек в очередь. Первую достаем и запоминаем просто так. Вторую сравниваем с первой и т.д. Если 6 точек подряд одна больше другой или одна меньше другой, то последняя из них - новое значение мин/макс (экстремум). И так просто проходим всю очередь.

Добавлено через 8 минут
Так Вам и шум не надо будет намеренно отсеивать, он сам собой отпадет. У Вас просто будет переменная, хранящая каждое последующие изьятое значение из очереди, и счетчики кол-ва возрастающих/низпадающих значений.
0
0 / 0 / 0
Регистрация: 28.04.2009
Сообщений: 127
07.04.2019, 13:44  [ТС]
6 точек подряд не могут быть одна больше другой, они чередуются. Мы можем пройти вверх 6 единиц, потом вернуться на 4 опять пойти вверх но уже на 10 (например). Тогда предыдущее значение не может быть максимумом, его нужно исключить, так как не выполнилось событие - пройти вниз 6 и более интервалов...
Я говорю, задача с первого взгляда простая, но когда начинаешь вникать...)))
0
0 / 0 / 0
Регистрация: 28.04.2009
Сообщений: 127
07.04.2019, 13:48  [ТС]
Вот еще один пример
Миниатюры
Найти логическое решение, чтобы отфильтровать шум  
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16150 / 11271 / 2890
Регистрация: 21.04.2018
Сообщений: 33,142
Записей в блоге: 2
07.04.2019, 13:56
slavavs, прежде чем делать реализацию надо логически описать алгоритм. В Вашем случае всё очень не понятно. Вот если взять Ваш пример. Почему Вы отбросили 2 точки?


Скорее всего для определения локальных критических точек Вы (не явно) задаёте какой-то минимальный период.
Определитесь что это за период. И считайте для каждой точки в нём.
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16150 / 11271 / 2890
Регистрация: 21.04.2018
Сообщений: 33,142
Записей в блоге: 2
07.04.2019, 13:59
Цитата Сообщение от slavavs Посмотреть сообщение
Вот еще один пример
У Вас скорее всего два критерия для отсева шума: локальная критическая точка определятся в ближайшем периоде (надо определится с его значением), и её значение должно отлисаться от предыдущей более чем на 6 единиц.
0
0 / 0 / 0
Регистрация: 28.04.2009
Сообщений: 127
07.04.2019, 15:40  [ТС]
В последнем моем графическом примере я четко указал, почему точка Максимум была исключена. Для того чтобы в этом примере Максимум зафиксировался как МАКСИМУМ, график должен был пройти вниз не менее 6 делений.
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16150 / 11271 / 2890
Регистрация: 21.04.2018
Сообщений: 33,142
Записей в блоге: 2
07.04.2019, 15:58
slavavs, попробуйте такую реализацию
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
    IEnumerable<double> numbers = new double[] {/* Элементы поледовательности */ };
    int period = 10; // Размер периода
    double minDiff = 6; // Размер минимальной разницы 
 
    // Получение катриджей - индекс + значение
    IEnumerable<(int index, double numb)> numbersIndex = numbers.Select((n, i) => (index: i, numb: n));
 
    // Получение периодов в катриджах
    IEnumerable<(int index, double numb, IEnumerable<double> per)> numbIndPer =
            numbersIndex.Select(ni => (ni.index, ni.numb,
                numbersIndex
                .SkipWhile(nii => ni.index - nii.index < period)
                .TakeWhile(nii => nii.index - ni.index < period)
                .Select(nii => nii.numb)));
 
    // Получение локальных критических точек
    IEnumerable<(int index, double numb, int type)> numbIndLocCrit =
        numbIndPer
            .Select(nip => (nip.index, nip.numb, type: nip.numb == nip.per.Max() ? 1 : nip.numb == nip.per.Min() ? -1 : 0))
            .Where(nilc => nilc.type != 0);
 
    // Результирующий список
    List<(int index, double numb, int type)> result
        = new List<(int index, double numb, int type)>() { numbIndLocCrit.First() };
 
    foreach (var nils in numbIndLocCrit)
    {
        var last = result.Last();
        if (Math.Abs(last.numb - nils.numb) > minDiff)
            result.Add(nils);
    }
 
    Console.WriteLine("Локальные критические точки:");
    Console.WriteLine(string.Join
        (
            "\r\n",
            result.Select(nilc => (nilc.type > 0 ? "Максимум: " : "Минимум: ") + $"Индекс {nilc.index}, Значение {nilc.numb}")
        ));
1
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16150 / 11271 / 2890
Регистрация: 21.04.2018
Сообщений: 33,142
Записей в блоге: 2
07.04.2019, 16:07
Цитата Сообщение от slavavs Посмотреть сообщение
В последнем моем графическом примере я четко указал, почему точка Максимум была исключена. Для того чтобы в этом примере Максимум зафиксировался как МАКСИМУМ, график должен был пройти вниз не менее 6 делений.
Но есть же ещё мелкие колебания, их нужно отсеивать по периоду.

Добавлено через 8 минут
Цитата Сообщение от Элд Хасп Посмотреть сообщение
slavavs, попробуйте такую реализацию
Решение не проверял.
Если скините свой набор данных (нет желания его в ручную создавать) - проверю.
0
0 / 0 / 0
Регистрация: 28.04.2009
Сообщений: 127
07.04.2019, 16:27  [ТС]
Элд Хасп, загрузил кусок
Вложения
Тип файла: txt at1.txt (5.3 Кб, 3 просмотров)
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16150 / 11271 / 2890
Регистрация: 21.04.2018
Сообщений: 33,142
Записей в блоге: 2
07.04.2019, 16:58
Цитата Сообщение от slavavs Посмотреть сообщение
загрузил кусок
По таким данным простого решения не будет.
Посмотрите особенно конец последовательности. Колебания и большие и частые.
Здесь требуется более глубокий матанализ чем просто рассмотрение ближайших значений и максимальных колебаний.

P.S. Данные очень похожи на биржевые колебания.
0
0 / 0 / 0
Регистрация: 28.04.2009
Сообщений: 127
07.04.2019, 17:12  [ТС]
Это потребление тока на тяговой подстанции в зависимости от профиля пути и кол-ва поездов на фидерной трассе.
Для расчета максимальных пиковых нагрузок. Все равно спасибо за ваши комменты и потраченное время.
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16150 / 11271 / 2890
Регистрация: 21.04.2018
Сообщений: 33,142
Записей в блоге: 2
07.04.2019, 17:21
Цитата Сообщение от slavavs Посмотреть сообщение
Это потребление тока на тяговой подстанции в зависимости от профиля рынка и кол-ва поездов на фидерной трассе.
Вы конец присланных мне данных смотрели?
Что там является локальными критическими точками?

Или этих локальных экстремиумов будет очень много...
Миниатюры
Найти логическое решение, чтобы отфильтровать шум  
0
0 / 0 / 0
Регистрация: 28.04.2009
Сообщений: 127
07.04.2019, 17:27  [ТС]
Элд Хасп, а почему они там должны быть? там профиль ровный... Какая разница что в конце? Задача отсеять пульсации. Нет понятия локальные, не локальные. Если гр фик прошел вверх более 6 делений или более - минимум есть, прошел вниз 6 делений или более - максимум есть
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
07.04.2019, 17:27
Помогаю со студенческими работами здесь

Как отфильтровать вывод результата выполнения команды ipconfig, чтобы получить только IP-адрес?
Доброго времени суток, не подскажите, какой фильтр нужно использовались, чтобы отобразить только IP адрес?

Отфильтровать таблицу Выдача_книг так, чтобы остались читатели которые просрочили сдачу книг
Отфильтровать таблицу Выдача_книг так, что бы остались читатели которые просрочили сдачу книг. Добавлено через 6 минут Вот скрин...

Как сделать, чтобы метод возвращал логическое значение
Добрый день, господа форумчане. Пытаюсь сделать обработчик событий через if else, но что-то никак не получается, нужна Ваша помощь... Код...

Шум в районе процессора, а так же низко-частотный шум в наушниках
Исходит непонятный частотный шум в районе процессора. Прочел в интернете, что это либо катушки стабилизатора питания на материнской плате...

Шум в системе, После замены компрессора увеличился шум
После замены компрессора на фреоне R600a увеличился шум в системе-шипение ,булькание.Как можно бороться с этими дефектами ?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru