def LS_Filter_Multiple(refChannel, srvChannel, filterLen, sampleRate, dopplerBins=[0]): '''Clutter removal with least squares filter. This function allows the least squares filter to be applied over several frequency bins. Useful when there is significant clutter at nonzero doppler values. Parameters: refChannel: Array containing the reference channel signal srvChannel: Array containing the surveillance channel signal filterLen: Length of the least squares filter (in samples) dopplerBins: List of doppler bins to filter (default only 0Hz) Returns: srvChannelFiltered: Surveillance channel signal with clutter removed ''' srvChannelFiltered = srvChannel for doppler in dopplerBins: if doppler == 0: srvChannelFiltered = LS_Filter_Toeplitz(refChannel, srvChannelFiltered, filterLen) else: refMod = frequency_shift(refChannel, doppler, sampleRate) srvChannelFiltered = LS_Filter_Toeplitz(refMod, srvChannelFiltered, filterLen) return srvChannelFiltered
def clutter_removal(s1, s2, nlag, Fs, dbins=[0]): '''clutter removal with least squares filter Parameters: s1: reference signal s2: surveillance signal nlag: length of least squares filter Fs: input signal sample frequency dbins: list of doppler bins to do filtering on (default 0) returns: y (surveillance signal with static echoes removed)''' y = s2 for ds in dbins: if ds == 0: y = LS_Filter(s1, y, nlag, 1) else: s1s = frequency_shift(s1, ds, Fs) y = LS_Filter(s1s, y, nlag, 1) return y
def channel_preprocessing(sig, dec, fc, Fs): '''deinterleave IQ samples, tune to channel frequency and decimate''' IQ = deinterleave_IQ(sig) IQ_tuned = frequency_shift(IQ, fc, Fs) IQd = decimate(IQ_tuned, dec) return IQd