以下是代码:
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)
答案 0 :(得分:4)
是...... length
命令的危险。
虽然它们具有相同数量的元素,但不具有相同的形状:
>> size(y)
ans =
22050 1
>> size(expEnv)
ans =
1 22050
这将解决这个问题:
z = y .* expEnv.';