Example #1
0
def spectralWhitening(data, sr=None, smoothi=None, freq_domain=False, apply_filter=None):
    """
    Apply spectral whitening to data.
    
    sr: sampling rate (only needed for smoothing)
    smoothi: None or int
    Data is divided by its smoothed (Default: None) amplitude spectrum.
    """
    if freq_domain:
        mask = False
        spec = data
    else:
        mask = np.ma.getmask(data)
        N = len(data)
        nfft = nextpow2(N)
        spec = fft(data, nfft)
    #df = sr/N
    spec_ampl = np.sqrt(np.abs(np.multiply(spec, np.conjugate(spec))))
    if isinstance(smoothi, basestring) and isnumber(smoothi) and smoothi > 0:
        smoothi = int(smoothi * N / sr)
        spec /= ifftshift(smooth(fftshift(spec_ampl), smoothi))
    else:
        spec /= spec_ampl
    if apply_filter is not None:
        spec *= filterResp(*apply_filter, sr=sr, N=len(spec), whole=True)[1]
    if freq_domain:
        return spec
    else:
        ret = np.real(ifft(spec, nfft)[:N])
        if USE_FFTW3:
            ret = ret.copy()
        return fillArray(ret, mask=mask, fill_value=0.)
Example #2
0
 def filter2(self, freqmin=None, freqmax=None, corners=2, zerophase=False):
     """
     Wrapper for Trace.filter, make entry in self.stats.filter.
     """
     if self.stats.is_fft:
         self.data *= filterResp(freqmin, freqmax, corners=corners, zerophase=zerophase,
                                 sr=self.stats.sampling_rate, N=self.stats.nfft,
                                  whole=True)[1]
         self.stats.filter += 'BP%4.2f,%4.2f,%d,%d' % (freqmin, freqmax, corners, zerophase)
     else:
         mask = np.ma.getmask(self.data)
         if freqmin and freqmax:
             self.filter("bandpass", freqmin=freqmin, freqmax=freqmax, corners=corners, zerophase=zerophase)
             self.stats.filter += 'BP%4.2f,%4.2f,%d,%d' % (freqmin, freqmax, corners, zerophase)
         elif not freqmin and freqmax:
             self.filter("lowpass", freq=freqmax, corners=corners, zerophase=zerophase)
             self.stats.filter += 'LP%4.2f,%d,%d' % (freqmax, corners, zerophase)
         elif freqmin and not freqmax:
             self.filter("highpass", freq=freqmin, corners=corners, zerophase=zerophase)
             self.stats.filter += 'HP%4.2f,%d,%d' % (freqmin, corners, zerophase)
         self.data = fillArray(self.data, mask=mask, fill_value=0.)
Example #3
0
 def filter2(self, freqmin=None, freqmax=None, corners=2, zerophase=False):
     """
     Wrapper for Trace.filter, make entry in self.stats.filter.
     """
     if self.stats.is_fft:
         self.data *= filterResp(freqmin,
                                 freqmax,
                                 corners=corners,
                                 zerophase=zerophase,
                                 sr=self.stats.sampling_rate,
                                 N=self.stats.nfft,
                                 whole=True)[1]
         self.stats.filter += 'BP%4.2f,%4.2f,%d,%d' % (freqmin, freqmax,
                                                       corners, zerophase)
     else:
         mask = np.ma.getmask(self.data)
         if freqmin and freqmax:
             self.filter("bandpass",
                         freqmin=freqmin,
                         freqmax=freqmax,
                         corners=corners,
                         zerophase=zerophase)
             self.stats.filter += 'BP%4.2f,%4.2f,%d,%d' % (
                 freqmin, freqmax, corners, zerophase)
         elif not freqmin and freqmax:
             self.filter("lowpass",
                         freq=freqmax,
                         corners=corners,
                         zerophase=zerophase)
             self.stats.filter += 'LP%4.2f,%d,%d' % (freqmax, corners,
                                                     zerophase)
         elif freqmin and not freqmax:
             self.filter("highpass",
                         freq=freqmin,
                         corners=corners,
                         zerophase=zerophase)
             self.stats.filter += 'HP%4.2f,%d,%d' % (freqmin, corners,
                                                     zerophase)
         self.data = fillArray(self.data, mask=mask, fill_value=0.)
Example #4
0
def spectralWhitening(data,
                      sr=None,
                      smoothi=None,
                      freq_domain=False,
                      apply_filter=None):
    """
    Apply spectral whitening to data.
    
    sr: sampling rate (only needed for smoothing)
    smoothi: None or int
    Data is divided by its smoothed (Default: None) amplitude spectrum.
    """
    if freq_domain:
        mask = False
        spec = data
    else:
        mask = np.ma.getmask(data)
        N = len(data)
        nfft = nextpow2(N)
        spec = fft(data, nfft)
    #df = sr/N
    spec_ampl = np.sqrt(np.abs(np.multiply(spec, np.conjugate(spec))))
    if isinstance(smoothi, basestring) and isnumber(smoothi) and smoothi > 0:
        smoothi = int(smoothi * N / sr)
        spec /= ifftshift(smooth(fftshift(spec_ampl), smoothi))
    else:
        spec /= spec_ampl
    if apply_filter is not None:
        spec *= filterResp(*apply_filter, sr=sr, N=len(spec), whole=True)[1]
    if freq_domain:
        return spec
    else:
        ret = np.real(ifft(spec, nfft)[:N])
        if USE_FFTW3:
            ret = ret.copy()
        return fillArray(ret, mask=mask, fill_value=0.)