реклама на сайте
подробности

 
 
13 страниц V  « < 7 8 9 10 11 > »   
Reply to this topicStart new topic
> Измерение частоты основной гармоники (50 Гц) с точностью 0.01 Гц
Pridnya
сообщение Sep 25 2015, 09:19
Сообщение #121


Частый гость
**

Группа: Свой
Сообщений: 142
Регистрация: 11-01-11
Из: Орел
Пользователь №: 62 159



Цитата(Santik @ Sep 25 2015, 12:09) *
При перегрузках по току можно и за меньшее время с аварийными режимами бороться - а с помощью измерения частоты - проблематично.

40-50 мс вполне достаточно. Я не собираюсь бороться с аварийным режимом с помощью измерения частоты. wacko.gif

Цитата(Santik @ Sep 25 2015, 12:09) *
Не только частота уменьшается, но и амплитуда! Получаем сигнал ЧМ с АМ. Причём АМ может быть до 10%, а частота АМ - доли Герц. А при "перекосе" фаз - именно АМ, а не ЧМ играет первостепенное значение.

Неполнофазные режимы обнаруживаются с помощью вычисления отношения тока обратной последовательности к току прямой последовательности. Это отношение не зависит от нагрузки линии. Это самый последий метод, можно сказать достижение. Не по абсолютному значению тока обратной последовательности (его значение зависит от нагрузки линии), как было когда-то. В те далекие времена стояли аналоговые фильтры тока обратной последовательности и компараторы. rolleyes.gif

Сообщение отредактировал Pridnya - Sep 25 2015, 09:21
Go to the top of the page
 
+Quote Post
Santik
сообщение Sep 25 2015, 10:34
Сообщение #122


Частый гость
**

Группа: Участник
Сообщений: 87
Регистрация: 30-03-12
Из: Мирный (Якутия)
Пользователь №: 71 096



Цитата(Pridnya @ Sep 25 2015, 12:19) *
... В те далекие времена стояли аналоговые фильтры тока обратной последовательности и компараторы.

И работали, кстати, без всяких "хитрых" ЦОСов rolleyes.gif
Go to the top of the page
 
+Quote Post
Corner
сообщение Sep 27 2015, 19:06
Сообщение #123


Профессионал
*****

Группа: Участник
Сообщений: 1 072
Регистрация: 11-12-12
Пользователь №: 74 815



Хммм. Нашел один из старых проектов электросчетчика, когда еще в ходу были pic18))) У меня там оказывается тоже считалась частота))) Даже по полупериоду исходного сигнала. Просто находится сумма квадратов отклонений и каждый раз диапазон сужается пополам в сторону меньшего отклонения. За 12... 15 итераций частота ищется довольно сносно. Среднее по нескольким полупериодам это уже довольно точно. Я и забыл, что такое делал. Все ПЛИС из мозга вымыли))) А на хорошем АРМе это вообще халява...

Сообщение отредактировал Corner - Sep 27 2015, 19:13
Go to the top of the page
 
+Quote Post
Pridnya
сообщение Nov 9 2015, 09:02
Сообщение #124


Частый гость
**

Группа: Свой
Сообщений: 142
Регистрация: 11-01-11
Из: Орел
Пользователь №: 62 159



Цитата(petrov @ Sep 10 2015, 01:39) *
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 сек. Это предел метода.
Go to the top of the page
 
+Quote Post
petrov
сообщение Nov 9 2015, 11:07
Сообщение #125


Гуру
******

Группа: Свой
Сообщений: 2 220
Регистрация: 21-10-04
Из: Balakhna
Пользователь №: 937



Цитата(Pridnya @ Nov 9 2015, 12:02) *
разрешение


Не путайте точность и разрешение.


Цитата(Pridnya @ Nov 9 2015, 12:02) *
Это предел метода.


Что как плохо? Пределы в статье показаны, метод (3) не даёт смещения, на комплексной синусоиде без шума на порядки точность выше должна быть.
Go to the top of the page
 
+Quote Post
Pridnya
сообщение Nov 9 2015, 11:58
Сообщение #126


Частый гость
**

Группа: Свой
Сообщений: 142
Регистрация: 11-01-11
Из: Орел
Пользователь №: 62 159



Цитата(petrov @ Nov 9 2015, 14:07) *
Не путайте точность и разрешение.


Что как плохо? Пределы в статье показаны, метод (3) не даёт смещения, на комплексной синусоиде без шума на порядки точность выше должна быть.


Я имею ввиду разрешение по частоте. Прошу прощения за неточность в терминах.
Ничего не плохо! Аппроксимация теперь выполняется по другой формуле, она даже для 1024-х точечного БПФ дает ошибку по разрешению 0,03 Гц, только вблизи N*3200/1024 ошибка больше, доходит до 0,19 Гц. А так в целом близко к желаемому.

Сообщение отредактировал Pridnya - Nov 9 2015, 11:59
Go to the top of the page
 
+Quote Post
petrov
сообщение Nov 9 2015, 12:34
Сообщение #127


Гуру
******

Группа: Свой
Сообщений: 2 220
Регистрация: 21-10-04
Из: Balakhna
Пользователь №: 937



Цитата(Pridnya @ Nov 9 2015, 14:58) *
Я имею ввиду разрешение по частоте.


Вам же частоту точнее посчитать надо, а не близкие синусиды разрешить.

Цитата(Pridnya @ Nov 9 2015, 14:58) *
Ничего не плохо!


Но оценка Якобсена гораздо лучше на 64-х точечном сигнале.
Go to the top of the page
 
+Quote Post
blackfin
сообщение Nov 9 2015, 13:14
Сообщение #128


Гуру
******

Группа: Свой
Сообщений: 3 106
Регистрация: 18-04-05
Пользователь №: 4 261



Цитата(Pridnya @ Nov 9 2015, 14:58) *
Аппроксимация теперь выполняется по другой формуле, она даже для 1024-х точечного БПФ дает ошибку по разрешению 0,03 Гц, только вблизи N*3200/1024 ошибка больше, доходит до 0,19 Гц.

А где там "формула"? Там просто бред какой-то..
Go to the top of the page
 
+Quote Post
Pridnya
сообщение Nov 9 2015, 19:52
Сообщение #129


Частый гость
**

Группа: Свой
Сообщений: 142
Регистрация: 11-01-11
Из: Орел
Пользователь №: 62 159



Цитата(petrov @ Nov 9 2015, 15:34) *
Вам же частоту точнее посчитать надо, а не близкие синусиды разрешить.

Но оценка Якобсена гораздо лучше на 64-х точечном сигнале.

а какую из формул нужно использовать, чтобы сделать эту оценку? И еще интересно, с какой точностью (интересует количество цифр после запятой) у вас получается эта оценка.

Я пробовал так:
Задаю идеальный синус определенной частоты (в цикле от 45 Гц до 55 Гц, через каждые 0,01 Гц), всего 1024 выборки.
С помощью 1024-х точечного БПФ нахожу максимум и два соседних бина.
Считаю поправку.
Прибавляю её к центральному бину.
Считаю разницу между заданной частотой и расчитанной.

Цитата(blackfin @ Nov 9 2015, 16:14) *
А где там "формула"? Там просто бред какой-то..

Фишка в том, что этот бред в диапазоне 45-55 Гц по двум бинам дает более точное значение чем параболическая аппроксимация по трем. И только вблизи некоторых точек погрешность больше, когда два соседних бина (по отношению к центральному) почти равны, но там другую формулу попробовать можно.

Сообщение отредактировал Pridnya - Nov 9 2015, 19:54
Go to the top of the page
 
+Quote Post
blackfin
сообщение Nov 10 2015, 02:17
Сообщение #130


Гуру
******

Группа: Свой
Сообщений: 3 106
Регистрация: 18-04-05
Пользователь №: 4 261



Цитата(Pridnya @ Nov 9 2015, 22:52) *
Фишка в том, что этот бред в диапазоне 45-55 Гц по двум бинам дает более точное значение чем параболическая аппроксимация по трем.

Фишка в том, что вы не умеете считать "параболическую аппроксимацию по трем"..
Go to the top of the page
 
+Quote Post
Pridnya
сообщение Nov 10 2015, 05:36
Сообщение #131


Частый гость
**

Группа: Свой
Сообщений: 142
Регистрация: 11-01-11
Из: Орел
Пользователь №: 62 159



Цитата(blackfin @ Nov 10 2015, 05:17) *
Фишка в том, что вы не умеете считать "параболическую аппроксимацию по трем"..


Тогда давайте вместе посчитаем. laughing.gif Я считал по известной формуле, где расчитываются коэффициенты 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).

Цитата(blackfin @ Nov 10 2015, 05:17) *
Фишка в том, что вы не умеете считать "параболическую аппроксимацию по трем"..

PPS: Если вы не поняли или не захотели вникать в суть метода, то поясню: после расчета 1024-х точечного БПФ мы находим макимальный бин и два его соседних бина, назовем их левый и правый. Т.е. у нас получается три бина. Так вот, если левый бин не равен правому (они отличаются), то метод позволяет по двум бинам определить искомую частоту с точностью 0,03 Гц (как хотите называйте, я называю точностью разницу между заданной частотой и расчетной). Проблемы появляются в случае, когда левый бин почти равен правому, тогда разница равна 0,19 Гц.

Для двух бинов, максимального и следующего за ним формула такая: (16*A16+17*A17)/(A16+A17),
где 16 и 17 - индекс бина, A16 и A17 - амплитуда, соответствующего бина.

Сообщение отредактировал Pridnya - Nov 10 2015, 05:59
Go to the top of the page
 
+Quote Post
blackfin
сообщение Nov 10 2015, 07:49
Сообщение #132


Гуру
******

Группа: Свой
Сообщений: 3 106
Регистрация: 18-04-05
Пользователь №: 4 261



Цитата(Pridnya @ Nov 10 2015, 08:36) *
Тогда давайте вместе посчитаем.

Код
// Три бина для 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.
Go to the top of the page
 
+Quote Post
Pridnya
сообщение Nov 10 2015, 08:38
Сообщение #133


Частый гость
**

Группа: Свой
Сообщений: 142
Регистрация: 11-01-11
Из: Орел
Пользователь №: 62 159



Цитата(blackfin @ Nov 10 2015, 10:49) *
У меня получится:

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;
}


Сообщение отредактировал Pridnya - Nov 10 2015, 08:50
Go to the top of the page
 
+Quote Post
blackfin
сообщение Nov 10 2015, 09:11
Сообщение #134


Гуру
******

Группа: Свой
Сообщений: 3 106
Регистрация: 18-04-05
Пользователь №: 4 261



Цитата(Pridnya @ Nov 10 2015, 11:38) *
Все дело в том, что на входе БПФ была задана частота не 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.
Go to the top of the page
 
+Quote Post
Pridnya
сообщение Nov 10 2015, 09:33
Сообщение #135


Частый гость
**

Группа: Свой
Сообщений: 142
Регистрация: 11-01-11
Из: Орел
Пользователь №: 62 159



Цитата(blackfin @ Nov 10 2015, 12:11) *
А вы перед тем, как считать БПФ, сначала умножьте свою основную гармонику (50,00000 Гц 49,9092 Гц) на весовой множитель:

g(t) = exp(-t2/T2), где: T = 0.1 [сек].

А потом сравните ошибку метода "с параболической интерполяцией" с ошибкой своего метода "по двум бинам"..


Т.е. вы предлагаете использовать одно из окон (аналогично окнам Хэмминга, Гаусса...). У меня сейчас нет умножения выборки на окно. Его нет, но оно есть, прямоугольное окно ( допустим, что вся выборка умножается на 1). rolleyes.gif

И почему я должен умножить, используя именно эту формулу? И почему T=0.1 секунды?

У меня же 1024 точки выборки. Частота дискретизации 3200 Гц. Эти 1024 точки получены за 1024*(1/3200)=0,32 секунды.
Без всяких окон получаю результат не хуже 0,19 Гц.

Сообщение отредактировал Pridnya - Nov 10 2015, 09:37
Go to the top of the page
 
+Quote Post

13 страниц V  « < 7 8 9 10 11 > » 
Reply to this topicStart new topic
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 15th June 2025 - 18:18
Рейтинг@Mail.ru


Страница сгенерированна за 0.01547 секунд с 7
ELECTRONIX ©2004-2016