2017-08-06 131 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