RuWorker2 0 25 сентября, 2015 Опубликовано 25 сентября, 2015 (изменено) · Жалоба При перегрузках по току можно и за меньшее время с аварийными режимами бороться - а с помощью измерения частоты - проблематично. 40-50 мс вполне достаточно. Я не собираюсь бороться с аварийным режимом с помощью измерения частоты. Не только частота уменьшается, но и амплитуда! Получаем сигнал ЧМ с АМ. Причём АМ может быть до 10%, а частота АМ - доли Герц. А при "перекосе" фаз - именно АМ, а не ЧМ играет первостепенное значение. Неполнофазные режимы обнаруживаются с помощью вычисления отношения тока обратной последовательности к току прямой последовательности. Это отношение не зависит от нагрузки линии. Это самый последий метод, можно сказать достижение. Не по абсолютному значению тока обратной последовательности (его значение зависит от нагрузки линии), как было когда-то. В те далекие времена стояли аналоговые фильтры тока обратной последовательности и компараторы. :rolleyes: Изменено 25 сентября, 2015 пользователем Pridnya Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Santik 0 25 сентября, 2015 Опубликовано 25 сентября, 2015 · Жалоба ... В те далекие времена стояли аналоговые фильтры тока обратной последовательности и компараторы. И работали, кстати, без всяких "хитрых" ЦОСов :rolleyes: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Corner 0 27 сентября, 2015 Опубликовано 27 сентября, 2015 (изменено) · Жалоба Хммм. Нашел один из старых проектов электросчетчика, когда еще в ходу были pic18))) У меня там оказывается тоже считалась частота))) Даже по полупериоду исходного сигнала. Просто находится сумма квадратов отклонений и каждый раз диапазон сужается пополам в сторону меньшего отклонения. За 12... 15 итераций частота ищется довольно сносно. Среднее по нескольким полупериодам это уже довольно точно. Я и забыл, что такое делал. Все ПЛИС из мозга вымыли))) А на хорошем АРМе это вообще халява... Изменено 27 сентября, 2015 пользователем Corner Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RuWorker2 0 9 ноября, 2015 Опубликовано 9 ноября, 2015 · Жалоба Pridnya Выделяйте комплексным полосовым КИХ фильтром интересующий диапазон, АЧХ в полосе пропускания должна быть как можно более равномерная, гармоники(в том числе на отрицательных частотах) должны быть задавлены как можно сильнее, затем вычисляете несколько бинов ДПФ, далее по статье считаете частоту: http://electronix.ru/forum/index.php?s=&am...t&p=1141831 Советую модельку в симулинке сделать и погонять с различными параметрами. При 4098-ми точечном БПФ и частоте дискретизации 3200 Гц разрешение по частоте будет 3200Гц/4098 = 0,780 Гц. Если пользоваться методом из этой статьи ( с помощью БПФ получаем центральную частоту и два соседних бина, вычисляем поправку и прибавляем её к центральной частоте), то в наихудшем случае разрешение получается еще в 10 раз лучше, т.е. разница заданной и расчитанной частот не превысит 0,078 Гц (посчитано в диапазоне 49,00-51,00 Гц через 0,01 Гц). Время, затраченное на сбор данных (4098 точек выборки с частотой дискретизации 3200 Гц) примерно 1,28 сек. Это предел метода. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
petrov 7 9 ноября, 2015 Опубликовано 9 ноября, 2015 · Жалоба разрешение Не путайте точность и разрешение. Это предел метода. Что как плохо? Пределы в статье показаны, метод (3) не даёт смещения, на комплексной синусоиде без шума на порядки точность выше должна быть. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RuWorker2 0 9 ноября, 2015 Опубликовано 9 ноября, 2015 (изменено) · Жалоба Не путайте точность и разрешение. Что как плохо? Пределы в статье показаны, метод (3) не даёт смещения, на комплексной синусоиде без шума на порядки точность выше должна быть. Я имею ввиду разрешение по частоте. Прошу прощения за неточность в терминах. Ничего не плохо! Аппроксимация теперь выполняется по другой формуле, она даже для 1024-х точечного БПФ дает ошибку по разрешению 0,03 Гц, только вблизи N*3200/1024 ошибка больше, доходит до 0,19 Гц. А так в целом близко к желаемому. Изменено 9 ноября, 2015 пользователем Pridnya Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
petrov 7 9 ноября, 2015 Опубликовано 9 ноября, 2015 · Жалоба Я имею ввиду разрешение по частоте. Вам же частоту точнее посчитать надо, а не близкие синусиды разрешить. Ничего не плохо! Но оценка Якобсена гораздо лучше на 64-х точечном сигнале. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
blackfin 28 9 ноября, 2015 Опубликовано 9 ноября, 2015 · Жалоба Аппроксимация теперь выполняется по другой формуле, она даже для 1024-х точечного БПФ дает ошибку по разрешению 0,03 Гц, только вблизи N*3200/1024 ошибка больше, доходит до 0,19 Гц. А где там "формула"? Там просто бред какой-то.. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RuWorker2 0 9 ноября, 2015 Опубликовано 9 ноября, 2015 (изменено) · Жалоба Вам же частоту точнее посчитать надо, а не близкие синусиды разрешить. Но оценка Якобсена гораздо лучше на 64-х точечном сигнале. а какую из формул нужно использовать, чтобы сделать эту оценку? И еще интересно, с какой точностью (интересует количество цифр после запятой) у вас получается эта оценка. Я пробовал так: Задаю идеальный синус определенной частоты (в цикле от 45 Гц до 55 Гц, через каждые 0,01 Гц), всего 1024 выборки. С помощью 1024-х точечного БПФ нахожу максимум и два соседних бина. Считаю поправку. Прибавляю её к центральному бину. Считаю разницу между заданной частотой и расчитанной. А где там "формула"? Там просто бред какой-то.. Фишка в том, что этот бред в диапазоне 45-55 Гц по двум бинам дает более точное значение чем параболическая аппроксимация по трем. И только вблизи некоторых точек погрешность больше, когда два соседних бина (по отношению к центральному) почти равны, но там другую формулу попробовать можно. Изменено 9 ноября, 2015 пользователем Pridnya Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
blackfin 28 10 ноября, 2015 Опубликовано 10 ноября, 2015 · Жалоба Фишка в том, что этот бред в диапазоне 45-55 Гц по двум бинам дает более точное значение чем параболическая аппроксимация по трем. Фишка в том, что вы не умеете считать "параболическую аппроксимацию по трем".. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RuWorker2 0 10 ноября, 2015 Опубликовано 10 ноября, 2015 (изменено) · Жалоба Фишка в том, что вы не умеете считать "параболическую аппроксимацию по трем".. Тогда давайте вместе посчитаем. :laughing: Я считал по известной формуле, где расчитываются коэффициенты a, b, c. // Три бина для 49.9092 Гц, для этой частоты парабола дает точный результат. x1=15.0F; y1=28.9915F; x2=16.0F; y2=999.485F; x3=17.0F; y3=29.052F; // Коэффициенты параболы. float a = (y3 - (x3*(y2-y1)+x2*y1-x1*y2)/(x2-x1))/(x3*(x3-x1-x2)+ x1*x2); float b = (y2-y1)/(x2-x1) - a*(x1+x2); float c = (x2*y1 - x1*y2)/(x2-x1) + a*x1*x2; float x = -b/(2.0F*a); float f = x*3200.0F/1024.0F; cout <<"a = " << a << endl; cout <<"b = " << b << endl; cout <<"c = " << c << endl; cout <<"x = " << x << endl; cout <<"f = " << f << endl; // Искомая частота. /* a = -970.463 b = 31054.8 c = -247439 x = 16 f = 50 */ А что получится у вас? Кстати, не могли бы вы подкинуть мне методику (или даже код) для аппрроксимации с помощью МНК желатеотно на С или C++, чтобы за приемлемое время можно было подобрать аппроксимирующую кривую. Все пишут "используй МНК", а я не знаю, не помню, как это сделать "на пальцах". Я бы ваш код потестировал и программно и в железе. PS: Сейчас поискал в этой ветке и нашел, что это вы "из головы" писали выкладки и утверждали, что "это абсолютно точная формула...", я был очень рад, что есть еще люди, способные писать "из головы". И теперь недоумеваю, почему такой высококвалифицированный специалист предложил такой плохой метод, ведь были же выкладки (не каждый способен писать выкладки "из головы"). Вот ссылка на ваш пост http://electronix.ru/forum/index.php?showt...t&p=1364861 Повторюсь, что точное значение по трем точкам удается получить только в случае идеального синуса с постоянной амплитудой (у реального сигнала в электросетях, даже отфильтрованного и при постоянной часоте амплитуда всегда меняется, причем по случайному закону, в зависимости от нагрузки на линию). Особенно ерундово получается, если средняя точка попадает на ноль. Я тестировал метод для 64-х точечной выборки, каждый раз смещаясь на одну точку. Хотел посмотреть результат на разных участках синусоиды. Попробовал этот алгоритм в прибор "зашить", так вообще ерунду показывает. Сейчас у меня частота измеряется с помощью компаратора и таймера и "показометр" показывает 49,95...50,05 Гц. PS: А вот другой метод, ссылку на который предложил Petrov (статья Эрика Якобсена), действительно пригоден для практических расчетов , даже на микроконтроллере (ARM с модулем FPU). Фишка в том, что вы не умеете считать "параболическую аппроксимацию по трем".. PPS: Если вы не поняли или не захотели вникать в суть метода, то поясню: после расчета 1024-х точечного БПФ мы находим макимальный бин и два его соседних бина, назовем их левый и правый. Т.е. у нас получается три бина. Так вот, если левый бин не равен правому (они отличаются), то метод позволяет по двум бинам определить искомую частоту с точностью 0,03 Гц (как хотите называйте, я называю точностью разницу между заданной частотой и расчетной). Проблемы появляются в случае, когда левый бин почти равен правому, тогда разница равна 0,19 Гц. Для двух бинов, максимального и следующего за ним формула такая: (16*A16+17*A17)/(A16+A17), где 16 и 17 - индекс бина, A16 и A17 - амплитуда, соответствующего бина. Изменено 10 ноября, 2015 пользователем Pridnya Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
blackfin 28 10 ноября, 2015 Опубликовано 10 ноября, 2015 · Жалоба Тогда давайте вместе посчитаем. // Три бина для 49.9092 Гц, для этой частоты парабола дает точный результат. x1=15.0F; y1=28.9915F; x2=16.0F; y2=999.485F; x3=17.0F; y3=29.052F; /* a = -970.463 b = 31054.8 c = -247439 x = 16 f = 50 */ А что получится у вас? У меня получится: xmax = x2 + 0.5*(y3 - y1)/(2*y2 - y3 - y1) = 16.0 + 0.5*(29.052 - 28.9915)/(2*999.485 - 29.052 - 28.9915) = 16.0 + 0.5*0.0605/1940.9265 = 16.000015585. fmax = xmax*3200.0/1024.0 = 50.0000487. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RuWorker2 0 10 ноября, 2015 Опубликовано 10 ноября, 2015 (изменено) · Жалоба У меня получится: xmax = x2 + 0.25*(y3 - y1)/(2*y2 - y3 - y1) = 16.0 + 0.25*(29.052 - 28.9915)/(2*999.485 - 29.052 - 28.9915) = 16.0 + 0.25*0.0605/1940.9265 = 16.00000779267. fmax = xmax*3200.0/1024.0 = 50.000024352. Вот, видите сами как хорошо у вас получилось, сколько нулей после запятой. Все дело в том, что на входе БПФ была задана частота не 50, 00000 Гц, а 49,9092 Гц. Т.о. вы получили ошибку примерно 0,1 Гц. И это не смотря на то, что левый и правый бин расположен симметрично относительно максимума (все бы хорошо для хорошего результата по параболе, а его нет). Теперь я использую вашу формулу для входного сигнала частотой 52,00 Гц и получаю плохой результат, разница 0,913 Гц. Это, конечно, точнее чем по максимуму БПФ, там плюс минус 3,125 Гц. Но я предполагал, что вашей формулой можно пользоваться в диапазоне частот 45-55 Гц, т.е. я не планирую для каждой точки менять формулу расчета коэффициентов параболы. А вот метод, который вы назвали бредом, позволяет всего по двум бинам получить отличный результат, разница не более 0,02 Гц. Причем в диапазоне частот 45-55 Гц эта формула отлично работает, там разница не более 0,03 Гц. И только рядом с N*3200/1024 есть несколько точек, где разница растет с 0,03 до 0,19 Гц. Но там, возможно, будет лучше результат по параболе. Сравните свой метод и метод по двум бинам. Этот метод предложил ampersant http://www.microchip.su/showpost.php?p=218...mp;postcount=36 int main(int argc, char** argv) { float fin, x1, x2, x3, y1, y2, y3, xmax, fmax, deltaf; // *************************************************************************** // // Параболическая аппроксимация по вашей формуле. fin = 52.00; // Гц x1 = 16; y1 = 456.366F; x2 = 17; y2 = 793.953F; x3 = 18; y3 = 205.923F; xmax = x2 + 0.25*(y3 - y1)/(2*y2 - y3 - y1); // = 16.0 + 0.25*(29.052 - 28.9915)/(2*999.485 - 29.052 - 28.9915) = 16.0 + 0.25*0.0605/1940.9265 = 16.00000779267. fmax = xmax*3200.0/1024.0; deltaf = fin - fmax; cout <<"xmax = " << xmax << endl; cout <<"fmax = " << fmax << endl; cout <<"deltaf = " << deltaf << endl; // xmax = 16.9324 // fmax = 52.9136 // deltaf = -0.91362 Гц. // *************************************************************************** // // Способ по двум бинам (хорошо считает, если левый бин не равен правому)) xmax = (16*y1 + 17*y2)/(y1+y2); cout <<"fmax =(16*y1 + 17*y2)/(y1+y2)" << endl; fmax = xmax*3200.0/1024.0; deltaf = fin - fmax; cout <<"xmax = " << xmax << endl; cout <<"fmax = " << fmax << endl; cout <<"deltaf = " << deltaf << endl; // fmax = (16*y1 + 17*y2)/(y1+y2) // xmax = 16.635 // fmax = 51.9844 // deltaf = 0.015625 return 0; } Изменено 10 ноября, 2015 пользователем Pridnya Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
blackfin 28 10 ноября, 2015 Опубликовано 10 ноября, 2015 · Жалоба Все дело в том, что на входе БПФ была задана частота не 50,00000 Гц, а 49,9092 Гц. Т.о. вы получили ошибку примерно 0,1 Гц. И это не смотря на то, что левый и правый бин расположен симметрично относительно максимума (все бы хорошо для хорошего результата по параболе, а его нет). А вы перед тем, как считать БПФ, сначала умножьте свою основную гармонику (50,00000 Гц 49,9092 Гц) на весовой множитель: g(t) = exp(-t2/T2), где: T = 0.1 [сек]. А потом сравните ошибку метода "с параболической интерполяцией" с ошибкой своего метода "по двум бинам".. PS. Формула для g(t) предполагает, что сигнал отличен от нуля на интервале времени: -Tсигн/2 ... +Tсигн/2. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RuWorker2 0 10 ноября, 2015 Опубликовано 10 ноября, 2015 (изменено) · Жалоба А вы перед тем, как считать БПФ, сначала умножьте свою основную гармонику (50,00000 Гц 49,9092 Гц) на весовой множитель: g(t) = exp(-t2/T2), где: T = 0.1 [сек]. А потом сравните ошибку метода "с параболической интерполяцией" с ошибкой своего метода "по двум бинам".. Т.е. вы предлагаете использовать одно из окон (аналогично окнам Хэмминга, Гаусса...). У меня сейчас нет умножения выборки на окно. Его нет, но оно есть, прямоугольное окно ( допустим, что вся выборка умножается на 1). :rolleyes: И почему я должен умножить, используя именно эту формулу? И почему T=0.1 секунды? У меня же 1024 точки выборки. Частота дискретизации 3200 Гц. Эти 1024 точки получены за 1024*(1/3200)=0,32 секунды. Без всяких окон получаю результат не хуже 0,19 Гц. Изменено 10 ноября, 2015 пользователем Pridnya Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться