我是一名新的MATLAB用户。尝试将y初始化为if语句中的计算值。但是,当我尝试绘制y时,它表示未定义
function [y,xmax] = Alaw(x,A,ymax)
if nargin<3, ymax=1; end
if nargin<2, A=87.6; end
xmax=max(abs(x));
temp = ymax/A;
if ((x > 0) & ( x < temp ))
y = (A * abs(x)) ./ (1 + log(A) ).*sign(x);
end
if (x > temp)
y = ymax*( 1 + log(A*abs(x/ymax)) )./( 1+log(A) ).*sign(x);
end
fprintf('Plotting Data ...\n');
hold on;
figure;
plot(y);
xlabel('x-axis');
ylabel('y-axis');
title(' A LAW ');
pause;
fprintf('Writing the audio file ...\n');
wavwrite(y, 22050, 'Alaw.wav');
end
答案 0 :(得分:4)
如果x
小于或等于零,或者x
等于temp
,则if语句都不为真,因此,y
永远不会得到定义。您可能希望使用if..elseif..else
重新编写逻辑,以确保在每种情况下都分配y
:
if ((x > 0) & ( x < temp ))
y = (A * abs(x)) ./ (1 + log(A) ).*sign(x);
elseif (x > temp)
y = ymax*( 1 + log(A*abs(x/ymax)) )./( 1+log(A) ).*sign(x);
else
y = NaN(size(x)); % no valid y; this won't plot anything, but won't error
end
请注意,x>0
是数组时,x
会导致意外结果。如果all
的全部或任何元素分别满足条件,请使用any
或x
以确保满足条件。
答案 1 :(得分:0)
适合我:
>> Alaw([1 2 3])
Plotting Data ...
ans =
1.0000 1.1267 1.2007