Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab中的多重卷积_Matlab_Plot_Convolution - Fatal编程技术网

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
vs
t

鉴于以下海报建议的方法(使用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代码的细节来实现这一点吗?非常感谢