sdrplay.py 文件源码

python
阅读 23 收藏 0 点赞 0 评论 0

项目:weakmon 作者: rtmrtmrtmrtm 项目源码 文件源码
def rawread(self):
        aty = ctypes.c_int16 * self.samplesPerPacket
        xi = aty()
        xq = aty()
        firstSampleNum = ctypes.c_uint(0)
        grChanged = ctypes.c_uint(0)
        rfChanged = ctypes.c_uint(0)
        fsChanged = ctypes.c_uint(0)
        err = self.lib.mir_sdr_ReadPacket(ctypes.byref(xi),
                                          ctypes.byref(xq),
                                          ctypes.byref(firstSampleNum),
                                          ctypes.byref(grChanged),
                                          ctypes.byref(rfChanged),
                                          ctypes.byref(fsChanged))
        if err != 0:
            sys.stderr.write("sdrplay: mir_sdrReadPacket failed: %d\n" % (err))
            sys.exit(1)

        # I don't know if these are needed.
        if grChanged.value != 0:
            self.lib.mir_sdr_ResetUpdateFlags(1, 0, 0)
        if rfChanged.value != 0:
            self.lib.mir_sdr_ResetUpdateFlags(0, 1, 0)
        if fsChanged.value != 0:
            self.lib.mir_sdr_ResetUpdateFlags(0, 0, 1)

        # ii = numpy.fromstring(xi, dtype=numpy.int16)
        # qq = numpy.fromstring(xq, dtype=numpy.int16)

        ii = [ xi[i] for i in range(0, self.samplesPerPacket) ]
        ii = numpy.array(ii).astype(numpy.float64)

        qq = [ xq[i] for i in range(0, self.samplesPerPacket) ]
        qq = numpy.array(qq).astype(numpy.float64)

        iq = ii + 1j*qq

        # theory: firstSampleNum is only 16 bits, upper bits are junk.
        num = firstSampleNum.value
        num = num & 0xffff
        if self.expect != None and num != self.expect:
            print("%d vs %d -- gap %d" % (self.expect, num, num - self.expect))

        self.expect = (num + self.samplesPerPacket) & 0xffff

        return iq

    # blocking read.
    # returns [ samples, end_time ]
评论列表
文章目录


问题


面经


文章

微信
公众号

扫码关注公众号