如何使用傅里叶级数进行卷积

How to perform convolution using Fourier Series

好的,让我切入正题。

我正在尝试使用 MATLAB (i) 根据已知系数生成傅里叶级数,然后 (ii) 确定冲量已知时的输出函数

到目前为止,我使用这段代码获得了傅里叶级数:

clear all
syms x k L n
evalin(symengine,'assume(k,Type::Integer)');
a = @(f,x,k,L) (2/(pi*k))* sin((pi*k)/(2 * L));
fs = @(f,x,n,L) (1/2*L) + symsum(a(f,x,k,L)*cos(k*2*pi*x/L),k,1,n);
f = x;
pretty(fs(f,x,11,1))

这可以正常工作。现在脉冲响应如下:

h = heaviside(x) * exp(-5*x);

现在,为了得到这个函数,我们需要和相应的functions.But进行卷积,当我输入以下内容时,我得到了错误:

x1 = fs(f,x,1,1);
conv(h,x1)

Undefined function 'conv2' for input arguments of type 'sym'.
Error in conv (line 38) 
c = conv2(a(:),b(:),shape);

任何帮助将不胜感激

那是因为 conv 只定义了数字输入。如果您想以符号方式求出卷积,则必须自己使用积分以符号方式输入方程。

如果你还记得,卷积积分定义为:

来源:Wikipedia

因此,你会这样做:

syms x tau;
F = int(h(tau)*x1(x-tau),'tau',-inf,+inf);

int 是 MATLAB 中的一个函数,可以为您进行符号积分。另请注意,卷积积分是可交换的,因此这也有效:

来源:Wikipedia

因此,如果您这样做,您也应该得到相同的答案:

syms x tau;
F = int(h(x-tau)*x1(tau),'tau',-inf,+inf);

希望对您有所帮助!