История изменений
Исправление 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Вт лампочек разница довольно маленькая
А, тогда понятно.