-
- Пропадание меандра - это 0? Или 1? Или отсутствие смены? - max(31.12.2024 00:38)
- Отсутствие смены. единичные выбросы на входе тоже не считаются. - Mty1(31.12.2024 00:43)
- Ну ёпта... Кол-во смен за нужное время и есть критерий. - max(31.12.2024 00:46)
- именно так я детектирую пропадание сети 220/50 (ниже указано) :-) - Лaгyнoв(31.12.2024 08:54)
- Да, спасибо. Оно. Кольцевой буфер + ситаем количество смен. Точно. - Mty1(31.12.2024 00:50)
- Вот видишь как все просто, когда правильно сформулирована задача. Мог бы и сам ;) - Codavr(31.12.2024 08:18)
- Вы лучше ознакомьте с природой этого сигнала. А то так можно гадать до посинения. - my504(31.12.2024 00:45)
- Ну ёпта... Кол-во смен за нужное время и есть критерий. - max(31.12.2024 00:46)
- Отсутствие смены. единичные выбросы на входе тоже не считаются. - Mty1(31.12.2024 00:43)
- А что ответы с использованием AI теперича под запретом? Я смотрю
ответы Бомжа удалили. Хорошо успел скопировать в ворд самый
интересный. AI технология нового технологического уклада - на
Сахаре под запретом? - Mty1(31.12.2024 00:35)
- Переместили, не надо спешить с выводами. enc(1 знак., 31.12.2024 00:41, ссылка)
- Отставить. Таймера нет. Ок, прерывание EXTI обнуляет счётчик. Прерывание системного таймера счётчик увеличивает. Если счётчик превысил 300 - алярм. LightElf(346 знак., 30.12.2024 16:21)
- Одноточечное Фурье. Причем по меандру. Практически так.
Заготавливаешь табличку IBAH(573 знак., 30.12.2024 15:37)
- Мдааа. Когда нибудь я наверное пойму что здесь написано. А что такое (!!PIN) дяденька IВАН ? - Mty1(30.12.2024 17:26)
- :) Клён уже предложил гораздо более продвинутый метод
математического решения исключительно ПЛЛД и БТИС наверное
отечественных производителей. А вы, Вы всё про
интегратор-компаратор :))) с наступайющим - bnb62(30.12.2024 15:47)
- Клен и предложил одноточечное фурье, только не объяснил как его
делать. - IBAH(30.12.2024 15:54)
- Да и вообще, что это такое. Может быть брат Сен Симона? - Kpoк(30.12.2024 18:02)
- Слишком тонкий юмор, них не понял... - IBAH(30.12.2024 18:24)
- Кроме известного в наших кругах основоположника рядов своего имени
Жана-Батиста Фурье (хотя какой в жопу ряд из одной точки?), есть
ещё Шарль Фурье (тоже некоторым из нас известный) - основоположник
научного коммунизма наряду Сен-Симоном и Робертом Оуэном. - Kpoк(30.12.2024 18:37)
- А мужики то не знают... Действительно, термин одноточечное
преобразование Фурье не снискал популярности (яндекс не находит),
но не трудно догадаться, что вместо вектора спектра мы получаем
одно значение координаты этого вектора, одну точку. То есть, в
формуле k не множество, а единственное значение. А Клен это вообще
называет "гетеродинированием в ноль" IBAH(1 знак., 30.12.2024 18:57, ссылка)
- Вот не надо выёбываться с терминами, и народ потянется. А тут ещё "Гетеродинирование в ноль". Оно может быть только при когерентных источнике и приёмнике. А если это не так, может быть просто имитировать АМ-радиоприёмник? - Kpoк(30.12.2024 19:00)
- А мужики то не знают... Действительно, термин одноточечное
преобразование Фурье не снискал популярности (яндекс не находит),
но не трудно догадаться, что вместо вектора спектра мы получаем
одно значение координаты этого вектора, одну точку. То есть, в
формуле k не множество, а единственное значение. А Клен это вообще
называет "гетеродинированием в ноль" IBAH(1 знак., 30.12.2024 18:57, ссылка)
- Похоже не на юмор а на вещества - Mty1(30.12.2024 18:27)
- Угу. Гранит это вещество называется. В своё время не надо было
пренебрегать. - Kpoк(30.12.2024 18:38)
- Снимаю шляпу. Да. А от комментария "Звук" Штирлиц тоже сможет отмазаться? Так сказать, что вещества тут не при чем? Mty1(1 знак., 31.12.2024 00:50, ссылка)
- Угу. Гранит это вещество называется. В своё время не надо было
пренебрегать. - Kpoк(30.12.2024 18:38)
- Кроме известного в наших кругах основоположника рядов своего имени
Жана-Батиста Фурье (хотя какой в жопу ряд из одной точки?), есть
ещё Шарль Фурье (тоже некоторым из нас известный) - основоположник
научного коммунизма наряду Сен-Симоном и Робертом Оуэном. - Kpoк(30.12.2024 18:37)
- Слишком тонкий юмор, них не понял... - IBAH(30.12.2024 18:24)
- Да и вообще, что это такое. Может быть брат Сен Симона? - Kpoк(30.12.2024 18:02)
- Клен и предложил одноточечное фурье, только не объяснил как его
делать. - IBAH(30.12.2024 15:54)
- Просто же. В прерывании обнуляешь инкрементальный счетчик, что в
ртос, что в систике, если он достиг критического потолка - твоих
300 мс. имеешь событие и ветвление. - bnb62(30.12.2024 13:26)
- В GPIO прерывании обнуляю cnt=0 , в systick делаю if( ++cnt == 300
){ // нет сигнала } ? но тогда единичное переключение даст что
сигнал появился. Не? - Mty1(30.12.2024 14:04)
- Наверное надо в EXTI делать if(cnt > 14) cnt-=14; а каждую 1ms
в systick делать cnt++ и анализировать if( cnt >300 ){
cnt=300; no_signal_flag =1 // нету сигнала } - Mty1(30.12.2024 14:12)
- EXTI Всегда предполагало внешнее воздействие на глубоко спящий алгоритм машины состояний, например вывод из максимального энергосбережения, когда уже кварцевый генератор выключен, система тактирования остановлена, процессор выключен, но часы реал тайм разве что на 32 кГц. тикают и тоже могут будить ядро по своим обособленным алгоритмам в собственной памяти программ. Ваше описание задачи не относится к режимам гибернации (наверное). И показалось баловливым. :))) - bnb62(30.12.2024 15:22)
- Наверное надо в EXTI делать if(cnt > 14) cnt-=14; а каждую 1ms
в systick делать cnt++ и анализировать if( cnt >300 ){
cnt=300; no_signal_flag =1 // нету сигнала } - Mty1(30.12.2024 14:12)
- В GPIO прерывании обнуляю cnt=0 , в systick делаю if( ++cnt == 300
){ // нет сигнала } ? но тогда единичное переключение даст что
сигнал появился. Не? - Mty1(30.12.2024 14:04)
- Не нужен кольцевой буфер. Достаточно скользящей средней суммы.
Через каждые 1 мс если вход = 1, то прибавляем 1 к сумме до
достижения ей какого-то определенного верхнего уровня (скажем
количество тиков за 1,5-2-3 периода), если на входе 0, то уменьшаем
на 1 вплоть до нуля. И делаем сравнение с пороговыми уровнями. Если
выше верхнего порога, то значит меандр превратился в устойчивое
состояние 1. Если ниже нижнего уровня, то значит "застрял" в
устойчивом состоянии 0. reZident(186 знак., 30.12.2024 12:53)
- Да, полезно, спасибо. Сумма должна быть именно по скользящему окну,
т.е. сумма скажем по последней секунде, верно? Т.е. должен быть
буфер со значениями и со скользящим окном? Ведь на входе может быть
не 50% меандр и набежит ошибка если использовать 1 переменную. - Mty1(30.12.2024 13:55)
- Скользящее окно вы имеете в виду промежуточные значения? Нет, не
обязательно. Сумма и так будет отображать среднее значение. Если
меандр не 50%, то сумма будет выше или ниже среднего, но все равно
попадать в окно значений для порогов отсечки сигнала. Аналогом
этого алгоритма можно считать дифференциальный дискриминатор. Если
среднее значение болтается между двумя порогами, то результат =
"норма", если же вылетает выше или ниже, то результат = "авария 1"
или = "авария reZident(156 знак., 30.12.2024 15:40, картинка)
- Спасибо за пояснения, уточню. Предположим у меня сумма uint8_t
summ=255, я каждую миллисекунду прибавляю или вычитаю по 1 не
выходя за пределы 0...255 Предположим у меня скважность меньше 50%
- сумма будет меняться (если построить график) как "треугольный"
сигнал 0..6 6...0 единиц каждые 12 мс. Если скважность больше 50% -
треугольный график поползет не спеша вверх, пока не упрется в 255
своей верхней частью. Где поймать пороги для детектирования я не
совсем понимаю? - Mty1(30.12.2024 17:47)
- Куда/почему поползет? Даже при 50% меандре у вас среднее будет
"болтаться" возле середины +/- 1 отсчет, т.к. период сигнала не
кратен периодичности отсчетов (12,5мс vs 1мс). Используйте уж тогда
знаковую арифметику для наглядности. Пороговыми значениями у вас
будут числа -10 и +10 (1,5 полупериода входного сигнала). А
предельными можно назначить, например, -19 и +19 (3 полупериода
входного сигнала). Если сумма в пределах +/-10, то сигнал есть,
если больше или меньше, то reZident(78 знак., 30.12.2024 18:45)
- Я имел в виду вот что. Предположим для простоты что период 12мс. Если скважность 50% (6мс+6мс)то все норм. А если сигнал 5мс=0 и 7мс=1 ? Сумма поползет вверх к значению 255, верно? - Mty1(31.12.2024 00:51)
- P.S. а, понял в чем загвоздка! При появлении сигнала (после того как он пропадал) нужно ограничить изменение суммы (только +1 или только -1) пока ее значение нуль не пересечет. - reZident(30.12.2024 18:56)
- Куда/почему поползет? Даже при 50% меандре у вас среднее будет
"болтаться" возле середины +/- 1 отсчет, т.к. период сигнала не
кратен периодичности отсчетов (12,5мс vs 1мс). Используйте уж тогда
знаковую арифметику для наглядности. Пороговыми значениями у вас
будут числа -10 и +10 (1,5 полупериода входного сигнала). А
предельными можно назначить, например, -19 и +19 (3 полупериода
входного сигнала). Если сумма в пределах +/-10, то сигнал есть,
если больше или меньше, то reZident(78 знак., 30.12.2024 18:45)
- Спасибо за пояснения, уточню. Предположим у меня сумма uint8_t
summ=255, я каждую миллисекунду прибавляю или вычитаю по 1 не
выходя за пределы 0...255 Предположим у меня скважность меньше 50%
- сумма будет меняться (если построить график) как "треугольный"
сигнал 0..6 6...0 единиц каждые 12 мс. Если скважность больше 50% -
треугольный график поползет не спеша вверх, пока не упрется в 255
своей верхней частью. Где поймать пороги для детектирования я не
совсем понимаю? - Mty1(30.12.2024 17:47)
- Скользящее окно вы имеете в виду промежуточные значения? Нет, не
обязательно. Сумма и так будет отображать среднее значение. Если
меандр не 50%, то сумма будет выше или ниже среднего, но все равно
попадать в окно значений для порогов отсечки сигнала. Аналогом
этого алгоритма можно считать дифференциальный дискриминатор. Если
среднее значение болтается между двумя порогами, то результат =
"норма", если же вылетает выше или ниже, то результат = "авария 1"
или = "авария reZident(156 знак., 30.12.2024 15:40, картинка)
- Да, полезно, спасибо. Сумма должна быть именно по скользящему окну,
т.е. сумма скажем по последней секунде, верно? Т.е. должен быть
буфер со значениями и со скользящим окном? Ведь на входе может быть
не 50% меандр и набежит ошибка если использовать 1 переменную. - Mty1(30.12.2024 13:55)
- С использованием аппаратного таймера измерять ширину импульса. - Cкpипaч(30.12.2024 10:31)
- Хорошая идея, спасибо. Посмотрю, есть ли на этой ноге таймер. - Mty1(30.12.2024 11:01)
- Да, есть TIM9_CH2. Надо обдумать идею. - Mty1(30.12.2024 11:17)
- я бы не стал напрямую измерять длительность импульса, насколько
понимаю о точности входного сигнала речи не идет. Разбиваем ширину
импульса на кванты с учетом необходимой точности фиксации
наличия-отсутсвия далее считаем кванты и делаем выводы - Aleksey_75(30.12.2024 11:10)
- В пределе получим "метод Лагунова". Таймер это один вызов прерывания на один импульс, кванты - один на квант. - Cкpипaч(30.12.2024 11:24)
- Хорошая идея, спасибо. Посмотрю, есть ли на этой ноге таймер. - Mty1(30.12.2024 11:01)
- Звук! - Kpoк(30.12.2024 08:35)
- Ну вот как я определяю пропадание 50 Гц на ноге stm32 с тиком 1
мсек. Есть признак "1" и "0" на выводе. Они должны чередоваться .
Каждые 10 мсек. Если "1" или "0" зависли на время бОльшее чем 1
период (у меня 30 мсек) - пропал меандр. Это я делаю в прерывании
systick. - Лaгyнoв(30.12.2024 07:13)
- Просто и эффективно, думаю то что надо, спасибо! - Mty1(30.12.2024 11:02)
- Вы же вроде бы хотели точность 10%? - Cкpипaч(30.12.2024 11:03)
- Думаю можно расширить пределы до 20% - Mty1(30.12.2024 11:09)
- Вы же вроде бы хотели точность 10%? - Cкpипaч(30.12.2024 11:03)
- Просто и эффективно, думаю то что надо, спасибо! - Mty1(30.12.2024 11:02)
- древний стандартный селектор импульсов - "оцифровываешь сигнал со
сдвигом 90 градусов - то есть квадратурно" что эквивалентно
цифровому гетеродинирования в ноль. если частота априрно изветгна =
80Гц то и фильровать ничего не нало - есть сигнал хотя бы на одном
из выходов - значит есть пилот тон. нет - то значит тишина.
Преплетать FreeRTOS не нужно - тамером сделать 80Гц и от него через
DMA грабить вход. разве не хорошо так будет? - klen(30.12.2024 00:29)
- Прикольный способ, интересно. Только смущает что если частота чуть
чуть не совпадет на выходах будут биения. Как отличить НЧ биения от
более высокочастотных не очень понятно. Вообще способ интересный,
надо запомнить на будущее. - Mty1(30.12.2024 11:02)
- Никаких биений не будет Michael75(771 знак., 30.12.2024 18:28)
- Все так, но есть нюанс. Из-за бинарного меандра невозможно сделать
антиалиасинг и потому будут открытыми для детектирования все высшие
зоны Найквиста, так что придется семплить раз в 16 выше искомого
спектра. К тому же надо контролировать еще и пару четных гармоник
по минимуму, патамушта было требование именно меандра. Такшта три
точки ДПФ точно потребуются (80, 160 и 320). Причем честных. - my504(30.12.2024 19:15)
- Вы правы, приёмник, обработка сигналов в котором ведётся как я описал, будет иметь паразитные каналы приёма на гармониках 80 Гц Michael75(280 знак., 30.12.2024 21:35)
- Все так, но есть нюанс. Из-за бинарного меандра невозможно сделать
антиалиасинг и потому будут открытыми для детектирования все высшие
зоны Найквиста, так что придется семплить раз в 16 выше искомого
спектра. К тому же надо контролировать еще и пару четных гармоник
по минимуму, патамушта было требование именно меандра. Такшта три
точки ДПФ точно потребуются (80, 160 и 320). Причем честных. - my504(30.12.2024 19:15)
- Никаких биений не будет Michael75(771 знак., 30.12.2024 18:28)
- Прикольный способ, интересно. Только смущает что если частота чуть
чуть не совпадет на выходах будут биения. Как отличить НЧ биения от
более высокочастотных не очень понятно. Вообще способ интересный,
надо запомнить на будущее. - Mty1(30.12.2024 11:02)
- Пропадание меандра - это 0? Или 1? Или отсутствие смены? - max(31.12.2024 00:38)