-1

我正在尝试将以下函数的近似值确定为 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
4

1 回答 1

0

您要查找的线索在您的 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 解析实际将要替换的内容,延迟到稍后的时间,该信息可用的地方。

在这里,ab将有参数,kT, 和t。当需要将参数替换为这些函数时,MATLAB 将根据您在此处首先定义的内容知道要做什么。

实际上,大部分工作已经在前三行代码中为您完成。

在这里,线

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

指定 fun 的函数句柄将具有参数t,其中t是时间行向量参数,将在该参数上定义所有周期函数。

于 2019-04-03T05:01:32.813 回答