如何使实际情节看起来像正确的情节?

时间:2013-12-01 06:36:14

标签: matlab plot indexing fft convolution

提示是制定评估卷积的程序。这是在不使用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;

由于我没有足够的声誉直接发布图像,实际输出和所需的输出如下:

The actual plot is this.

The desired plot is this.

我的主要问题是:为什么我的情节不起作用?

其次:此代码中不需要什么?什么可以使这个代码更有效?

1 个答案:

答案 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