-
- так же есть недорогая программа для dsPIC - max(26.03.2018 11:09, ссылка)
- Вот сайт по расчету онлайн, но сам правда не пробовал. - max(26.03.2018 11:07, ссылка)
- Использую с незапамятных времен Nuhertz filter solutions. И всем рекомендую. Берем на торрентах с лекарством. На попроб дают фряшный триал. - Codavr(26.03.2018 08:20, ссылка)
- Не хотелось углубляться в воспоминания что там и почему, но без этого не получается. Покритикуйте мои рассуждения. AlexBi_(2369 знак., 25.03.2018 12:05, )
- WinFilter я использовал лишь для "рыбы" Си. Его целочисленные коэффициенты практически не работают, чаще всего вызывают переполнение аккумулятора. Nikolay_Po(4118 знак., 25.03.2018 20:09 - 26.03.2018 01:50)
- Делайте полифазный КИХ фильтр на 400 тапов в формате с фиксированной запятой разрядностью 16 бит и коэффициентом децимации равным 50. Этого должно хватить. :) Хаос(108 знак., 25.03.2018 13:08, )
- Какой порядок фильтра нужен? - argus98(12.03.2018 11:38)
- Наверное второго должно хватить. Но если получится по скорости, то можно и выше. - AlexBi(12.03.2018 11:52)
- Держи удобоваримую для вычислений формулу ПФ-2 argus98(97 знак., 12.03.2018 16:01)
- Фильтр второго порядка можно посчитать на любом калькуляторе. Формулы для частоты и полосы пропускания есть в книге А.Б.Сергиенко, "ЦОС", стр 236. - Хаос(12.03.2018 12:17, )
- Наверное второго должно хватить. Но если получится по скорости, то можно и выше. - AlexBi(12.03.2018 11:52)
- Смотреть в сторону применения хрени типа stm32f4xx с аппаратным блоком плавучки и winfilter с даблами.Результат можно прям сразу запускать на процессоре.Отдельная песня с применением фильтра Бесселя.Матлаб его вообще игнорирует по причине plainuser(1732 знак., 12.03.2018 08:04 - 08:10)
- Делал для ЭКГ фильтр на 50Гц +/-0,5Гц подавление около 50 ДБ, в целых числах на PIC16. Основной принцип - текущий отсчет АЦП сложить с отсчетом, который был ровно 10мС назад и поделить на два. Недостаток - надо озу на 10 мС семплов. Результат driver_gv(89 знак., 11.03.2018 23:55, картинка)
- Спасибо! Бывает что нужен не собственно фильтр, а обработка для очистки сигнала от шумов - тогда вариантов колхозить множество. - De_User(12.03.2018 00:32 - 00:35)
- С конца 90х пользуемся QED... он особо и не изменился с тех пор... - sav6622(11.03.2018 21:09)
- Вопрос делится на три части: алгоритм самой фильтрации, откуда брать коэффициенты, и как использовать целочисленную арифметику. Ниже пример самого примитивного БИХ-фильтра, дающий ответ на первые два вопроса. С целочисленной арифметикой просто йцукен(1066 знак., 11.03.2018 17:25 - 17:28, ссылка)
- А смысл? Вкорячить самолепную плывучку с 16 бит мантиссой и 16 бит экспонентой(чтобы ничо не приснилось, да и знаки туда можно упихать). 32 бит целочисленки точно не хватит. - mse homjak(11.03.2018 22:14)
- Поскольку ТС по традиции не указал ни частоту дискретизации, ни архитектуру своего процессора, я, как и все, блудю впотьмах. Однако предыдущий опыт подсказывает мне, что мантиссы 16 бит маловато будет. - йцукен(11.03.2018 22:38)
- Частота дискретизации не более 10кГц (быстрее наверное не успеет), на входе RC фильтр на 1кГц. Процессор PIC24 с аппаратным умножителем 16х16. На 500Гц и далее желательно иметь подавление в 100 раз. AlexBi(393 знак., 12.03.2018 11:46)
- Блин, я думал, вам режекторный фильтр на 50 Гц нужен, а тут вот оно как... Чтобы выделить из сигнала одну частоту, фильтр вообще не нужен, нужен синхронный детектор. И ещё совет - если возможно, не измеряйте ничего на частоте 50 Гц, измеряйте на йцукен(11 знак., 12.03.2018 14:38)
- Обоснуй. - max(25.03.2018 12:19)
- Даже не знаю, с чего начать. Синхронный детектор требует меньше вычислений: 2 умножения и 2 сложения на отсчёт. После фильтра всё равно нужно как-то оценивать амплитуду, а тут мы сразу получаем амплитуду (и фазу, если нужно). Синхронный детектор йцукен(113 знак., 25.03.2018 13:17)
- Как можно математически "подружить" синхронный детектор с сигналом у которого частота известна с точностью, например, ±2% и произвольная фаза (до начала фильтрации)? - De_User(25.03.2018 17:53 - 18:00)
- Если частота заранее неизвестна, гуглите digital PLL. Если известна - фазу знать не нужно, умножайте на синус и косинус, и накапливайте отдельно, амплитуду получите как корень из суммы квадратов. - йцукен(25.03.2018 18:33)
- Спасибо! Т.е. умножение "задавит" все остальные посторонние частоты, как в синусном, так и в косинусном накопителях? - De_User(25.03.2018 19:29)
- Не совсем так. Когда мы перемножаем синусы двух частот, у нас в полном соответствии с известным тригонометрическим тождеством на выходе получатся суммарная и разностная частота. Ненулевые частоты подавляются последующим усреднением. - йцукен(25.03.2018 19:50)
- Усреднение - это простое суммирование? Т.е. накопили 256 отсчётов и сдвинули на один байт вправо. - De_User(25.03.2018 20:49)
- В простейшем случае - да. Это соответствует прямоугольному окну. Главное достоинство прямоугольного окна - на 1 умножать легко и приятно, приятнее только на 0. Недостаток - очень медленно убывающие боковые лепестки. Соответственно придумана куча йцукен(72 знак., 25.03.2018 21:30, ссылка)
- Спасибо! Ссылку в закладки, супер мега полезная! - De_User(25.03.2018 22:30, ссылка)
- В простейшем случае - да. Это соответствует прямоугольному окну. Главное достоинство прямоугольного окна - на 1 умножать легко и приятно, приятнее только на 0. Недостаток - очень медленно убывающие боковые лепестки. Соответственно придумана куча йцукен(72 знак., 25.03.2018 21:30, ссылка)
- Усреднение - это простое суммирование? Т.е. накопили 256 отсчётов и сдвинули на один байт вправо. - De_User(25.03.2018 20:49)
- Не совсем так. Когда мы перемножаем синусы двух частот, у нас в полном соответствии с известным тригонометрическим тождеством на выходе получатся суммарная и разностная частота. Ненулевые частоты подавляются последующим усреднением. - йцукен(25.03.2018 19:50)
- Спасибо! Т.е. умножение "задавит" все остальные посторонние частоты, как в синусном, так и в косинусном накопителях? - De_User(25.03.2018 19:29)
- Если частота заранее неизвестна, гуглите digital PLL. Если известна - фазу знать не нужно, умножайте на синус и косинус, и накапливайте отдельно, амплитуду получите как корень из суммы квадратов. - йцукен(25.03.2018 18:33)
- Да я про "только не на 50Гц"... - max(25.03.2018 17:10)
- Подразумевается целое число периодов за цикл измерения, как в алгоритме им. АОНа ? - fk0(25.03.2018 15:42)
- Когда мы умножаем частоту на неё саму, у нас поручается нулевая частота плюс удвоенная. Если мы не используем окно, или, что то же самое, окно у нас прямоугольное, выгодно взять интервал измерения равным целому числу периодов удвоенной частоты, йцукен(76 знак., 25.03.2018 16:40)
- Если "умножаем с окном", то предыдущий тезис - "требует меньше вычислений: 2 умножения и 2 сложения на отсчёт" уже не верен.. :) - Хаос(25.03.2018 17:43, )
- Если синус и косинус брать из таблицы, они там могут лежать уже с окном. - йцукен(25.03.2018 18:35)
- И мы тут же получаем комплексный фильтр с КИХ равной длине окна.. - Хаос(25.03.2018 19:08, )
- Математически - да, но я бы не использовал в данном случае слово фильтр. Оно как бы подразумевает, что частота сигнала не меняется, а меняется амплитуда и/или фаза. А смысл синхронного детектора состоит именно в переносе частоты сигнала на нулевую. - йцукен(25.03.2018 19:54)
- Кстати, про математику. Хаос(939 знак., 25.03.2018 20:55, )
- На PIC24 у меня КИХ-фильтры не получались. Нет SIMD. Получается очень медленно. С той же загрузкой ЦПУ БИХ-фильтры дают лучшие результаты. - Nikolay_Po(25.03.2018 21:19)
- У человека 50Гц. Я делал КИХ ППФ-50Гц на меге48. Она ещо покурить успевала. - mse homjak(25.03.2018 23:33)
- Мне просто недостаёт мастерства. На ассемблере? Впрочем, при хорошем компиляторе разницы C vs Asm может и не быть. Nikolay_Po(229 знак., 25.03.2018 23:40)
- БИХ фильтры не дают линейную ФЧХ. Ваш, КО.. - Хаос(25.03.2018 23:01, )
- Спасибо, капитан! Когда нет необходимости в фазолинейности, я про эту возможность КИХ забываю. Но ТС не запрашивал фазовой линейности, вроде. В любом случае, фильтр на 400 коэффициентов, работающий на 10кГц, PIC24F не под силу. Nikolay_Po(193 знак., 25.03.2018 23:32)
- Неужели, PIC настолько слаб, что не осилит 800*200 = 160000 арифметических операций в секунду? Это же какие-то жалкие 0,16 MIPS.. Я в шоке!.. :) - Хаос(26.03.2018 04:35, )
- Может, я слаб в вопросах ЦОС (без срказма)? Смотрел реализации FIR в библиотеках dsPIC - там фильтр считался "в лоб". На каждый отсчёт умножение и сумма. У ТС контроллер ещё проще, не dsPIC. 10000*400*3=16MIPS минимум, а то и 24. Nikolay_Po(553 знак., 26.03.2018 07:43 - 07:48)
- Нет смысла считать семплы на выходе КИХ фильтра 10 тысяч раз в секунду, если заранее известно, что из 10 тысяч выходных семплов 9800 семплов на выходе фильтра будут потом просто отброшены как ненужные. Хаос(462 знак., 26.03.2018 08:22, )
- Тьфу, блин... Гениально! На лекциях этот факт казался мне настолько очевидным, что даже не запомнил :( Спасибо, КО! - Nikolay_Po(26.03.2018 10:26)
- Нет смысла считать семплы на выходе КИХ фильтра 10 тысяч раз в секунду, если заранее известно, что из 10 тысяч выходных семплов 9800 семплов на выходе фильтра будут потом просто отброшены как ненужные. Хаос(462 знак., 26.03.2018 08:22, )
- Может, я слаб в вопросах ЦОС (без срказма)? Смотрел реализации FIR в библиотеках dsPIC - там фильтр считался "в лоб". На каждый отсчёт умножение и сумма. У ТС контроллер ещё проще, не dsPIC. 10000*400*3=16MIPS минимум, а то и 24. Nikolay_Po(553 знак., 26.03.2018 07:43 - 07:48)
- Неужели, PIC настолько слаб, что не осилит 800*200 = 160000 арифметических операций в секунду? Это же какие-то жалкие 0,16 MIPS.. Я в шоке!.. :) - Хаос(26.03.2018 04:35, )
- Спасибо, капитан! Когда нет необходимости в фазолинейности, я про эту возможность КИХ забываю. Но ТС не запрашивал фазовой линейности, вроде. В любом случае, фильтр на 400 коэффициентов, работающий на 10кГц, PIC24F не под силу. Nikolay_Po(193 знак., 25.03.2018 23:32)
- У человека 50Гц. Я делал КИХ ППФ-50Гц на меге48. Она ещо покурить успевала. - mse homjak(25.03.2018 23:33)
- На PIC24 у меня КИХ-фильтры не получались. Нет SIMD. Получается очень медленно. С той же загрузкой ЦПУ БИХ-фильтры дают лучшие результаты. - Nikolay_Po(25.03.2018 21:19)
- Нормальное слово. :) Просто надо использовать словосочетания: "децимирующий фильтр" или "интерполирующий фильтр". И тогда всё будет в согласии с теорией. ;) - Хаос(25.03.2018 20:35, )
- Кстати, про математику. Хаос(939 знак., 25.03.2018 20:55, )
- Математически - да, но я бы не использовал в данном случае слово фильтр. Оно как бы подразумевает, что частота сигнала не меняется, а меняется амплитуда и/или фаза. А смысл синхронного детектора состоит именно в переносе частоты сигнала на нулевую. - йцукен(25.03.2018 19:54)
- И мы тут же получаем комплексный фильтр с КИХ равной длине окна.. - Хаос(25.03.2018 19:08, )
- Если синус и косинус брать из таблицы, они там могут лежать уже с окном. - йцукен(25.03.2018 18:35)
- Если "умножаем с окном", то предыдущий тезис - "требует меньше вычислений: 2 умножения и 2 сложения на отсчёт" уже не верен.. :) - Хаос(25.03.2018 17:43, )
- Когда мы умножаем частоту на неё саму, у нас поручается нулевая частота плюс удвоенная. Если мы не используем окно, или, что то же самое, окно у нас прямоугольное, выгодно взять интервал измерения равным целому числу периодов удвоенной частоты, йцукен(76 знак., 25.03.2018 16:40)
- Как можно математически "подружить" синхронный детектор с сигналом у которого частота известна с точностью, например, ±2% и произвольная фаза (до начала фильтрации)? - De_User(25.03.2018 17:53 - 18:00)
- Даже не знаю, с чего начать. Синхронный детектор требует меньше вычислений: 2 умножения и 2 сложения на отсчёт. После фильтра всё равно нужно как-то оценивать амплитуду, а тут мы сразу получаем амплитуду (и фазу, если нужно). Синхронный детектор йцукен(113 знак., 25.03.2018 13:17)
- А потребляемую мощность можно все-таки измерать на 50 Гц? - Крок(12.03.2018 16:53)
- Обоснуй. - max(25.03.2018 12:19)
- Фильтровать придётся оба сигнала, и опорный и измеряемый. Иначе непонятно, что вы там измерять собрались. 40дБ на 500Гц не слишком сложно. Но, по-моему, давить нужно с 90Гц, всё со второй гармоники сетевой. Иначе нелинейности объекта всякие острее Nikolay_Po(11 знак., 12.03.2018 12:35)
- Но ведь вы понимаете, что в настоящей "розетке" не только 50Гц, но и 150Гц, 250Гц, 350Гц... - lloyd(12.03.2018 12:01)
- Да. Но исследуемый объект достаточно линеен, зависимость проводимости от частоты не большая, 50Гц в розетке на порядок превосходят гармоники. Надеюсь что этого хватит для корректного определения, т.к. гармоники сложатся и там и там. Значение AlexBi(197 знак., 12.03.2018 12:36)
- Совет навскидку: не получится отфильтровать 50Гц с дискретизации 10кГц в целых до 32-х бит включительно. Диапазон коэффициентов подобных фильтров оказывается велик, не говоря уже о потерях на целом аккумуляторе. Nikolay_Po(2454 знак., 12.03.2018 12:50)
- Да все получится и без всяких там ФНЧ. Нужно просто освоить полифазную реализацию полосовых фильтров.. :) Хаос(52 знак., 12.03.2018 13:28, )
- Совет навскидку: не получится отфильтровать 50Гц с дискретизации 10кГц в целых до 32-х бит включительно. Диапазон коэффициентов подобных фильтров оказывается велик, не говоря уже о потерях на целом аккумуляторе. Nikolay_Po(2454 знак., 12.03.2018 12:50)
- Да. Но исследуемый объект достаточно линеен, зависимость проводимости от частоты не большая, 50Гц в розетке на порядок превосходят гармоники. Надеюсь что этого хватит для корректного определения, т.к. гармоники сложатся и там и там. Значение AlexBi(197 знак., 12.03.2018 12:36)
- Блин, я думал, вам режекторный фильтр на 50 Гц нужен, а тут вот оно как... Чтобы выделить из сигнала одну частоту, фильтр вообще не нужен, нужен синхронный детектор. И ещё совет - если возможно, не измеряйте ничего на частоте 50 Гц, измеряйте на йцукен(11 знак., 12.03.2018 14:38)
- Мобуть. Но обычно не хватат динамики. С плывучкой-то имеем полюбасу, честных 16р. И, соотв, ошибку, 3е-5 - mse homjak(11.03.2018 23:08 - 23:13)
- Частота дискретизации не более 10кГц (быстрее наверное не успеет), на входе RC фильтр на 1кГц. Процессор PIC24 с аппаратным умножителем 16х16. На 500Гц и далее желательно иметь подавление в 100 раз. AlexBi(393 знак., 12.03.2018 11:46)
- Поскольку ТС по традиции не указал ни частоту дискретизации, ни архитектуру своего процессора, я, как и все, блудю впотьмах. Однако предыдущий опыт подсказывает мне, что мантиссы 16 бит маловато будет. - йцукен(11.03.2018 22:38)
- double в эмбеддеде... смело - lloyd(11.03.2018 20:18)
- А смысл? Вкорячить самолепную плывучку с 16 бит мантиссой и 16 бит экспонентой(чтобы ничо не приснилось, да и знаки туда можно упихать). 32 бит целочисленки точно не хватит. - mse homjak(11.03.2018 22:14)
- Я бы посмотрела в сторону ЭКГрафов - там фильтрация от 50 Гц (т.к. электроды приложены к телу), как в аналоговой части, так и в цифровой (где такая есть). - Ксения(11.03.2018 16:40)
- WinFilter, древность конечно - Chum_A(11.03.2018 13:36, ссылка)
- не помню в каком именно месте, но он считает коэффициенты с заметной погрешностью. Mahagam(128 знак., 11.03.2018 23:24)
- В целых заградительный фильтр на Winfilter не получается, только float, причём желательно повышенной точности - De_User(11.03.2018 20:46)
- 1. Матлаб умеет генерить КИХ-фильтры. Если не ошибаюсь, Octave, тоже lloyd(132 знак., 11.03.2018 12:52)
- У меня Nikolay_Po(195 знак., 11.03.2018 20:10)
- "ELLF.EXE" под какой ОС работает? В Win7x64 не запускается. - De_User(11.03.2018 20:56)
- Ага. Запускайте под 32-х битной осью. Я запускаю в DOSbox, в Linux. Линукс 64-х битный, но ставиться "мультиарх" и пакеты i386 32-бит, небходимые для эмуляции DOS. Nikolay_Po(220 знак., 11.03.2018 21:37 - 21:39)
- "ELLF.EXE" под какой ОС работает? В Win7x64 не запускается. - De_User(11.03.2018 20:56)
- У меня Nikolay_Po(195 знак., 11.03.2018 20:10)