如何使用傅里叶级数进行卷积
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);
希望对您有所帮助!
好的,让我切入正题。
我正在尝试使用 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);
希望对您有所帮助!