【问题标题】:Plotting a collection of sine waves绘制一组正弦波
【发布时间】:2017-08-06 12:33:41
【问题描述】:

我有以下代码:

Fs = 1000;
T = 1/Fs;
L = 1000;
t = (0:L-1)*T;
k = 25:1:50;
m = 1:1:25;

其中km 是对应的。我想绘制由以下原因产生的 25 个正弦波:

x = m*sin(2*pi*k*t);

我曾想过使用 for 循环来执行此操作,该循环每次从 mk 中获取一个值,但我不确定如何继续。

【问题讨论】:

  • x=msin(2*pi*k*t)
  • 请使用edit 链接添加更多信息或进行更正。
  • 我需要 25 个正弦波,我可以将它们一个一个地绘制出来,然后将它们加在一起,但这需要很长时间,这就是我想要创建一个 for 循环的原因。
  • 请向我们展示预期的结果(当您按照自己的方式绘制时)。

标签: matlab plot matlab-figure


【解决方案1】:

下面是一个非常基本的绘图解决方案。您会注意到很难看到图中发生了什么,因此您可能需要考虑其他方式来呈现这些数据。

function q45532082
Fs = 1000;
T = 1/Fs;
L = 1000;
t = (0:L-1)*T;
k = 26:1:50;
m = 1:1:25;
%% Plotting
assert(numel(m) == numel(k)); % We make sure that the number of elements is the same.
figure(); hold on; % "hold" is needed if you want to see all curves at the same time.
for ind1 = 1:numel(m)
  plot(t,m(ind1)*sin(2*pi*k(ind1)*t));
end

这是结果:

请注意,您的代码中km中的元素数量不同,所以我不得不更改它。

【讨论】:

  • 不应该是这样的。 K 是频率,结果应该是从 26 Hz 到 50 Hz 开始的正弦波,m 是它们的幅度。
  • 我需要 25 个正弦波,我可以将它们一个一个地绘制出来,然后将它们加在一起,但这需要很长时间,这就是我想要创建一个 for 循环的原因。
【解决方案2】:

使用plot 的功能,您还可以在没有循环的情况下绘制所有正弦波:

Fs = 1000;
T = 1/Fs;
L = 1000;
t = (0:L-1)*T;
k = 26:1:50;
m = 1:1:25;
x = m.*sin(2.*pi.*bsxfun(@times,t.',k)); %this results in an L*25 matrix, each column is data of one wave
% or, if you have version 2016b or newer:
% x = m.*sin(2.*pi.*t.'*k);
plot(t,x) % plot all sines at ones

作为@Dev-iL noted,我还必须更改k

L = 1000 的结果太拥挤,所以我在这里用L = 50 绘制它:

【讨论】:

  • 我试过了,结果 Error in ==> a4 at 7 K 是频率,结果应该是从 26 Hz 到 50 Hz 开始的正弦波,m 是它们的幅度
  • 我需要 25 个正弦波,我可以一个一个地绘制它们然后将它们加在一起,但这需要很长时间,这就是我想要创建一个 for 循环的原因。
  • @Mohammad 上面的代码就是这样做的。它用不同的`和k绘制了25个正弦波。在for 循环中不需要将它们全部绘制在一起。至于错误,请参阅代码中与您的Matlab版本相关的注释。
  • 非常感谢,我的 matlab 版本是旧的 (2010) 这就是为什么我要尝试创建一个 for 循环
  • 你仍然可以使用bsxfun,你不需要for循环
猜你喜欢
  • 1970-01-01
  • 2014-07-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多