提示是制定评估卷积的程序。这是在不使用MATLAB内置的 conv 功能的情况下完成的。因此,利用傅立叶变换,将两个函数相乘,然后对产品进行逆傅里叶变换。通过使用直接集成完成转换。建议使用 trapz 函数来实现此目标。
我很感激任何有关如何改进我的代码的反馈,请彻底解释这些改进的内容,并将参考信息与其工作方式联系起来。
鉴于代码:
t = -5:.1:5;
w = pi;
X = zeros(101,1);
H = zeros(101,1);
Y = zeros(101,1);
y = zeros(101,1);
if t >= 0
x = 0;
h = 0;
else
x = exp((-3.*t)+(-1i*w.*t));
h = exp((-2*t)+(-1i*w.*t));
end
for k=2:101
X(k)=trapz(t(1:k),x(1:k));
H(k)=trapz(t(1:k),h(1:k));
Y = (X.*H)*exp(1i*w.*t);
y(k) = (1/(2*pi))*trapz(t(1:k),Y(1:k));
end
disp (length(x))
disp (length(X))
disp (length(Y))
disp (length(y))
disp (y)
figure(1);
subplot(1,2,1),plot(t,real(y));grid on;
由于我没有足够的声誉直接发布图像,实际输出和所需的输出如下:
我的主要问题是:为什么我的情节不起作用?
其次:此代码中不需要什么?什么可以使这个代码更有效?
答案 0 :(得分:2)
我不会完成你的整个作业,但我会给你一些线索:
跳过if t < 0
部分,它不起作用。对于您的考试,尝试了解原因。如果你无法弄明白,那就来你最好的猜测,你可能会得到一个解释=)
请尝试以下方法(不需要循环或if
:
x = exp((-3.*t)+(-1i*pi.*t)).*(t>0);
h
也一样。试着理解.*(t<0)
在这种情况下的作用。
这一个:Y = (X.*H)*exp(1i*w.*t);
应该在循环之外。 为什么?做出猜测,如果你错了,你可能会得到指导。
同样Y
是101x101矩阵。我想你想要它是101x1?您可能需要转换用于创建Y
的表达式中的一个向量。在你这样做之前,你应该弄清楚'
和.'
之间的区别(这种情况下的一个重要区别)。
您正在使用subplot
,但只绘制一张图表。如果要在同一图中绘制图形,请使用hold on
。如果你想在彼此旁边绘图,记得也绘制第二个。
为什么要使用w = pi;
,何时可以在等式中使用pi
?