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

时间:2015-05-23 13:34:45

标签: matlab sum continuous-integration convolution fourier-descriptors

好吧,让我切入追逐。

我正在尝试使用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);

现在,为了获得该功能,我们需要使用各自的函数执行卷积。但是当我输入以下内容时,我得到错误:

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);

任何帮助将不胜感激

1 个答案:

答案 0 :(得分:0)

这是因为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);

希望这有帮助!