Beispiel #1
0
 def gpu_version(self, sig, up, down, axis, window, gpupath):
     with cp.cuda.Stream.null:
         out = cusignal.resample_poly(
             sig, up, down, axis, window=window, gpupath=gpupath
         )
     cp.cuda.Stream.null.synchronize()
     return out
Beispiel #2
0
def test_resample_poly(num_samps, up, down, window):
    cpu_time = np.linspace(0, 10, num_samps, endpoint=False)
    cpu_sig = np.cos(-cpu_time**2 / 6.0)
    gpu_sig = cp.asarray(cpu_sig)

    cpu_resample = signal.resample_poly(cpu_sig, up, down, window=window)
    gpu_resample = cp.asnumpy(
        cusignal.resample_poly(cpu_sig, up, down, window=window))

    assert array_equal(cpu_resample, gpu_resample)
Beispiel #3
0
    def test_resample_poly(self, linspace_data_gen, num_samps, up, down,
                           window, use_numba):
        cpu_sig, gpu_sig = linspace_data_gen(0, 10, num_samps, endpoint=False)

        cpu_resample = signal.resample_poly(cpu_sig, up, down, window=window)
        gpu_resample = cp.asnumpy(
            cusignal.resample_poly(gpu_sig,
                                   up,
                                   down,
                                   window=window,
                                   use_numba=use_numba))

        assert array_equal(cpu_resample, gpu_resample)
Beispiel #4
0
    def prop(signal, new_sps):

        if signal.is_on_cuda:
            import cusignal
            signal.samples = cusignal.resample_poly(signal[:],
                                                    signal.sps,
                                                    new_sps,
                                                    axis=-1)
        else:
            import resampy
            signal.samples = resampy.resample(signal[:],
                                              signal.sps,
                                              new_sps,
                                              axis=-1,
                                              filter='kaiser_fast')

        signal.sps = new_sps
        return signal
Beispiel #5
0
    def prop(signal, new_fs):

        if signal.is_on_cuda:
            import cusignal
            signal.samples = cusignal.resample_poly(signal[:],
                                                    1,
                                                    signal.fs_in_fiber /
                                                    new_fs,
                                                    axis=-1)
        else:
            import resampy
            signal.samples = resampy.resample(signal[:],
                                              signal.fs_in_fiber,
                                              new_fs,
                                              axis=-1,
                                              filter='kaiser_fast')

        signal.sps = new_fs / signal.baudrate
        signal.sps = int(signal.sps)
        return signal
Beispiel #6
0
    def prepare(self, roll_off, is_cuda=False):

        self.ds = upsampling(self.symbol, self.sps)
        self.ds_in_fiber = np.zeros((self.pol_number, self.symbol.shape[1] * self.sps_in_fiber),
                                    dtype=self.symbol.dtype)
        if is_cuda:
            self.cuda()

        for index, row in enumerate(self.ds):
            row[:] = rrcos_pulseshaping_freq(row, self.fs, 1 / self.baudrate, roll_off, self.is_on_cuda)
            if not self.is_on_cuda:
                import resampy
                from scipy.signal import resample
                #self.ds_in_fiber[index] = resample_po(row,self.sps_in_fiber//self.sps * row.shape[0])
                self.ds_in_fiber[index] = resampy.resample(row, self.sps, self.sps_in_fiber, filter='kaiser_fast')
            else:
                import cusignal
                self.ds_in_fiber[index] = cusignal.resample_poly(row, self.sps_in_fiber / self.sps, 1, axis=-1)
        # self.symbol[1] = self.symbol[0]
        # self.ds_in_fiber[1] = self.ds_in_fiber[0]
        return self
Beispiel #7
0
import polyphase_plot

buffer_size = 2**19  # Number of complex samples per transfer
t_test = 20  # Test time in seconds
freq = 1350e6  # Tune frequency in Hz
fs = 62.5e6  # Sample rate

# Create polyphase filter
fc = 1. / max(16, 25)  # cutoff of FIR filter (rel. to Nyquist)
nc = 10 * max(16, 25)  # reasonable cutoff for our sinc-like function
win = signal.fir_filter_design.firwin(2 * nc + 1, fc, window=('kaiser', 0.5))
win = cupy.asarray(win, dtype=cupy.float32)

# Init buffer and polyphase filter
buff = signal.get_shared_mem(buffer_size, dtype=cupy.complex64)
s = signal.resample_poly(buff, 16, 25, window=win, use_numba=False)

#  Initialize the AIR-T receiver using SoapyAIRT
sdr = SoapySDR.Device(dict(driver="SoapyAIRT"))  # Create AIR-T instance
sdr.setSampleRate(SoapySDR.SOAPY_SDR_RX, 1, fs)  # Set sample rate
sdr.setGainMode(SoapySDR.SOAPY_SDR_RX, 1, True)  # Set the gain mode
sdr.setFrequency(SoapySDR.SOAPY_SDR_RX, 1, freq)  # Tune the frequency
rx_stream = sdr.setupStream(SoapySDR.SOAPY_SDR_RX, SoapySDR.SOAPY_SDR_CF32,
                            [1])
sdr.activateStream(rx_stream)

# Run test
n_reads = int(t_test * fs / buffer_size) + 1
drop_count = 0
for _ in range(n_reads):
    sr = sdr.readStream(rx_stream, [buff], buffer_size)