2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки


Правила форума


Посмотреть правила форума



Начать новую тему Ответить на тему На страницу 1, 2, 3  След.
 
 Преобразование Фурье
Сообщение24.09.2018, 05:12 
Аватара пользователя


05/10/12
198
Здравствуйте.

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

Для того, чтобы провести обратную трансформацию, надо для каждого момента времени соложить значения базисных функций при всех частотах перемноженых на значения, полученые от прямого преобразования. То есть значение каждой функции умножить на её коэфицент. и сложить по частотам.

Это работает, но ведь мы получаем значение частот, их амплитуды и фазы, можно ли пойти другим путём?
Нельзя ли представить весь сигнал как сумму синусов или косинусов или функций $ e^{2 \pi  i  w  t}$, но чтобы t была переменная непрерывная, то есть в виде аналитического выражения, формулы, в которую можно подставить любое значение времени?

 Профиль  
                  
 
 Re: Преобразование Фурье
Сообщение24.09.2018, 06:16 


07/10/15

2400
_20_ в сообщении #1340981 писал(а):
Нельзя ли представить весь сигнал как сумму синусов или косинусов или функций $ e^{2 \pi  i  w  t}$, но чтобы t была переменная непрерывная


Можно. Это непрерывное преобразование Фурье (соответствующие формулы легко найти в сети).

 Профиль  
                  
 
 Re: Преобразование Фурье
Сообщение24.09.2018, 11:23 
Аватара пользователя


05/10/12
198
Непрерывное преобрахование Фурье требует на вход непрерывную функцию. А если есть только дискретная?

 Профиль  
                  
 
 Re: Преобразование Фурье
Сообщение24.09.2018, 12:06 
Заслуженный участник


09/05/12
25179
_20_ в сообщении #1341016 писал(а):
Непрерывное преобрахование Фурье требует на вход непрерывную функцию. А если есть только дискретная?
Тогда надо воспользоваться дискретным преобразованием Фурье. :-)

Результат ДПФ - это практически готовые коэффициенты для формулы разложения исходного сигнала в сумму. Подставите их в выражение для ряда Фурье - получите ту самую функцию, которая вам нужна.

 Профиль  
                  
 
 Re: Преобразование Фурье
Сообщение24.09.2018, 12:12 


07/10/15

2400
Тут видимо имеется в виду неравномерная дискретизация. В этом случае БПФ не пойдёт. Но решение есть - нужно напрямую аппроксимировать данные тригонометрическим рядом.

 Профиль  
                  
 
 Re: Преобразование Фурье
Сообщение24.09.2018, 12:24 
Заслуженный участник


09/05/12
25179
Andrey_Kireew в сообщении #1341034 писал(а):
Тут видимо имеется в виду неравномерная дискретизация. В этом случае БПФ не пойдёт.
Зачастую даже в этом случае технически "дешевле" привести все к равномерной сетке, заполнив недостающие данные нулями. Это быстрее, чем возиться с LS-спектрами и т.п. Хотя, конечно, тут надо бы спросить ТС, есть ли у него неравномерность и, если да, то какая.

 Профиль  
                  
 
 Re: Преобразование Фурье
Сообщение24.09.2018, 12:34 


07/10/15

2400
Если просто пропуски, то да. Если же дискрет времени "плавает", и частоты дискретизации, как таковой, нет - то привести не получится.

 Профиль  
                  
 
 Re: Преобразование Фурье
Сообщение24.09.2018, 13:29 
Заслуженный участник


09/05/12
25179
Andrey_Kireew в сообщении #1341040 писал(а):
Если же дискрет времени "плавает", и частоты дискретизации, как таковой, нет - то привести не получится.
На практике такое встречается очень редко - просто из-за ограниченной точности фиксации моментов времени. При этом, как мне кажется, если бы ТС имел шансы столкнуться именно с этим случаем, то он не задавал бы подобные вопросы.

 Профиль  
                  
 
 Re: Преобразование Фурье
Сообщение24.09.2018, 13:59 


07/10/15

2400
Ещё как встречаются. Например, больной диабетом контролирует сахар в крови. Вот такие моменты измерения 11-31, 17-00, 23-45, 23-49 ... Минимальный интервал 1 минута, максимальный - сутки, и всего 20 измерений. Тут пропусков будет в сотни раз больше действительно измеренных значений. В этом случае, если их просто "забить" нулями, не о каком анализе и речи быть не может, ведь эта операция искажает данные. Когда пропусков мало, с этими искажениями ещё можно смириться, а когда много - уже нет.

Этот пример ещё ладно, решаемо, можно больного дисциплинировать, чтобы "по часам" себя "мониторил". Но бывают данные, в которых интервал времени не является произвольным, а например, определяется моментом наступления события. Бывает адаптивная дискретизация и много чего ещё.

Хотя, это всё отступление от темы. Может ТС ни о чём таком даже и не думал.

 Профиль  
                  
 
 Re: Преобразование Фурье
Сообщение24.09.2018, 17:36 
Аватара пользователя


05/10/12
198
Спасибо за предложения, ситуация такая, что сигнал частоты дискретизации примерно 250 Гц.

Но это в реальной ситуации, для примера я беру сгенерированый сигнал $ S = 0.7 \sin(2 \pi 3 t) + \sin(2 \pi 6 t)$
Для преобразования Фурье я использую matlab.

Код:
step = 0.01; %in seconds
SignalLength = 1.5; %in seconds
t = (0:step:SignalLength-step);
S = 0.7*sin(2*pi*3*t) + sin(2*pi*6*t);
F = fft(S);                                                        % Это фурье образ, здесь всё в порядке. F - это коэфиценты разложения.
F2 = abs(F/size(S,2));
F1 = F2(1:size(S,2)/2+1);
F1(2:end-1) = 2*F1(2:end-1);
f = (0:1/size(S,2):0.5)/step;
% Это обратное преобразование, дискретное, оно рабртает.
for n = 1:size(t2,2)
    for k = 1:size(F,2)
        temp2(n) = temp2(n) + abs(F(k)) * exp(1i * angle(F(k))) * exp((2 * pi * 1i * (n - 1) * (k - 1))/(size(t2,2)));
    end
end


Дискретное преобразование:
$F(t) =1/n \sum_{w=1}^{n} F(w)  e^{2 \pi \i /n (w-1) (t-1)}$
Непрерывное преобразование Фурье:
$F(t) = 1/(2 \pi) \int F(w) e^{i w t} dw$

Каким образом подставить в непрерывное преобразование Фурье коэфицениы из дискретного преобразования?

 Профиль  
                  
 
 Re: Преобразование Фурье
Сообщение24.09.2018, 17:42 
Заслуженный участник


09/05/12
25179
Я, кажется, немного вас запутал, написав корявую фразу. Нужно взять выражение для ряда Фурье и подставить полученные коэффициенты в него.

 Профиль  
                  
 
 Re: Преобразование Фурье
Сообщение24.09.2018, 18:50 


05/09/16
11551
_20_ в сообщении #1340981 писал(а):
Нельзя ли представить весь сигнал как сумму синусов или косинусов или функций $ e^{2 \pi  i  w  t}$, но чтобы t была переменная непрерывная, то есть в виде аналитического выражения, формулы, в которую можно подставить любое значение времени?

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

 Профиль  
                  
 
 Re: Преобразование Фурье
Сообщение25.09.2018, 06:11 
Аватара пользователя


05/10/12
198
Pphantom
wrest
Ну вот я бы очень хотел, чтобы оно так легко и просто получилось, но у меня не получается.
Код:
step = 0.01; %in seconds
SignalLength = 1.5; %in seconds
t = (0:step:SignalLength-step);
S = 0.7*sin(2*pi*3*t) + sin(2*pi*6*t);
F = fft(S);                                                        % Это фурье образ, здесь всё в порядке. F - это коэфиценты разложения.
F2 = abs(F/size(S,2));
F1 = F2(1:size(S,2)/2+1);
F1(2:end-1) = 2*F1(2:end-1);
f = (0:1/size(S,2):0.5)/step;


t2 = t;
temp2 = zeros(1,size(t2,2));
for n = 1:size(t2,2)
    for k = 1:size(F,2)
        temp2(n) = temp2(n) + abs(F(k)) * exp(1i * angle(F(k))) * exp((2 * pi * 1i * (n - 1) * (k - 1))/(size(t2,2)));
        %temp3(n) = temp3(n) + abs(F(k)) * exp(1i * angle(F(k))) * exp((2 * pi * 1i * (n - 1) * (k - 1))/(size(t3,2)));
    end
end
temp2 = temp2 / size(temp2,2);
figure
plot(t(1:plotingArea), temp2(1:plotingArea))
title('Signal after transformation')
xlabel('t (milliseconds)')
ylabel('X(t)')



%Вот здесь я пытаюсь изменить вектор времени.
t3 = 0:0.005:1.5;
temp3 = zeros(1,size(t3,2));
for n = 1:size(t3,2)
    for k = 1:size(F,2)
        temp3(n) = temp3(n) + abs(F(k)) * exp(1i * angle(F(k))) * exp((2 * pi * 1i * (n - 1) * (k - 1))/(size(t3,2)));
    end
end
temp3 = temp3 / size(temp3,2);
figure
plot(t3(1:plotingArea), temp3(1:plotingArea))
title('Signal after transformation with new vector t')
xlabel('t (milliseconds)')
ylabel('X(t)')

% Вот здесь я дополнительно избегаю зеркального эффекта.
t3 = 0:0.005:1.5;
temp3 = zeros(1,size(t3,2));
for n = 1:size(t3,2)
    for k = 1:size(F1,2)
        temp3(n) = temp3(n) + abs(F1(k)) * exp(1i * angle(F1(k))) * exp((2 * pi * 1i * (n - 1) * (k - 1))/(size(t3,2)));
    end
end
temp3 = temp3 / size(temp3,2);
figure
plot(t3(1:plotingArea), temp3(1:plotingArea))
title('Signal after transformation  with new vector t and corrected Fourier coefficients')
xlabel('t (milliseconds)')
ylabel('X(t)')


[img]
https://ibb.co/hidaGp[/img]

 Профиль  
                  
 
 Re: Преобразование Фурье
Сообщение25.09.2018, 08:05 


05/09/16
11551
_20_
ЧТО не получается? Вот у вас на картинке "Signal after transformation" - это то что вы хотите.

 Профиль  
                  
 
 Re: Преобразование Фурье
Сообщение25.09.2018, 10:49 


05/09/16
11551
_20_
А... я кажись понял. Поясните, что именно вы делаете в "вот тут я избегаю зеркального эффекта"?
Вам надо б взять только половину коэфициентов (то есть синусы только до 50 герц а не до 100). И всё станет гладко.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 31 ]  На страницу 1, 2, 3  След.

Модераторы: Модераторы Математики, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group