LINUX.ORG.RU

История изменений

Исправление AntonI, (текущая версия) :

Пусть u[i] — сигнал, 0<=i<N, dt — шаг по времени (в секундах), omega — циклическая частота, omega = 2 pi 50 (для 50 Гц). Тогда

double Re = 0, Im = 0; // вещественная и мнимая части 
for(int i=0; i<N; i++){
   Re += cos(i*dt*omega)*u[i];
   Im += sin(i*dt*omega)*u[i];
}
Re *= 2./N;
Im *= 2./N;
double A = sqrt(Re*Re+Im*Im); // модуль 
double phi = atan2(Im, Re); // фаза

Фурье-преобразование на заданной частоте даст некоторое комплексное число Re+j Im, где j - мнимая единица. Модуль этого числа будет амплитудой колебаний (то что Вы ищете), фаза будет показывать синус там, косинус или что то среднее. Гарм. колебания в общем случае задаются как A cos(omega t+phi) ну или как (Re+j Im) exp(j omega t) — это не одно и то же но близкие фиговины;-)

Это будет работать на достаточно большом интервале времени (много больше чем период колебаний).

для 6Вт и 12Вт лампочек разница довольно маленькая

А, тогда понятно.

Исправление AntonI, :

Пусть u[i] — сигнал, 0<=i<N, dt — шаг по времени (в секундах), omega — циклическая частота, omega = 2pi50 (для 50 Гц). Тогда

double Re = 0, Im = 0; // вещественная и мнимая части 
for(int i=0; i<N; i++){
   Re += cos(i*dt*omega)*u[i];
   Im += sin(i*dt*omega)*u[i];
}
Re *= 2./N;
Im *= 2./N;
double A = sqrt(Re*Re+Im*Im); // модуль 
double phi = atan2(Im, Re); // фаза

Фурье-преобразование на заданной частоте даст некоторое комплексное число Re+j Im, где j - мнимая единица. Модуль этого числа будет амплитудой колебаний (то что Вы ищете), фаза будет показывать синус там, косинус или что то среднее. Гарм. колебания в общем случае задаются как A cos(omega t+phi) ну или как (Re+j Im) exp(j omega t) — это не одно и то же но близкие фиговины;-)

Это будет работать на достаточно большом интервале времени (много больше чем период колебаний).

для 6Вт и 12Вт лампочек разница довольно маленькая

А, тогда понятно.

Исходная версия AntonI, :

Пусть u[i] — сигнал, 0<=i<N, dt — шаг по времени (в секундах), omega — циклическая частота, omega = 2pi50 (для 50 Гц). Тогда

double Re = 0, Im = 0; // вещественная и мнимая части 
for(int i=0; i<N; i++){
   Re += cos(i*dt*omega)*u[i];
   Im += sin(i*dt*omega)*u[i];
}
Re *= 2./N;
Im *= 2./N;
double A = sqrt(Re*Re+Im*Im); // модуль 
double phi = atan2(Im, Re); // фаза

Фурье-преобразование на заданной частоте даст некоторое комплексное число Re+jIm, где j - мнимая единица. Модуль этого числа будет амплитудой колебаний (то что Вы ищете), фаза будет показывать синус там, косинус или что то среднее. Гарм. колебания в общем случае задаются как Acos(omegat+phi) ну или как (Re+jIm)exp(jomega*t) — это не одно и то же но близкие фиговины;-)

Это будет работать на достаточно большом интервале времени (много больше чем период колебаний).

для 6Вт и 12Вт лампочек разница довольно маленькая

А, тогда понятно.