2014-11-22 141 views
2

我正在寫一個函數,它給出了鋼琴的第012鍵的頻率。但是我希望頻率隨着時間衰減,就像在現實生活中一樣。所以我把我的功能與exp(-a * 5)相乘,其中a是從01的一些數字。但它給我一個錯誤:矩陣尺寸必須在Matlab中同意錯誤?

Error using .*
Matrix dimensions must agree.

我該如何解決這個問題?

sr = 16000; 
T = 2; % seconds duration 
t = 0:(1/sr):T; 
n = 1; 
f = ((2^(1/12))^(n-49))*440; 
a = 0:0.01:1; 
y = exp(-a*5).*sin(2*pi*f*t); 
plot(t, y); 

回答

2

您正在試圖乘exp(-a*5)sin(2*pi*f*t),元素的元素。只有兩個矢量具有相同的大小時纔可能。在你的代碼中,t是1x320001,而a是1x101。

我想你想要的是:

sr = 16000; 
T = 2; % seconds duration 
t = 0:(1/sr):T; 
n = 1; 
f = ((2^(1/12))^(n-49))*440; 
a = linspace(0,1,numel(t)); 
y = exp(-a*5).*sin(2*pi*f*t); 
plot(t, y); 

注意,我改變了a的定義linspace(0, 1, numel(t))linspace(a, b, n)創建一個從a到b的向量,其中有n個元素。這是確保你所乘的兩個向量大小相同的最簡單的方法。

enter image description here