2012-11-09 5 views
1

코드 동의해야MATLAB - (!들은 "합의"되지만) 행렬의 크기는 여기

fs = 22050; 
x = rand(fs,1); 
x = x - mean(x); % get rid of DC offeset 

% set comb-filter coefficients 
f = 220; % fundamental 
L = round(fs/f); % delay length 
coef = 0.99; % IIR coefficient 

% build delay vector and filter 
b = [1 zeros(1,L-1) coef]; 
y = filter(1, b, x); 

% create amplitude envelope for output 
decay = 8; 
expEnv = exp ((0:(length(y)-1))/length(y)); 
expEnv = (1./expEnv).^ decay; 
fprintf('%d\n',length(expEnv)); 
fprintf('%d\n', length(y)); 

% envelope output signal 
z = y .* expEnv; 
sound(z , fs); % play sound 

그것은 Z = Y를 실행하는 것을 거부 * expEnv 라인.. printf 줄은 y와 expEnv가 모두 동일한 길이 (22050)를 가지고 있음을 보여줍니다.

답변

4

예 ... length 명령의 위험성. 그들은 같은 수의 원소를 가지고 있지만

, 그들은 하지가 같은 모양을 가지고 수행

>> size(y) 
ans = 
     22050   1 
>> size(expEnv) 
ans = 
      1  22050 

이 그 문제를 해결합니다 :

z = y .* expEnv.'; 
+0

예, 전치! 그런 로키 실수 : –

+1

"로케이터 실수". LOL – learnvst