It is good to check that the desired impulse response is not overly
aliased in the time domain. The impulse-response for this example is
plotted in Fig.8.5. We see that it appears quite short
compared with the inverse FFT used to compute it. The script in
Fig.8.6 gives the details of this computation, and also
prints out a measure of ``time-limitedness'' defined as the
norm of the outermost 20% of the impulse response divided by its
total
norm--this measure was reported to be
% for this
example.
![]() |
Note also that the desired impulse response is noncausal. In fact, it is zero phase [452]. This is of course expected because the desired frequency response was real (and nonnegative).
Ns = length(Gdbfk); if Ns~=Nfft/2+1, error("confusion"); end Sdb = [Gdbfk,Gdbfk(Ns-1:-1:2)]; % install negative-frequencies S = 10 .^ (Sdb/20); % convert to linear magnitude s = ifft(S); % desired impulse response s = real(s); % any imaginary part is quantization noise tlerr = 100*norm(s(round(0.9*Ns:1.1*Ns)))/norm(s); disp(sprintf(['Time-limitedness check: Outer 20%% of impulse ' ... 'response is %0.2f %% of total rms'],tlerr)); % = 0.02 percent if tlerr>1.0 % arbitrarily set 1% as the upper limit allowed error('Increase Nfft and/or smooth Sdb'); end figure(2); plot(s,'-k'); grid('on'); title('Impulse Response'); xlabel('Time (samples)'); ylabel('Amplitude'); |