0

我是一个新的 MATLAB 用户。尝试将 y 初始化为 if 语句中的计算值。但是,当我尝试绘制 y 时,它说 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
4

2 回答 2

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使用allany确保条件得到满足。x

于 2012-08-28T20:26:49.027 回答
0

为我工作:

>> Alaw([1 2 3])
Plotting Data ...

ans =

1.0000    1.1267    1.2007

在此处输入图像描述

于 2012-08-28T20:28:10.507 回答