Matlab中的多重卷积
我想数值计算几个卷积,比如 其中Matlab中的多重卷积,matlab,plot,convolution,Matlab,Plot,Convolution,我想数值计算几个卷积,比如 其中x,y,z,w功能在以下代码中给出: t = linspace(-100,100,10000); x = t.*exp(-t.^2); y = exp(-4*t.^2).*cos(t); z = (t-2)/((t-2).^2+3^2); w = exp(-3*t.^2).*exp(2i*t); u = conv(conv(conv(x,y),z),w); plot(t,u) % ??? - if we want to convolute N functi
x
,y
,z
,w
功能在以下代码中给出:
t = linspace(-100,100,10000);
x = t.*exp(-t.^2);
y = exp(-4*t.^2).*cos(t);
z = (t-2)/((t-2).^2+3^2);
w = exp(-3*t.^2).*exp(2i*t);
u = conv(conv(conv(x,y),z),w);
plot(t,u) % ??? - if we want to convolute N functions, what range should t span?
这是计算和绘制多重卷积的最有效方法吗?对每个卷积的函数进行数值积分通常更好吗
编辑:
这是我卷积的真实部分,u
vst
:
鉴于以下海报建议的方法(使用FFT),我:
造成这种差异的原因是什么?如果信号长度较长,fft方法会更好 下面是一个例子
t = linspace(-100,100,10000);
x = t.*exp(-t.^2);
y = exp(-4*t.^2).*cos(t);
z = (t-2)/((t-2).^2+3^2);
w = exp(-3*t.^2).*exp(2i*t);
L_x=fft(x);
L_y=fft(y);
L_z=fft(z);
L_w=fft(w);
L_u=L_x.*L_y.*L_z.*L_w; %convolution on frequency domain
u=ifft(L_u);
figure(1)
plot(t,abs(u))
figure(2)
plot(t,real(u))
figure(3)
plot(t,imag(u))
这看起来不错,但我不太喜欢使用傅里叶变换(我的代码将是一个更大的程序的一小部分,我不应该使用FFTs)。选择取决于你~我认为如果信号不长,“conv”函数会很好地工作。我在你的代码中唯一更改的是
t=linspace(-100100,1e6)代码>…是否使用1e6的“conv”函数检查代码?我认为第一张图片看起来像是使用10000而不是1e6。离散卷积是两个离散函数的乘积之和,因此如果增加采样点的数量,拾取值也会增加。嗨。你找到办法了吗?如何计算x轴的正确值?比如说,我们想计算100个标准正态分布的卷积,每个输入分布在闭合区间$[-a,a]$上的$n$点采样。确切的结果是另一个正常的pdf,平均值为0美元,方差为10美元,我认为应该跨越一个区间$[-100a,100a]$。你能提供一个Matlab代码的细节来实现这一点吗?非常感谢