このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
ダウンサンプリング — エイリアシング
この例では、信号のダウンサンプリングに際してエイリアシングを回避する方法を示します。離散時間信号の基底域スペクトルのサポートが幅 ラジアンの区間に限定されない場合、 によるダウンサンプリングはエイリアシングをもたらします。エイリアシングは、オーバーラップしている信号のスペクトルの複製が加算されて一緒になることで生じる歪みです。信号の基底域スペクトルのサポートが ラジアンを超えるに従い、エイリアシングはより著しくなります。2 によるダウンサンプリングを行った信号のエイリアシングを示します。信号の基底域スペクトルのサポートは、その幅において ラジアンを超過します。
基底域スペクトルのサポートが幅 ラジアンの信号を作成します。fir2
を使用して信号を設計します。信号のスペクトルをプロットします。信号の基底域スペクトルのサポートは、 を超過します。
f = [0 0.2500 0.5000 0.7500 1.0000]; a = [1.00 0.6667 0.3333 0 0]; nf = 512; b1 = fir2(nf-1,f,a); Hx = fftshift(freqz(b1,1,nf,'whole')); omega = -pi:2*pi/nf:pi-2*pi/nf; plot(omega/pi,abs(Hx)) grid xlabel('\times\pi rad/sample') ylabel('Magnitude')
2 の係数で信号をダウンサンプリングして、ダウンサンプリングした信号のスペクトルを元の信号のスペクトルとともにプロットします。スペクトルの振幅のスケーリングに加えて、オーバーラップしているスペクトルの複製の重ね合わせによって、元のスペクトルの歪みが において生じています。
y = downsample(b1,2,0); Hy = fftshift(freqz(y,1,nf,'whole')); hold on plot(omega/pi,abs(Hy)) hold off legend('Original','Downsampled') text(2.5/pi*[-1 1],0.35*[1 1],{'\downarrow Aliasing','Aliasing \downarrow'}, ... 'HorizontalAlignment','center')
信号の基底域スペクトルのサポートを に増やして、信号に対して 2 によるダウンサンプリングを行います。元のスペクトルをダウンサンプリングした信号のスペクトルと共にプロットします。スペクトルの幅を増やした結果、ダウンサンプリングした信号のスペクトルにおいてエイリアシングがより顕著になります。より多くの信号エネルギーが の外側にあるためです。
f = [0 0.2500 0.5000 0.7500 7/8 1.0000]; a = [1.00 0.7143 0.4286 0.1429 0 0]; b2 = fir2(nf-1,f,a); Hx = fftshift(freqz(b2,1,nf,'whole')); plot(omega/pi,abs(Hx)) grid xlabel('\times\pi rad/sample') ylabel('Magnitude') y = downsample(b2,2,0); Hy = fftshift(freqz(y,1,nf,'whole')); hold on plot(omega/pi,abs(Hy)) hold off legend('Original','Downsampled')
最後に、基底域スペクトルのサポートを に制限した信号を作成します。2 の係数で信号をダウンサンプリングして、元の信号とダウンサンプリングした信号のスペクトルをプロットします。ダウンサンプリングした信号はフル バンドです。ダウンサンプリングした信号のスペクトルは、元のスペクトルを引き伸ばして縮尺を変更したバージョンですが、形状は維持されます。スペクトルの複製がオーバーラップしていないためです。エイリアシングはありません。
f = [0 0.250 0.500 0.7500 1]; a = [1.0000 0.5000 0 0 0]; b3 = fir2(nf-1,f,a); Hx = fftshift(freqz(b3,1,nf,'whole')); plot(omega/pi,abs(Hx)) grid xlabel('\times\pi rad/sample') ylabel('Magnitude') y = downsample(b3,2,0); Hy = fftshift(freqz(y,1,nf,'whole')); hold on plot(omega/pi,abs(Hy)) hold off legend('Original','Downsampled')
参考
downsample
| fir2
| freqz