Этот пример показывает, как постараться не искажать при субдискретизации сигнала. Если дискретное время основополосная спектральная поддержка сигнала не ограничивается интервалом радианов ширины, субдискретизирующих результатами в искажении. Искажение является искажением, которое происходит, когда перекрывающиеся копии спектра сигнала добавляются вместе. Чем больше основополосная спектральная поддержка сигнала превышает радианы, тем более серьезный искажение. Продемонстрируйте искажение в сигнале, субдискретизируемом два. Основополосная спектральная поддержка сигнала превышает радианы по ширине.
Создайте сигнал с основополосной спектральной поддержкой, равной радианам. Используйте fir2
, чтобы разработать сигнал. Постройте спектр сигнала.
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')
Вы видите, что основополосная спектральная поддержка сигнала превышает.
Субдискретизируйте сигнал фактором 2 и постройте спектр субдискретизируемого сигнала со спектром исходного сигнала.
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
В дополнение к амплитудному масштабированию спектра суперпозиция наложения спектральных копий вызывает искажение исходного спектра для.
Увеличьте основополосную спектральную поддержку сигнала к и субдискретизируйте сигнал 2. Постройте исходный спектр наряду со спектром субдискретизируемого сигнала.
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
Увеличенная спектральная ширина приводит к более явному искажению в спектре субдискретизируемого сигнала, потому что больше энергии сигнала снаружи.
Наконец, создайте сигнал с основополосной спектральной поддержкой, ограниченной. Субдискретизируйте сигнал фактором 2 и постройте спектр исходных и субдискретизируемых сигналов. Субдискретизируемый сигнал является полной полосой, но форма спектра сохраняется, потому что спектральные копии не накладываются. Нет никакого искажения.
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
Вы видите в предыдущей фигуре, что форма спектра сохраняется. Спектр субдискретизируемого сигнала является расширенной и масштабированной версией спектра исходного сигнала, но нет никакого искажения.
downsample
| fir2
| freqz