2017-08-06 72 views
1

我有以下代码:绘制正弦波的集合

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循环,需要从m每次k一个值,这样做,但我不知道该如何继续。

+0

X = M * SIN(2 * PI ** K * T) – Mohammad

+0

请使用[编辑]链接添加其他信息或包含更正。 –

+0

我需要25个正弦波,我可以逐一绘制它们然后将它们加在一起,但需要很长时间,这就是为什么我想要做一个循环。 – Mohammad

回答

0

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

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 

这是结果:

The result

注意,元素的km在你的代码的数量是不同的,所以我不得不去改变它。

+0

它不应该是这样的。 K是频率,结果应该是从26Hz到50Hz开始的正弦波,m是它们的大小。 – Mohammad

+0

我需要25个正弦波,我可以一个接一个地绘制它们,然后将它们加在一起,但需要很长时间,这就是为什么我想要一个循环。 – Mohammad

0

使用的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这里绘制它:

​​

+0

我试过了,结果错误==> a4在7 K是频率和结果应该是从26 Hz到50 Hz开始的正弦波,m是它们的强度 – Mohammad

+0

我需要25个正弦波,我可以绘制它们一个然后将它们加在一起,但需要很长时间,这就是为什么我想要一个循环。 – Mohammad

+0

@Mohammad上面的代码确实如此。它绘制了25个不同'和'k'的正弦波。在for循环中不需要将它们全部绘制在一起。至于错误,请参阅与您的Matlab版本相关的代码中的注释。 – EBH