鋸波のFFT

鋸波(のこぎり波)のsin波以外の波形をフーリエ変換してみよう。

以下は、のこぎり波を作成する。

saw=modulo(n*440,fs)/fs - 0.5;
savewave("saw440.wav",saw,fs);

では、この音をフーリエ変換してみよう。

sawfft=fft(saw,-1);
plot2d(fs*n/(2*fs),abs(sawfft*2/l));

以下のようなプロットが得られる。ただし、赤と緑の点線は後から書き加えたものだ。

ここで、注意してほしいのは、鋸波では基本周波数の2倍、3倍、4倍の周波数があるということだ。これらを高調波という。

グラフを良くみると、440Hzから始まる高調波が8000Hz近くまで続くように見える。また、それと対象的な成分は、8000-440Hzから始まって、0Hz近くまで続いている。

本来、8000Hzのサンプリングレートでは4000Hz以上の周波数はあらわすことができない。この波形では、4000Hz以上の周波数を含む波形をむりに8000Hzのサンプリングレートであらわしたために、このような本来存在しない成分が周波数にあらわれている。

このような成分のことを「折り返し歪み」または「エリアシング」と呼ぶ。

エリアシングの音を聞いてみる(ちょっと、聞きづらい音なので、音量を小さくして聞くこと)

 

sf=22050;
x2=loadwave("x2.wav");
l=length(x2);
ss=modulo(1:l,2);
a1=0.2 .* ss .* x2;
sound(a1,sf);


a1はエリアシングにより、ナイキスト周波数近い周波数成分が多く発生している。

以下のようにフィルターをかけることで、エリアシング成分が削除され、聞きやすい音になる。

 

lpf=ffilt("lp",128,0.25,0);
a2=convol(lpf,a1);
sound(a2,sf);