Перейти к содержанию
    

Коллеги, что порекомендуете для вычисления RMS по выборкам?

Случайно набрел на данную книгу: "Аппроксимационные методы и системы измерения и контроля параметров периодических сигналов"

ссылка

может пригодится.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

On 12/30/2018 at 2:36 AM, blackfin said:

В моей программе Фурье не вычисляется. Входной сигнал умножается на exp(-a*t^2), полученное произведение возводится в квадрат, после чего суммируется по всем точкам на интервале измерения. Затем полученная сумма делится на вес оконной функции Гаусса и вычисляется квадратный корень. 

конечно это тоже метод, особенно если взять квадратно-гнездовым пару сотен a из Вашей формулы, то получится хороший и достоверный результат, особенно если не забыть о том, что для каждого такого значения своя длина последовательности, и взято оно все в эпсилон окрестности частоты, которую надо мерить. Если соответствующие таблицы размером в несколько мегабайт в память влезут и под тысячу флопов на одну оцифровку не пугают - да, проблем нет, это тоже довольно просто запрограммировать, особенно если вспомнить, что про Фурье в стандартном университетском курсе электронщика говорят, а про линейное предсказание и сингулярное разложение - нет.

 

Ждем от ТС результатов, надеюсь эти баталии помогли ему выбрать правильный метод и успешно решить задачу.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 hours ago, iiv said:

Если соответствующие таблицы размером в несколько мегабайт в память влезут и под тысячу флопов на одну оцифровку не пугают - да, проблем нет

Какие ещё "мегабайты таблиц"? Вы бредите?

У ТС частота дискретизации 8 кГц, разрядность АЦП равна 24 бита, поэтому размер таблицы равен: 3*4*8000/50 = 1920 байт.

Таблица одна для любых частот от 45 Гц до 4 кГц.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Так если таблица одна и все так просто и Вы считаете, что она даже проще того, что я Выше приводил - напишите программу и выложите ее здесь, а мы вместе оценим сколько там таблиц и этих коэффициентов, если Фурье в лоб без бабочек считать.

 

Я надеюсь мы все понимаем, что 50 и 50.3Гц в случае ТС надо различать, ибо это 160 и 159 отсчетов и ТС не особенно волнует 50 или 100Гц у него несущая.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

16 hours ago, iiv said:

Так если таблица одна и все так просто и Вы считаете, что она даже проще того, что я Выше приводил - напишите программу и выложите ее здесь, а мы вместе оценим сколько там таблиц и этих коэффициентов, если Фурье в лоб без бабочек считать.

Вот вам "псевдо-код":

double GW[640];     // Таблица коэффициентов оконной ф-ции Гаусса, == exp(-a*t^2)
double WG;          // Вес окна Гаусса

double MS = 0.0;    // Mean Square
double RMS;         // Root Mean Square
  
double ST[640*2];   // Source Signal

double GS;

int i;
  
for (i = 0; i < 640; i++)
{
	GS = GW[i]*ST[i];
	MS += GS*GS;
}
for (; i < 640*2; i++)
{
	GS = GW[640*2-1-i]*ST[i];
	MS += GS*GS;
}
RMS = sqrt(MS/WG);
16 hours ago, iiv said:

Я надеюсь мы все понимаем, что 50 и 50.3Гц в случае ТС надо различать, ибо это 160 и 159 отсчетов и ТС не особенно волнует 50 или 100Гц у него несущая.

Встречное предложение.. Посчитайте своим методом RMS для сигнала с гармониками:

RMS.thumb.jpg.9ccaf03dbee1a0b6edad94f83d8d5a98.jpg

 

Ибо:

On 12/27/2018 at 3:33 AM, haker_fox said:

Но мы не ставили задачу отрезать первую гармонику, оставлен задел на "взятие" аж до 20-й гармоники.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

ТС надо за 0.5 секунды померить RMS. А если просто взять среднеквадратичное значение всех выборок, полученных за эти 0.5 сек. ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 hour ago, dimka76 said:

ТС надо за 0.5 секунды померить RMS. А если просто взять среднеквадратичное значение всех выборок, полученных за эти 0.5 сек. ?

Перечитайте топик.

Quote

Данные (измеренную частоту, и RMS) нужно выдавать не чаще, чем каждые 0.5 с.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

On 1/12/2019 at 2:30 PM, blackfin said:

Вот вам "псевдо-код":

У вас t это период дискретизации ?

А как быть с определением частоты входного сигнала ?

Ведь как правильно заметил Herz, в ответ на мое сообщение:

Quote

Данные (измеренную частоту, и RMS) нужно выдавать не чаще, чем каждые 0.5 с.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

3 hours ago, dimka76 said:

А как быть с определением частоты входного сигнала ?

если считать RMS с оконной функцией, частоту сигнала определять не надо, ошибку на краях из-за непопадания частоты сигнала в длину выборки целое число раз задавит оконная функция.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

41 minutes ago, _pv said:

если считать RMS с оконной функцией, частоту сигнала определять не надо, ошибку на краях из-за непопадания частоты сигнала в длину выборки целое число раз задавит оконная функция.

конечно если только RMS, то тут куча вариантов, хоть оконная функция, хоть сравнение интеграла квадрата функции и интеграла квадрата производной, но вроде ТС писал, что де все-таки он период тоже знать хочет.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Если говорить только про период - Вы же его не считаете, только RMS, а ТС и его тоже хочет.

 

Про sin(x)-0.3*sin(5x)-0.3(3x) - если меньше коэффициенты у гармоник будут, то они не будут видны, иначе надо взять чуть больше векторов сингулярного разложения и в них поместятся все эти гармоники. Но тут надо заранее знать сколько есть ярких (близких по порядку) в L2 норме сигналов в исходном и брать размерность матрицы в сингулярном разложении не менее этого числа плюс один.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

16 minutes ago, iiv said:

конечно если только RMS, то тут куча вариантов, хоть оконная функция, хоть сравнение интеграла квадрата функции и интеграла квадрата производной, но вроде ТС писал, что де все-таки он период тоже знать хочет.

Изначально измерение частоты нужно было ТСу чтобы подбирать длину выборки и считать RMS как обычно, иначе не влезающие в целое количество периодов куски начинают давать ошибку.

но если посчитать RMS от сигнала * окно как есть, и отдельно RMS окна (вообще один раз заранее), то можно получить исходный RMS сигнала без оконной функции, о чем blackfin с самого начала и говорил.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

30 minutes ago, _pv said:

и отдельно RMS окна (вообще один раз заранее)

Простите мне моё невежество, но что такое RMS окна? И когда - заранее?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

3 hours ago, Herz said:

Простите мне моё невежество, но что такое RMS окна? И когда - заранее?

rms(signal*window) = rms(signal)*rms(window) ?
 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

On 12/22/2018 at 1:01 PM, haker_fox said:

Недавно выяснилось, что нужно алгоритм адаптировать для частот 48 - 62 Гц. Классика уже не работает, по-крайней мере с дискретными данными.

...

Собственно мои вопросы:

2. Имеется ли в природе другой алгоритм, более быстрый для данной задачи?

 

Прошел год...

Удалось ли что-то сделать в железе?

Какой алгоритм выбрали?

Какая получилась точность измерения?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...