Module rpps.sample.up

Classes

class FFT (ratio)
Expand source code
class FFT(Upsample):
    def run(self, samples):
        frq = np.fft.fft(samples)
        up = self.ratio*np.hstack([
            frq[:len(frq)//2],
            frq[len(frq)//2]/self.ratio,
            np.zeros((len(frq)*self.ratio)-len(frq)-1),
            frq[len(frq)//2]/self.ratio,
            frq[-(len(frq)//2-1):]
        ])

        up = np.fft.ifft(up)
        return up

    def __radd__(self, meta: Meta):
        meta.obj = self.run(meta.obj)
        meta.Fs *= self.ratio
        return meta

Ancestors

Methods

def run(self, samples)
Expand source code
def run(self, samples):
    frq = np.fft.fft(samples)
    up = self.ratio*np.hstack([
        frq[:len(frq)//2],
        frq[len(frq)//2]/self.ratio,
        np.zeros((len(frq)*self.ratio)-len(frq)-1),
        frq[len(frq)//2]/self.ratio,
        frq[-(len(frq)//2-1):]
    ])

    up = np.fft.ifft(up)
    return up
class Sinc (ratio)
Expand source code
class Sinc(Upsample):
    __slots__ = ("pulse")
    def __init__(self, ratio):
        super().__init__(ratio)
        taps = np.max([self.ratio*12, 31])
        self.pulse = ShapingSinc(taps, ratio, 1) # TODO: tune this

    def run(self, samples):
        up = np.zeros(len(samples)*self.ratio, dtype=samples.dtype)
        up[::self.ratio] = samples[::1]
        up = self.pulse.run(up)
        return up

    def __radd__(self, meta: Meta):
        meta.obj = self.run(meta.obj)
        meta.Fs *= self.ratio
        return meta

Ancestors

Instance variables

var pulse
Expand source code
class Sinc(Upsample):
    __slots__ = ("pulse")
    def __init__(self, ratio):
        super().__init__(ratio)
        taps = np.max([self.ratio*12, 31])
        self.pulse = ShapingSinc(taps, ratio, 1) # TODO: tune this

    def run(self, samples):
        up = np.zeros(len(samples)*self.ratio, dtype=samples.dtype)
        up[::self.ratio] = samples[::1]
        up = self.pulse.run(up)
        return up

    def __radd__(self, meta: Meta):
        meta.obj = self.run(meta.obj)
        meta.Fs *= self.ratio
        return meta

Methods

def run(self, samples)
Expand source code
def run(self, samples):
    up = np.zeros(len(samples)*self.ratio, dtype=samples.dtype)
    up[::self.ratio] = samples[::1]
    up = self.pulse.run(up)
    return up
class Upsample (ratio)
Expand source code
class Upsample(Sample):
    __slots__ = ("ratio")
    def __init__(self, ratio):
        self.ratio = ratio

Ancestors

Subclasses

Instance variables

var ratio
Expand source code
class Upsample(Sample):
    __slots__ = ("ratio")
    def __init__(self, ratio):
        self.ratio = ratio