haker_fox 60 27 декабря, 2018 Опубликовано 27 декабря, 2018 · Жалоба Господа, всем огромное спасибо! На праздники есть с чем разбираться! Вот ещё: пока не угладывается в голове, что делает оконная функция? Она как-то нормирует спект исходного сигнала? Не совсем всё понятно про неё. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
blackfin 16 27 декабря, 2018 Опубликовано 27 декабря, 2018 · Жалоба Just now, haker_fox said: Вот ещё: пока не угладывается в голове, что делает оконная функция? Она как-то нормирует спект исходного сигнала? Не совсем всё понятно про неё. Если вы посмотрите на определение RMS для конечного числа отсчетов дискретного сигнала, то вы увидите там формулу для обычного НЧ КИХ фильтра известного в узких кругах под названием скользящее среднее, причем на вход этого фильтра вместо отсчетов самого сигнала s(t) подают квадраты этих отсчетов: s(t)^2. Единственная функция этого НЧ фильтра, это выделение постоянной составляющей из входного сигнала s(t)^2 и подавление всех частот отличных от нуля. К сожалению, АЧХ НЧ фильтра на основе скользящего среднего далека от идеала. Помимо основной полосы пропускания на нулевой частоте в ней имеются паразитные полосы пропускания форма и положение которых в первом приближении соответствуют АЧХ заданной sinc-функцией. (Если быть совсем точным, то АЧХ скользящего среднего задается функцией Дирихле). Поэтому вместо КИХ фильтра на основе скользящего среднего для выделения НЧ составляющей сигнала используют НЧ КИХ фильтр с нужным уровнем подавления сигнала вне полосы пропускания. Такой фильтр проще всего получить выбрав в качестве импульсной характеристки фильтра любое из известных окон - Кайзера, Ханна, Гаусса, и т.п. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
petrov 6 27 декабря, 2018 Опубликовано 27 декабря, 2018 · Жалоба haker_fox Господа, всем огромное спасибо! На праздники есть с чем разбираться! Вот ещё: пока не угладывается в голове, что делает оконная функция? Она как-то нормирует спект исходного сигнала? Не совсем всё понятно про неё. DFT - банк полосовых FIR фильтров с прямоугольной огибающей, т. е. ЧХ этих фильтров - sinc. Оконная функция позволяет сделать произвольную огибающую и соответственно ЧХ. Например для вычисления амплитуд гармоник есть специальные окна flat top с плоской вершиной АЧХ в полосе частот. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
iiv 18 27 декабря, 2018 Опубликовано 27 декабря, 2018 · Жалоба On 12/23/2018 at 2:45 PM, haker_fox said: Простите, не совсем понимаю. Буду признателен за объяснение более подробно. Мне ужасно стыдно, что ввел в заблуждение. Алгоритм выше работает только, если максимум в выборке отскалирован на 1, в то же время, такая скалировка достаточно не устойчива численно, особенно если вспомнить, что без ККМ приборы как раз делают сетевой синус слегка приплюснутым. Чтоб этого не было таки надо считать чуть сложнее. Прилагаю код программы с тестовым примером: #include <stdlib.h> #include <stdio.h> #include <math.h> int main(int n, char **ppArg) { int i, N; double BeginSin, EndSin, Amplitude; double *SinData; double a2, a3; double t1, t2, t3, d; double p1, p2, p3; if(n!=5) { printf("%s BeginAngle EndAngle Amplitude N\n", ppArg[0]); exit(1); } sscanf(ppArg[1], "%lg", &BeginSin); // начальный угол синуса в радианах sscanf(ppArg[2], "%lg", &EndSin); // конечный угол синуса в радианах sscanf(ppArg[3], "%lg", &Amplitude); // амплитуда sscanf(ppArg[4], "%d", &N); // длина выборки SinData=malloc((N+2)*sizeof(double)); for(i=0; i<N+2; i++) SinData[i]=Amplitude*sin(BeginSin+(EndSin-BeginSin)*(double)i/(double)N); t1=t2=t3=0; for(i=0; i<N; i++) { t1+=SinData[i]*SinData[i]; t2+=SinData[i]*SinData[i+1]; t3+=SinData[i]*SinData[i+2]; } p1=SinData[N]*SinData[N]-SinData[0]*SinData[0]; p2=SinData[N]*SinData[N+1]-SinData[0]*SinData[1]; p3=SinData[N+1]*SinData[N+1]-SinData[1]*SinData[1]; // d = (t1+p1)*(t1+p1+p3) - (t2+p2)*(t2+p2); a2 = t3*(t2+p2) - t2*(t1+p1+p3); a3 = t2*(t2+p2) - t3*(t1+p1); printf("NTicks=%g\n", 2.*M_PI/atan2(sqrt(fabs(4.*a3*d-a2*a2)), -a2)); // выдача длины выборки одного периода return 0; } Скомпилировав этот пример можно, например, его запустить с аргументами 3 9.285 2.3456789 160 что соответствуют тому, что выборка началась с 3 радиан и закончилась на 3+2*Пи, скалировка была 2.3456789, а в выборке было 160 (8КГц/50Гц) точек и лицезреть, что данных тут ровно на один период: NTicks=159.954 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
haker_fox 60 28 декабря, 2018 Опубликовано 28 декабря, 2018 · Жалоба 7 hours ago, iiv said: Мне ужасно стыдно, что ввел в заблуждение. Всё нормально!))) Попробую вашу прогрмму запустить))) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Herz 4 28 декабря, 2018 Опубликовано 28 декабря, 2018 · Жалоба А я хотел бы спросить, частота изменяется от измерения к измерению, или она просто неизвестная константа? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
haker_fox 60 29 декабря, 2018 Опубликовано 29 декабря, 2018 · Жалоба 5 hours ago, Herz said: А я хотел бы спросить, частота изменяется от измерения к измерению, или она просто неизвестная константа? Если говорить строго, это сетевая частота 50 или 60 Гц. Соответственно, в зависимости от государства, она либо 50+-2 Гц, либо 60 +-2 Гц. Т.е. в пределах 4 Гц она может меняться, чисто теоретически, от измерения к измерению. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Herz 4 29 декабря, 2018 Опубликовано 29 декабря, 2018 · Жалоба По-моему, это очень теоретически, поскольку за частотой сети следят весьма строго. Отклонение её на 2Гц - это уже, фактически аварийный режим. Вот, из Вики, что касается параметров сетевого напряжения в России: Quote Согласно межгосударственному стандарту ГОСТ 29322-2014 (IEC 60038:2009), сетевое напряжение должно составлять 230 В ±10 % при частоте 50 ±0,2 Гц Понятно, что прибор должен уметь измерять частоту в более широких пределах, но так чтобы от измерения к измерению... Я к чему. Может, фактическую частоту достаточно было бы определять гораздо более простыми способами, без привлечения столь великих учёных мужей вроде Фурье, Гильберта, Кайзера, Гаусса, Хемминга и других? А то аж дух захватывает, до чего крутая задачка это - мерить RMS сетевого напряжения. Тем более, как видно, время у Вас на это есть. Сигнал близок к синусу. То есть, если за 2-3 периода определять необходимое количество сэмплов (только), то всё равно ещё остаётся достаточно времени на вычисления RMS и усреднения. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
iiv 18 29 декабря, 2018 Опубликовано 29 декабря, 2018 · Жалоба 1 hour ago, Herz said: Может, фактическую частоту достаточно было бы определять гораздо более простыми способами... так я о том же, в алгоритме, что я привел, всего 13 существенных строчек, и ни каких Фурье и Гильбертов. Кстати, примерно 5 лет назад я что-то похожее Вам рассказывал, но, к сожалению, не смог найти ссылку, поэтому запрограммировал заново :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
haker_fox 60 29 декабря, 2018 Опубликовано 29 декабря, 2018 · Жалоба 2 hours ago, Herz said: Отклонение её на 2Гц - это уже, фактически аварийный режим Угу, но требования есть требования. Да и прибор наш аварийные режимы тоже должен регистировать. Назначение у него такое. Работает на подстанции. 2 hours ago, Herz said: без привлечения столь великих учёных мужей вроде Фурье, Гильберта, Кайзера, Гаусса, Хемминга и других? да нет, пусть привлекаются) Для повышения опыта полезно! 50 minutes ago, iiv said: так я о том же, в алгоритме, что я привел, всего 13 существенных строчек, и ни каких Фурье и Гильбертов. А не подскажете, как этот алгоритм называется? Или это просто здравый смысл?)))) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Самурай 12 29 декабря, 2018 Опубликовано 29 декабря, 2018 · Жалоба 1 час назад, Herz сказал: Понятно, что прибор должен уметь измерять частоту в более широких пределах, но так чтобы от измерения к измерению... Я к чему. Может, фактическую частоту достаточно было бы определять гораздо более простыми способами, без привлечения столь великих учёных мужей вроде Фурье, Гильберта, Кайзера, Гаусса, Хемминга и других? Всем давным-давно уже понятно, что для вычисления RMS нет надобности измерять частоту, ни точно, ни приближенно, ни более простым способом, ни способом чуть сложнее, никак, вообще, в принципе.... А хотя нет, наверно еще не всем... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_pv 52 29 декабря, 2018 Опубликовано 29 декабря, 2018 · Жалоба 23 minutes ago, Самурай said: Всем давным-давно уже понятно, что для вычисления RMS нет надобности измерять частоту, ни точно, ни приближенно, ни более простым способом, ни способом чуть сложнее, никак, вообще, в принципе.... А хотя нет, наверно еще не всем... Ну так возьмите идеальный синусоидальный сигнал конечной длительности и посчитайте RMS, по, например, 10, 10.25 и 10.5 периодам. Одинаковые значения получаются? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 29 декабря, 2018 Опубликовано 29 декабря, 2018 · Жалоба 16 минут назад, _pv сказал: Ну так возьмите идеальный синусоидальный сигнал конечной длительности и посчитайте RMS, по, например, 10, 10.25 и 10.5 периодам. Одинаковые значения получаются? А с оконными функциями? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
blackfin 16 29 декабря, 2018 Опубликовано 29 декабря, 2018 · Жалоба 11 minutes ago, ViKo said: А с оконными функциями? С окном Гаусса одинаковые: PS. Амплитуда идеального синусоидального сигнала равна одному вольту, измерение на интервале 0,16 сек. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 131 29 декабря, 2018 Опубликовано 29 декабря, 2018 (изменено) · Жалоба Мне тоже эта тема интересна, но предложенные варианты чересчур сложно выглядят (либо устрашающе называются) Почему, например, нельзя сделать так. 1. Выделить раз на 10 измерений некий квант "определение текущей частоты". Число 10 взято от балды, оно зависит от требуемой скорости реакции на изменение частоты сети. Но суть не в этом. Просто набираем себе отсчетов АЦП в несколько периодов измеряемого сигнала. 2. Ищем два однополярных экстремума путем нахождения точки перегиба "производной" сигнала. С учетом того, что частота дискретизации всегда постоянна, "производная" равна ADCi - ADCi-1 В при движении по нарастающему фронту синусоиды эта "производная" будет положительная. В верхнем экстремуме разность двух выборок будет близка к 0. И в самой верхней точке получится, что "производная" начнет увеличиваться, но уже в отрицательную сторону. Два найденных места с перегибом из положительных значений "производной" в отрицательные будут являться точками верхних экстремумов сигнала. Зная частоту семплирования, можно найти частоту входного сигнала: fсиг = fдискр/N, где N - количество семплов АЦП между двумя равнозначными экстремумами. Зная частоту сигнала можно динамически "подстраивать" переменную-счетчик достаточного количества отсчетов для проведения RMS по одному или нескольким периодам. Плохо? Хорошо? Изменено 29 декабря, 2018 пользователем Arlleex Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться