다운샘플링 — 에일리어싱
이 예제에서는 신호를 다운샘플링할 때 에일리어싱을 방지하는 방법을 보여줍니다. 이산시간 신호의 기저대역 스펙트럼 범위(spectral support)를 너비 라디안인 구간으로 제한하지 않으면 인자 으로 다운샘플링했을 때 에일리어싱이 발생합니다. 에일리어싱은 신호 스펙트럼의 겹쳐진 복사본이 더해질 때 발생하는 왜곡입니다. 신호의 기저대역 스펙트럼 범위가 라디안을 많이 초과할수록 에일리어싱이 심해집니다. 인자 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