Jump to content

    

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

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

ссылка

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

Share this post


Link to post
Share on other sites
On 12/30/2018 at 2:36 AM, blackfin said:

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

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

 

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

Share this post


Link to post
Share on other sites
2 hours ago, iiv said:

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

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

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

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

Share this post


Link to post
Share on other sites

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

 

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

Share this post


Link to post
Share on other sites
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-й гармоники.

 

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites
1 hour ago, dimka76 said:

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

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

Quote

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

 

Share this post


Link to post
Share on other sites
On 1/12/2019 at 2:30 PM, blackfin said:

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

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

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

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

Quote

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

 

Share this post


Link to post
Share on other sites
3 hours ago, dimka76 said:

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

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

Share this post


Link to post
Share on other sites
41 minutes ago, _pv said:

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

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

Share this post


Link to post
Share on other sites

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

 

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

Share this post


Link to post
Share on other sites
16 minutes ago, iiv said:

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

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

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

Share this post


Link to post
Share on other sites
30 minutes ago, _pv said:

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

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

Share this post


Link to post
Share on other sites
3 hours ago, Herz said:

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

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

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now