www.gusucode.com > signal 案例源码程序 matlab代码 > signal/DownsamplingAliasingExample.m

    %% Downsampling — Aliasing
% This example shows how to avoid aliasing when downsampling a signal. If a
% discrete-time signal's baseband spectral support is not limited to an
% interval of width $2\pi/M$ radians, downsampling by $M$ results in
% aliasing. Aliasing is the distortion that occurs when overlapping copies
% of the signal's spectrum are added together. The more the signal's
% baseband spectral support exceeds $2\pi/M$ radians, the more severe the
% aliasing. Demonstrate aliasing in a signal downsampled by two. The
% signal's baseband spectral support exceed $\pi$ radians in width.

%%
% Create a signal with baseband spectral support equal to $3\pi/2$ radians.
% Use |fir2| to design the signal. Plot the signal's spectrum.

F = [0 0.2500 0.5000 0.7500 1.0000];
A = [1.00 0.6667 0.3333 0 0];
Order = 511;
B1 = fir2(Order,F,A);
[Hx,W] = freqz(B1,1,8192,'whole');
Hx = [Hx(4098:end) ; Hx(1:4097)];
omega = -pi+(2*pi/8192):(2*pi)/8192:pi;

plot(omega,abs(Hx))
xlim([-pi pi])
grid
title('Magnitude Spectrum')
xlabel('Radians/Sample')
ylabel('Magnitude')

%%
% You see that the signal's baseband spectral support exceeds
% $[-\pi/2,\pi/2]$.
%
% Downsample the signal by a factor of 2 and plot the downsampled signal's
% spectrum with the spectrum of the original signal.

y = downsample(B1,2,0);
[Hy,W] = freqz(y,1,8192,'whole');
Hy = [Hy(4098:end) ; Hy(1:4097)];

hold on
plot(omega,abs(Hy),'r','linewidth',2)
legend('Original Signal','Downsampled Signal')
text(-2.5,0.35,'\downarrow aliasing','HorizontalAlignment','center')
text(2.5,0.35,'aliasing \downarrow','HorizontalAlignment','center')
hold off

%%
% In addition to an amplitude scaling of the spectrum, the superposition of
% overlapping spectral replicas causes distortion of the original spectrum
% for $\left|\omega\right|>\pi/2$.
%
% Increase the baseband spectral support of the signal to
% $[-7\pi/8,7\pi/8]$ and downsample the signal by 2. Plot the original
% spectrum along with the spectrum of the downsampled signal.

F = [0 0.2500 0.5000 0.7500 7/8 1.0000];
A = [1.00 0.7143 0.4286 0.1429 0 0];
Order = 511;
B2 = fir2(Order,F,A);

[Hx,W] = freqz(B2,1,8192,'whole');
Hx = [Hx(4098:end) ; Hx(1:4097)];
omega = -pi+(2*pi/8192):(2*pi)/8192:pi;

plot(omega,abs(Hx))
xlim([-pi pi])

y = downsample(B2,2,0);
[Hy,W] = freqz(y,1,8192,'whole');
Hy = [Hy(4098:end) ; Hy(1:4097)];

hold on
plot(omega,abs(Hy),'r','linewidth',2)
grid
legend('Original Signal','Downsampled Signal')
xlabel('Radians/Sample')
ylabel('Magnitude')
hold off

%%
% The increased spectral width results in more pronounced aliasing in the
% spectrum of the downsampled signal because more signal energy is outside
% $[-\pi/2,\pi/2]$.
%
% Finally, construct a signal with baseband spectral support limited to
% $[-\pi/2,\pi/2]$. Downsample the signal by a factor of 2 and plot the
% spectrum of the original and downsampled signals. The downsampled signal
% is full band, but the shape of the spectrum is preserved because the
% spectral copies do not overlap. There is no aliasing.

F = [0 0.250 0.500 0.7500 1];
A = [1.0000 0.5000 0 0 0];
Order = 511;
B3 = fir2(Order,F,A);
[Hx,W] = freqz(B3,1,8192,'whole');
Hx = [Hx(4098:end) ; Hx(1:4097)];
omega = -pi+(2*pi/8192):(2*pi)/8192:pi;

plot(omega,abs(Hx))
xlim([-pi pi])

y = downsample(B3,2,0);
[Hy,W] = freqz(y,1,8192,'whole');
Hy = [Hy(4098:end) ; Hy(1:4097)];

plot(omega,abs(Hx))
hold on
plot(omega,abs(Hy),'r','linewidth',2)
grid
legend('Original Signal','Downsampled Signal')
xlabel('Radians/Sample')
ylabel('Magnitude')
hold off

%%
% You see in the preceding figure that the shape of the spectrum is
% preserved. The spectrum of the downsampled signal is a stretched and
% scaled version of the original signal's spectrum, but there is no
% aliasing.