Search Spectral Audio Signal Processing
Would you like to be notified by email when Julius Orion Smith III publishes a new entry into his blog?
We will now use the window method to design a complex
bandpass filter which passes positive frequencies and rejects
negative frequencies. Since every real signal
possesses a
Hermitian spectrum
, i.e.,
, it follows that, if we filter out the negative
frequencies, we will destroy this spectral symmetry, and the output
signal will be complex for every nonzero real input signal. In other
terms, we want a filter which produces a ``single sideband'' (SSB)
output signal in response to a real input signal (which has two
sidebands about dc, with one sideband being the ``conjugate flip'' of
the other).
An ``analytic signal'' in signal processing is defined as any
signal
having only positive or only negative frequencies, but
not both (typically only positive frequencies). In principle, the
imaginary part of an analytic signal is computed from its real part by
the Hilbert transform (see §B.9). In other
words, one can ``filter out negative-frequencies'' in a signal
by taking its Hilbert transform
and forming the
analytic signal
. Thus, an alternative problem
specification is to ask for a (real) filter which approximates the
Hilbert transform as closely as possible for a given filter order.
The price we pay for choosing a small filter order is greater attenuation at low frequencies. In general, the analytic signal concept is most useful for narrowband signals which look like sinusoids with slow amplitude and/or frequency modulations, such as the output of a single channel of the phase vocoder. Near DC, they tend to break down since, for example, the delay of the imaginary part relative to the real part approaches infinity as frequency goes to zero.
M = 257; % window length = FIR filter length (Window Method) fs = 22050; % sampling rate (Hz) - low by 1/2 for extra LF octave T = 1/fs; % sampling period (sec) f1 = 530; % lower passband limit (Hz) - LF not available at M=257 % and sideband level sought. Also, f1/fs = 0.024 % as used in paper by Reilly et al. (cited below) beta = 8; % beta for Kaiser window for decent sidelobe rejection saveplots = 1;% set nonzero to write out figures doremez = 1; % set to 0 for faster replay (\eg, to touch up plots) dopause = 0; % set to 1 to pause on each plot fn = fs/2; % Nyquist limit f2 = fn - f1; % upper passband limit. See Rabiner and Gold 1975, % p. 172 for why this constraint N = 2^(nextpow2(8*fs/f1)) % large fft size (for ``ideal'' IR) if N<8*M, N = 8*(M-1); end; % for nice displays k1 = N*f1/fs; % bandlimit in bins k1 = round(k1); if k1<2, k1=2; end; % cannot have DC or Nyquist response kn = N/2 + 1; % bin index (1 based) at "Nyquist limit" k1, k2 = kn-k1+1 % print k1, k2 = HF transition bandlimit f1 = k1*fs/N % actual band limits f2 = k2*fs/N clf; % clear graphics
