元信号をFFT(高速フーリエ変換)し,実数から複素数にします.その複素数で表現したものを極形式にし,IFFT(逆高速フーリエ変換)で元の信号を得る,といった場合を考えます.
※複素数を極形式にするときは,対象となる複素数の絶対値と偏角の値が必要です.
上記をScilabでシミュレーションする際,ライブラリpolarを用いた場合と用いない場合とで誤差がでました.
コードより,y1はライブラリabsを使用し絶対値を求め,arctan(アークタンジェント)を使用して偏角を求めた場合です.一方,y2はライブラリpolarからの絶対値,偏角を使用しました.絶対値は両者一致したので,偏角の値が原因..
描画結果から,ライブラリpolarを使うと完全に元波形と一致します.
コード
clear;
t=linspace(0,1,100);
f=1000;
y=sin(2*%pi*f*t);//元信号
size1=length(y);
y_fft=fft(y);
for i=1:1:size1;
[amp,theta]=polar(y_fft(i));
amplitude(i)=amp;//振幅
phase(i)=theta;//偏角
end
y1=ifft(abs(y_fft).*%e^(%i*(atan(imag(y_fft)./real(y_fft)))));
y2=ifft(amplitude.*%e^(%i*phase));
plot(y);//青 元信号
plot(y1,’k’);//黒 arctan使用
plot(y2,’r–‘);//赤 ライブラリpolar使用
