如何创建零矩阵,传递For循环之外的值,以及如何绘制结果

时间:2013-11-30 01:19:47

标签: matlab for-loop plot fft convolution

最初的问题非常简单:“开发一个评估卷积的程序”

问题在于编程,我们不允许使用CONV function因此我们将利用傅里叶变换将其发送到频域,将两个信号相乘,然后逆傅立叶变换它们。 / p>

从概念上讲,这并不困难,但我们不允许使用任何转换函数。

最后我们留下直接分析。

1)乘以指数函数后对两个信号进行积分。

2)将两个功能相乘。

3)将答案乘以1 /(2 * pi)并进行积分。

4)绘制结果。

(我们的老师基本上说我们必须使用trapz function

这是我到目前为止的代码:

t = -5:.1:5;

w = pi;

x = zeros(101,1);

h = zeros(101,1);

y = zeros(101,1);

Y = zeros(101,1);

H = zeros(101,1);

X = zeros (101,1);


for i = 1:101;

    x(i) = exp((-3*t)+(-1i*w*t));

    h(i) = exp((-2*t)+(-1i*w*t));

   X(i) = trapz(t,x);

   H(i) = trapz(t,h);

   Y(i) = X.*H;

   y(i) = (1/(2*pi))*trapz(t,Y.*exp(-1i*w*t));

end

disp (length(t))

disp (length(y))

figure(1);

subplot(1,2,1),plot(t,real(y));grid on;

这是我需要帮助的地方。 我知道我需要为y创建一个零向量,但是到目前为止,我正在努力解决语法和大小调整问题,我也无法将其置于for循环之外并进行绘制。 < / p>

我将For循环的索引从1:101放入,因为它不需要 abs()函数,它允许我跳过处理零值。大!这是下一期:

x(i) = exp((-3*t)+(-1i*w*t));

x向量在循环结束时仍然用零填充,并且没有从等式中赋值。为什么是这样? (这也是h的情况)这两个问题在其余的代码中滚雪球。 附带问题:有没有办法考虑指数,如 abs()适用于否定数据?

我需要超过10个声誉才能发布超过两个链接...所以我无法链接我经历过的页面,但基本上是零矩阵,绘图,卷积,绘制For循环数据和零矩阵最大可变大小。

如果有任何其他信息我可以提出,请问如果有更好的方法来实现这一目标,请说明,并提供深入的解释。

感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

您可以使用命令

生成零向量/矩阵并将其存储在 yt
yt = zeros(r,c)

其中 r c 分别是矩阵的行和列。

另一个问题似乎是存储结果。您可以将结果保存到矢量中,比如说,按

y(idx) = [your calculations]

其中 idx 是循环索引。这样,来自循环的每个评估的每个结果被单独存储以供稍后访问。您可以通过矢量中的索引访问(读取和写入)元素,例如

y(1)
y(3)

将在Matlab的命令窗口中返回 y 的第一个和第三个元素。

当然,您应该预先分配y - 例如通过填充适当大小的零向量 - 然后再开始循环以使程序更快:

y = zeros(100,1);

其中100是您要存储的元素数。没有预先分配,它现在可以正常工作。 Matlab将为您完成工作。

[edit / add] 首先:使用循环索引来引用元素的好选择。但是,强烈建议不要使用 i ,因为它也指虚构单位。一般情况下,避免使用 i j 作为变量名,无论您使用哪种语言进行编程。请改用 ii jj 。有些人甚至使用双字母名称作为循环变量,例如aa,bb,ii,..

我立即看到的第二个问题如下。这里有两件事情混淆:vector-typed t 和元素x(ii)的标量值:

x(i) = exp((-3*t)+(-1i*w*t));

修复i-issue(循环变量名称)后,Matlab可能会发出数组维度不匹配错误。要存储值的结果和变量必须在类型和大小上相等。您还需要在t中添加元素,例如

x(ii) = exp((-3*t(ii))+(-1i*w*t(ii)))

或者,Matlab允许您完全绕过循环结构:

x = exp((-3*t)+(-1i*w*t));

我从

看到了
Y = X.*H

您已经发现了对向量的元素操作。这些有助于在没有循环的情况下进行所有计算。

PS:如果这些建议对你有帮助,那么答案的作者(我看到你发布了另一个问题并接受了答案作为解决方案)很高兴收到一个投票。 ; - )