Filter the signal object. For each channel inside the input signalObj, will be generated a new SignalObj with the channel filtered signal. Args: sigobj: SignalObj Return: output: List A list containing one SignalObj
(self, sigobj)
| 119 | # return self._filter(sigobj) |
| 120 | |
| 121 | def filter(self, sigobj): |
| 122 | """ |
| 123 | Filter the signal object. |
| 124 | |
| 125 | For each channel inside the input signalObj, will be generated a new |
| 126 | SignalObj with the channel filtered signal. |
| 127 | |
| 128 | Args: |
| 129 | sigobj: SignalObj |
| 130 | |
| 131 | Return: |
| 132 | output: List |
| 133 | A list containing one SignalObj with the filtered data for each |
| 134 | channel in the original signalObj. |
| 135 | |
| 136 | """ |
| 137 | if self.samplingRate != sigobj.samplingRate: |
| 138 | raise ValueError("SignalObj must have same sampling rate of filter to be filtered.") |
| 139 | n = self.sos.shape[2] |
| 140 | output = [] |
| 141 | chl = [] |
| 142 | for ch in range(sigobj.numChannels): |
| 143 | sobj = sigobj[ch] |
| 144 | filtered = np.zeros((sobj.numSamples, n)) |
| 145 | for k in range(n): |
| 146 | cContigousArray = sobj.timeSignal[:].copy(order='C') |
| 147 | filtered[:, k] = ss.sosfilt(self.sos[:, :, k].copy(order='C'), |
| 148 | cContigousArray, |
| 149 | axis=0).T |
| 150 | chl.append(copy(sobj.channels[sobj.channels.mapping[0]])) |
| 151 | chl[-1].num = k+1 |
| 152 | chl[-1].name = f'Band {k+1}' |
| 153 | chl[-1].code = f'B{k+1}' |
| 154 | signalDict = {'signalArray': filtered, |
| 155 | 'domain': 'time', |
| 156 | 'samplingRate': self.samplingRate, |
| 157 | 'freqMin': sigobj.freqMin, |
| 158 | 'freqMax': sigobj.freqMax, |
| 159 | } |
| 160 | out = SignalObj(**signalDict) |
| 161 | out.channels = ChannelsList(chl) |
| 162 | # out.timeSignal = out.timeSignal * out.channels.CFlist() |
| 163 | output.append(out) |
| 164 | chl.clear() |
| 165 | return output |
| 166 | |
| 167 | |
| 168 |
no test coverage detected