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使用して、の要素のすべてまたはいずれかがそれぞれ条件を満たしている場合に、条件が満たされていることを確認します。allanyx

于 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 に答える