Source code for psrsigsim.signal.rf_signal


from __future__ import (absolute_import, division,
                        print_function, unicode_literals)
import numpy as np

from .signal import BaseSignal
from ..utils.utils import make_quant

[docs]class RFSignal(BaseSignal): """a time domain signal at true radio frequency sampling RFSignals must be sampled at twice the maximum resolved frequency, i.e. a few GHz. As such, RFSignals take up a TON of memory. Consider using BasebandSignal if this is a concern. Required Args: fcent [float]: central radio frequency (MHz) bandwidth [float]: radio bandwidth of signal (MHz) Optional Args: sample_rate [float]: sample rate of data (MHz), default: ``None`` If no ``sample_rate`` is given the observation will default to the Nyquist frequency. Sub-Nyquist sampling is allowed, but a warning will be generated. dtype [type]: data type of array, default: ``np.float32`` any numpy compatible floating point type will work """ _sigtype = "RFSignal" _Nchan = 2 def __init__(self, fcent, bandwidth, sample_rate=None, dtype=np.float32): self._fcent = make_quant(fcent, 'MHz') self._bw = make_quant(bandwidth, 'MHz') f_Nyquist = 2 * (self._fcent + self._bw/2) if sample_rate is None: self._samprate = f_Nyquist else: self._samprate = make_quant(sample_rate, 'MHz') if self._samprate < f_Nyquist: msg = ("specified sample rate {} < Nyquist frequency {}" .format(self._samprate, f_Nyquist)) print("Warning: "+msg) self._dtype = dtype
[docs] def to_RF(self): """ Convert signal to RFSignal Returns ------- psrsigsim.signal.RFSignal """ return self
[docs] def to_Baseband(self): """ Convert signal to BasebandSignal """ # rfft this signal # clip array # irfft raise NotImplementedError()
[docs] def to_FilterBank(self, Nsubband=512): """ Convert signal to FilterBankSignal Parameters ---------- Nsubband : int Number of frequency subbands. """ # BB = self.to_Basband() # return BB.to_FilterBank() raise NotImplementedError()