为什么我改变时间会对MATLAB中的输出图产生相反的影响?

时间:2015-09-02 03:18:13

标签: matlab plot sampling subplot

这是我的代码:

clear all;
%% Load the earthquake data file
load ECE350_Earthquake_Demo.mat
tearth = 0:dt:(length(d)-1)*dt;
t1 = tearth';
%% Play the sound of the earthquake
sound(d, fs)
figure,subplot(3, 1, 1); % 3 subplots in a 3x1 matrix
plot(t1,d) %% plots f(t)
title('First Subplot f(t)')

subplot(3, 1, 2);
plot(t1*2, d) %% plots f(2t)
title('Second Subplot f(2t)')

subplot(3, 1, 3);
plot(t1*(1/2), d) %% plots f(t/2)
title('Third Subplot f(t/2)')

xlim([0 20]);
orient landscape
delete 'Demo_plot1.pdf'
print -dpdf 'Demo_plot1'

此代码加载到地震数据文件中,并将输出绘制到图表上。

我将垂直绘制三个不同的子图,并分别绘制f(t),f(2t)和f(t / 2)。

f(2t)应压缩图形,f(t / 2)应自然地扩展图形。 我的代码执行相反的操作 - f(2t)压缩,f(t / 2)扩展(t1 * 2和t1 / 2是我实现它的方式)。

输出格式很好,一切正常。这两个图表刚刚切换。

为什么会这样?

1 个答案:

答案 0 :(得分:0)

这是一种干净的方式,可以看到f(2t)确实在MATLAB中压缩函数,就像你认为的那样:

t = 0:.1:2*pi;
figure
hold on
plot(t, sin(t))
plot(t, sin(2*t))
plot(t, sin(t/2))
legend({'sin(t)', 'sin(2t)', 'sin(t/2)'})

在我的示例中,这很有效,因为sin 连续:它可以将t的任何值作为输入。在你的情况下,事情有点复杂,因为d 离散:有d(1)d(2),...,但没有{{ 1}}。

如果你只是想看到正确的情节",让我们将d(.5)视为连续函数d的样本,这样{{1}对于整数f。然后,对于这些图,请选择d(n) = f(dt * n) s,这样您就不需要n之间的值:

t

绘制f(t / 2),因为当我们绘制f点时,t值为t2 = t1 * 2; plot(t2, d) = i且f(t)值为{{1} } = t2(i) = t1(i) * 2

d(i)

绘制f(t * 2),因为当我们绘制f(dt * i)点时,t值为f(t1(i)) = t3 = t1 / 2; plot(t3, d) 且f(t)值为{{1} } = i = t3(i)