Непрерывное время ряд Фурье - PullRequest
0 голосов
/ 03 апреля 2019

Я пытаюсь определить приближение следующей функции как ctfs:

x(t) = exp(-7|t|)*cos(10*pi*t) для -0.5 <= t < 0.5

Мне сказали использовать тригонометрическую форму рядов Фурье с непрерывным временем (CTFS) для вычисления a[k] и b[k] из x(t), где k - номер гармоники. Kmax = 4.

У меня есть следующий код, и хотя он не дает мне никаких ошибок. Я не знаю, как проверить, правильно ли это, или что я делаю в целом. Это мой первый раз, когда я использую Matlab. Может кто-нибудь помочь мне?

fun = @(t) exp((-7).*abs(t)).*cos(10.*pi.*t);

a = @(k, T, t) fun(t).*cos((2.*pi.*k.*t)./(T));
b = @(k, T, t) fun(t).*sin((2.*pi.*k.*t)./(T));

T = 1; %T =0.5 - (-0.5) where T is fundamental period of x(t)

t = -0.5: T/1000: 0.5;

Kmax = 4; % part a

for k=1:Kmax
  ax = (2./T).*integral(@(t)a(k,T,t),0,T)
end

for k=1:Kmax
  a0 = (1./T).*integral(@(t)fun(t),0,T)
end

for k=1:Kmax
  bx = (2./T).*integral(@(t)b(k,T,t),0,T)
end

% Calcultating x_aprox

x_approx = a0;

for k=1:Kmax
  x_approx = x_approx + ax*cos(2*pi*k*t/T) + bx*sin(2*pi*k*t/T);
end

1 Ответ

0 голосов
/ 03 апреля 2019

Ключи, которые вы хотите найти, находятся в вашем рабочем пространстве MATLAB.

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

Когда вы делаете

a = @(k, T, t) fun(t).*cos((2.*pi.*k.*t)./(T));

b = @(k, T, t) fun(t).*sin((2.*pi.*k.*t)./(T));

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

Здесь a и b будут иметь параметры, k, T и t. Когда придет время подставлять параметры в эти функции, MATLAB будет знать, что делать, основываясь на том, что вы впервые определили здесь.

Действительно, большая часть работы уже сделана для вас в первых трех строках кода.

Здесь линия

fun = @(t) exp((-7).*abs(t)).*cos(10.*pi.*t);

Указывает, что дескриптор функции fun будет иметь параметр t, где t - параметр вектора строки времени, в течение которого будут определены все периодические функции.

...