• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

Python signal.fftconvolve函数代码示例

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

本文整理汇总了Python中scipy.signal.fftconvolve函数的典型用法代码示例。如果您正苦于以下问题:Python fftconvolve函数的具体用法?Python fftconvolve怎么用?Python fftconvolve使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。



在下文中一共展示了fftconvolve函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的Python代码示例。

示例1: demod_QAM16

def demod_QAM16(QAM, t, f0=1800, fs=48000):
    r = QAM*np.cos(2*np.pi*f0*t)
    i = -QAM*np.sin(2*np.pi*f0*t)

    #plot(r+i)
    num_taps = 100
    lp = signal.firwin(num_taps, np.pi*f0/4,nyq=fs/2.0)
    r_lp = signal.fftconvolve(lp,r)
    i_lp = signal.fftconvolve(lp, i)

    #fig = figure(figsize = (16,4))
    #frange = np.linspace(-fs/2,fs/2,len(r))
    #frange_filt = np.linspace(-fs/2,fs/2,len(r_lp))
    #plt.plot(frange_filt, abs(fft.fftshift(fft.fft(lp))))
    '''
    ylim(-3,3)

    fig = figure(figsize = (16,4))
    plt.plot(frange, abs(fft.fftshift(fft.fft(i))))
    plt.plot(frange_filt, abs(fft.fftshift(fft.fft(i_lp))))

    #r_env = abs(r_lp)
    #i_env = abs(i_lp)
    '''
    r_lp = r_lp[num_taps/2:-num_taps/2+1]
    i_lp = i_lp[num_taps/2:-num_taps/2+1]
    return r_lp, i_lp
开发者ID:viyer,项目名称:ham_qam,代码行数:27,代码来源:qam.py


示例2: detrend

def detrend(EEG):
    window_size = 207*10
    filt = np.ones((window_size,))/float(window_size)
    trend0 = signal.fftconvolve(EEG[:,0], filt, 'same')
    trend1 = signal.fftconvolve(EEG[:,1], filt, 'same')
    trend = np.vstack([trend0,trend1]).T
    return EEG-trend
开发者ID:deoxyribose,项目名称:hugin-munin,代码行数:7,代码来源:specalendar.py


示例3: golayIR

def golayIR(respa, respb, a, b):
    # Comptute impulse response h for Signle Channel answers a and b
    L = len(a)
    h = np.array(np.zeros(respa.shape))
    h = fftconvolve(a[-1::-1], respa, mode="same") + fftconvolve(b[-1::-1], respb, mode="same")
    h = h / (2 * L)
    return h
开发者ID:hpfmn,项目名称:pyacousticmeasure,代码行数:7,代码来源:golay.py


示例4: conv_mul

def conv_mul(lin_op, rh_val, transpose=False, is_abs=False):
    """Multiply by a convolution operator.

    arameters
    ----------
    lin_op : LinOp
        The root linear operator.
    rh_val : NDArray
        The vector being convolved.
    transpose : bool
        Is the transpose of convolution being applied?
    is_abs : bool
        Is the absolute value of convolution being applied?

    Returns
    -------
    NumPy NDArray
        The convolution.
    """
    constant = mul(lin_op.data, {}, is_abs)
    # Convert to 2D
    constant, rh_val = map(intf.from_1D_to_2D, [constant, rh_val])
    if transpose:
        constant = np.flipud(constant)
        # rh_val always larger than constant.
        return fftconvolve(rh_val, constant, mode='valid')
    else:
        # First argument must be larger.
        if constant.size >= rh_val.size:
            return fftconvolve(constant, rh_val, mode='full')
        else:
            return fftconvolve(rh_val, constant, mode='full')
开发者ID:nicaiseeric,项目名称:cvxpy,代码行数:32,代码来源:tree_mat.py


示例5: energy

def energy(traces, duration, dt):
    """
    Compute an mean-squared energy measurement for each point of a
    seismic section.
        
    :param traces: The data array to use for calculating MS energy.
                   Must be 1D or 2D numpy array.
    :param duration: the time duration of the window (in seconds)
    :param dt: the sample interval of the data (in seconds) 
    :returns An array the same dimensions as the input array.
    """

    energy_data = numpy.zeros(traces.shape)
    signal = traces * traces
    n_samples = int(duration / dt)

    window = numpy.ones(n_samples)

    if (len(signal.shape)) == 1:
        ## Compute the sliding average using a convolution
        energy_data = fftconvolve(signal, window, mode="same") / n_samples

    elif len(signal.shape) == 2:
        for trace in range(signal.shape[1]):
            energy_data[:, trace] = fftconvolve(signal[:, trace], window, mode="same")

    else:
        raise ValueError("Array must be 1D or 2D")

    return energy_data
开发者ID:kwinkunks,项目名称:bruges,代码行数:30,代码来源:energy.py


示例6: demodulate2

    def demodulate2(self,samples):
        # DEMODULATION CODE

        # LIMITER goes here

        # low pass & down sampling
        h = signal.firwin(128,80000,nyq=1.2e5)
        lp_samples = signal.fftconvolve(samples, h)

    # polar discriminator

        A = lp_samples[1:lp_samples.size]
        B = lp_samples[0:lp_samples.size-1]

        dphase = ( A * np.conj(B) ) / np.pi

        dphase.resize(dphase.size+1)
        dphase[dphase.size-1] = dphase[dphase.size-2]

        h = signal.firwin(128,16000,nyq=1.2e5)
        rebuilt = signal.fftconvolve(dphase,h)

        output = rebuilt[::self.decim_r2]

        output = self.lowpass(output, self.audioFilterSize)

        return np.real(output)
开发者ID:peragwin,项目名称:fmradio-qt,代码行数:27,代码来源:qtradio.py


示例7: getData

def getData():    #function called to get data
    
    startTime = time.time()
    raw650 = np.array(session[s1Vals])
    raw950 = np.array(session[s2Vals])
  
 #   while True:

   #     if time.time() - startTime >= 5:
    startTime = time.time()
    print('got data')
    working950 = reject_outliers(raw950)
    working650 = reject_outliers(raw650)
    sig950 = np.std(working950)
    sig650 = np.std(working650)
    print(sig650)
    window950 = signal.general_gaussian(51, p=1.5, sig= sig950)
    filtered950 = signal.fftconvolve(window950, working950)
    filtered950 = (np.average(working950) / np.average(filtered950)) * filtered950
    window650 = signal.general_gaussian(51, p=1.5, sig= sig650)
    filtered650 = signal.fftconvolve(window650, working650)
    filtered650 = (np.average(working650) / np.average(filtered650)) * filtered650

  #  filtered = np.roll(filtered, -25)
 #    plt.plot(working950)
 # #   plt.plot(window950)
 #    plt.plot(filtered950)
 #    plt.plot(raw650)
 #    plt.show()
    
    print(filtered950)
    
    print(working950)
    concentration(filtered650,filtered950)
开发者ID:allenwhite,项目名称:ScheduleFour,代码行数:34,代码来源:test.py


示例8: acovf_fft

def acovf_fft(x, demean=True):
    '''autocovariance function with call to fftconvolve, biased

    Parameters
    ----------
    x : array_like
        timeseries, signal
    demean : boolean
        If true, then demean time series

    Returns
    -------
    acovf : array
        autocovariance for data, same length as x

    might work for nd in parallel with time along axis 0

    '''
    from scipy import signal
    x = np.asarray(x)

    if demean:
        x = x - x.mean()

    signal.fftconvolve(x,x[::-1])[len(x)-1:len(x)+10]/x.shape[0]
开发者ID:ChadFulton,项目名称:statsmodels,代码行数:25,代码来源:tsa.py


示例9: SIC_method

def SIC_method(X,Y,order=100):   
    #low-passing to take LFP only
    
    h_for=AR_fit(X,Y,order)
    y_new=signal.fftconvolve(h_for,X)
    h_back=AR_fit(Y,X,order)
    x_new=signal.fftconvolve(h_back,Y)

    #Sx=welch(x_new,nperseg=1000)[1]
    #Sy=welch(y_new,nperseg=1000)[1]

#    Sy=welch(Y,nperseg=1000)[1]
#    Sx=welch(X,nperseg=1000)[1]
#
#    X_Y=delta_estimator_3(Sy/Sx,Sx)
#    Y_X=delta_estimator_3(Sx/Sy,Sy)
            
    #mask1=Sy!=0
    #mask2=Sx[mask1]!=0
    #X_Y=eval('delta_estimator_'+str(method_no))(Sy[mask1][mask2][1:-1]/Sx[mask1][mask2][1:-1],Sx[mask1][mask2][1:-1])
    #Y_X=eval('delta_estimator_'+str(method_no))(Sx[mask1][mask2][1:-1]/Sy[mask1][mask2][1:-1],Sy[mask1][mask2][1:-1])
    #X_Y=eval('delta_estimator_'+str(method_no))(Sy[mask1][mask2][1:-1]/Sx[mask1][mask2][1:-1],Sx[mask1][mask2][1:-1])
    #Y_X=eval('delta_estimator_'+str(method_no))(Sx[mask1][mask2][1:-1]/Sy[mask1][mask2][1:-1],Sy[mask1][mask2][1:-1])

    X_Y=np.var(y_new)/float(np.sum(h_for**2)*np.var(X))
    Y_X=np.var(x_new)/float(np.sum(h_back**2)*np.var(Y))
    
    return X_Y,Y_X
开发者ID:najishajari,项目名称:SIC,代码行数:28,代码来源:parallel_CA3_CA1_2006-4-9_17-29-30.py


示例10: nc_afskDemod

def nc_afskDemod(sig, TBW=2.0, N=74, fs=48000):
    bw = float(TBW*fs)/N
    t = np.r_[:N]/float(fs)
    h = signal.firwin(N,bw/2.0,nyq=float(fs)/2)
    b0=h*np.exp(2*np.pi*1.0j*1200.0*t)
    b1=h*np.exp(2*np.pi*1.0j*2200.0*t)
    return np.abs(signal.fftconvolve(sig,b1)) - np.abs(signal.fftconvolve(sig,b0))
开发者ID:Arctangent1759,项目名称:alexpchu.com,代码行数:7,代码来源:chat.py


示例11: dwt

def dwt(X, L, H, n):
    '''
    Compute the discrete wavelet transform of f with respect to 
    the wavelet filters lo and hi.
    Inputs:
        X -- numpy array corresponding to the signal
        L -- numpy array giving the lo-pass filter
        H -- numpy array giving the hi-pass filter
        n -- integer, giving what level of decomposition
    Returns:
        list of the form [A, D1, D2, ..., Dn] where each entry
        is a numpy array. These are the approximation frame (A)
        and the detail coefficients.
    '''
    coeffs = []
    A = X
    i=0
    while i < n:
        D = fftconvolve(A,H)[1::2]
        A = fftconvolve(A,L)[1::2]
        coeffs.append(D)
        i += 1
    coeffs.append(A)
    coeffs.reverse()
    return coeffs
开发者ID:davidreber,项目名称:Labs,代码行数:25,代码来源:solution.py


示例12: energy

def energy(traces, duration, dt=1):
    """
    Compute an mean-squared energy measurement for each point of a
    seismic section.

    :param traces: The data array to use for calculating MS energy.
                   Must be 1D or 2D numpy array.
    :param duration: the time duration of the window (in seconds), or
                     samples if dt=1.
    :param dt: the sample interval of the data (in seconds). Defaults
               to 1 so duration can be in samples.
    :returns: An array the same dimensions as the input array.
    """

    energy_data = np.zeros(traces.shape)
    signal = traces * traces
    n_samples = int(duration / dt)

    window = np.ones(n_samples)

    if np.ndim(signal) == 1:
        # Compute the sliding average using a convolution
        energy_data = fftconvolve(signal, window, mode='same') \
                     / n_samples

    elif np.ndim(signal) == 2:
        for trace in range(signal.shape[1]):
            energy_data[:, trace] = (fftconvolve(signal[:, trace],
                                                 window,
                                                 mode='same'))

    else:
        raise ValueError('Array must be 1D or 2D')

    return energy_data
开发者ID:aadm,项目名称:bruges,代码行数:35,代码来源:energy.py


示例13: __init__

  def __init__ (self, var, saxis, kernel, fft):
  # {{{
    ''' __init__()'''
    import numpy as np

    assert len(kernel) <= var.shape[saxis], 'Kernel must not be longer than dimension being smoothed.'

    # Construct new variable
    self.saxis = saxis
    self.var = var
    self.kernel = kernel
    self.fft = fft
    self.klen = len(kernel)

    # Normalize and reshape kernel
    self.kernel /= np.sum(self.kernel)
    self.kernel.shape = [self.klen if i == saxis else 1 for i in range(var.naxes)]

    # Determine which convolution function to use
    from scipy import signal as sg
    tdata = np.ones(len(kernel), 'd')
    if self.fft:
      try:
        sg.fftconvolve(tdata, kernel, 'same', old_behaviour=False)
        self._convolve = lambda x, y, z: sg.fftconvolve(x, y, z, old_behaviour=False)
      except TypeError:
        self._convolve = sg.fftconvolve
    else:
      try:
        sg.convolve(tdata, kernel, 'same', old_behaviour=False)
        self._convolve = lambda x, y, z: sg.convolve(x, y, z, old_behaviour=False)
      except TypeError:
        self._convolve = sg.convolve

    Var.__init__(self, var.axes, var.dtype, name=var.name, atts=var.atts, plotatts=var.plotatts)
开发者ID:neishm,项目名称:pygeode,代码行数:35,代码来源:smooth.py


示例14: contexttrack

    def contexttrack(self):
        print("[%s] tracking" % QThread.currentThread().objectName())
        if self._isRunning:
            self.wait.emit()
            t_trackerstart = time.time()
            print('\t start context tracking')
            dx, dy = np.random.randint(0, 20, size=2)
            self.data = np.roll(self.data, dx, axis=0)
            self.data = np.roll(self.data, dy, axis=1)
            self.data[0:dy, :] = 0.
            self.data[:, 0:dx] = 0.
            self.correlation = sig.fftconvolve(self.data, self.referencedata[::-1, ::-1], 'same')
            maxposy, maxposx = np.unravel_index(self.correlation.argmax(), self.correlation.shape)
            xcorrect = int(np.round(self.resolution1/2-maxposx))
            ycorrect = int(np.round(self.resolution2/2-maxposy))
            self.data = np.roll(self.data, ycorrect, axis=0)
            self.data = np.roll(self.data, xcorrect, axis=1)

            # check result
            self.correlation1 = sig.fftconvolve(self.data, self.referencedata[::-1, ::-1], 'same')
            maxposx, mayposy = np.unravel_index(self.correlation1.argmax(), self.correlation1.shape)

            self.update.emit(self.data, self.correlation, xcorrect, ycorrect, self.correlation.max(), time.strftime('%H:%M:%S')+' - ok')

            print('tracking took ', time.time()-t_trackerstart, 's')
            print('\t context tracking done')

            self.goon.emit()
开发者ID:erikwiedemann,项目名称:minion-1,代码行数:28,代码来源:minion_tracker.py


示例15: fir_filter

    def fir_filter(self, fir_ac=None, fir_dc=None, f_ac=None, f_dc=None,
                   a_ac=10, a_dc=10, alpha=None, filter_name=None, **kwargs):
        """Apply filters to generate the lock-in and dc components of phi"""

        if filter_name == 'bessel_matched':
            N_pts = kwargs.get('N_pts', int(self.ks / self.k0_dc * 6))
            dec = kwargs.get('dec', 32)
            n_pts_eval_fir = kwargs.get('n_pts_eval_fir', 2**16)
            window = kwargs.get('window', 'hann')

            fir_ac, fir_dc = _matched_filters(self.ks, self.x_m, N_pts, dec, window,
                                              n_pts_eval_fir)

            self.fir_ac = fir_ac
            self.fir_dc = fir_dc
        else:
            if fir_ac is None:
                if f_ac is None and alpha is None:
                    f_ac = self.fx * 0.5
                elif alpha is not None:
                    f_ac = self.v_tip/self.x_m * alpha
                self.fir_ac = signal.firwin(self.fs / (f_ac) * a_ac,
                                            f_ac, nyq=0.5 * self.fs,
                                            window='blackman')
            else:
                self.fir_ac = fir_ac

            if fir_dc is None:
                if f_dc is None and alpha is None:
                    f_dc = self.fx * 0.5
                elif alpha is not None:
                    f_dc = self.v_tip/self.x_m * alpha
                self.fir_dc = signal.firwin(self.fs/(f_dc) * a_dc,
                                            f_dc, nyq=0.5*self.fs,
                                            window='blackman')
            else:
                self.fir_dc = fir_dc

        indices = np.arange(self.phi.size)
        fir_ac_size = self.fir_ac.size
        fir_dc_size = self.fir_dc.size

        fir_max_size = max(fir_ac_size, fir_dc_size)

        self.m = indices[fir_max_size//2: -fir_max_size//2]
        self.tm = self.t[self.m]

        self._lock = np.exp(np.pi * 2j * self.fx * self.t)

        self.phi_lock = signal.fftconvolve(self.phi * self._lock * 2,
                                           self.fir_ac,
                                           mode='same')

        self.V_lock = self.phi_lock

        self.phi_lock_a = np.abs(self.phi_lock)
        self.phi_lock_phase = np.angle(self.phi_lock)

        self.phi_dc = signal.fftconvolve(self.phi, self.fir_dc, mode='same')
        self.V_dc = self.phi_dc
开发者ID:ryanpdwyer,项目名称:pmefm,代码行数:60,代码来源:pmefm.py


示例16: convolutionFilter

def convolutionFilter(image,vORh):
    if vORh == 'v':
        # return sg.convolve(image, [[1,-1]], "valid")         # Vertical Data
        return sg.fftconvolve(image, [[1,-1]], "valid")         # Vertical Data
    else:
        # return sg.convolve(image, [[1],[-1]], "valid")       # Horizontal Data
        return sg.fftconvolve(image, [[1],[-1]], "valid")       # Horizontal Data
开发者ID:mikejcooper,项目名称:SPS-CW2-Letter-Recognition,代码行数:7,代码来源:FTAnalysis.py


示例17: _transform

    def _transform(self, data):
        """
        Do the transform itself.

        The transform is made by using `scipy.signal.fftconvolve`.

        TODO: document.

        Parameters
        ----------
        data : `~gammapy.detect.CWTData`
            Images for transform.
        """
        from scipy.signal import fftconvolve

        total_background = data._model + data._background + data._approx
        excess = data._counts - total_background
        log.debug('Excess sum: {0:.4f}'.format(excess.sum()))
        log.debug('Excess max: {0:.4f}'.format(excess.max()))

        log.debug('Computing transform and error')
        for idx_scale, kern in self.kernels.kern_base.items():
            data._transform_3d[idx_scale] = fftconvolve(excess, kern, mode='same')
            data._error[idx_scale] = np.sqrt(fftconvolve(total_background, kern ** 2, mode='same'))
        log.debug('Error sum: {0:.4f}'.format(data._error.sum()))
        log.debug('Error max: {0:.4f}'.format(data._error.max()))

        log.debug('Computing approx and approx_bkg')
        data._approx = fftconvolve(data._counts - data._model - data._background,
                                   self.kernels.kern_approx, mode='same')
        data._approx_bkg = fftconvolve(data._background, self.kernels.kern_approx, mode='same')
        log.debug('Approximate sum: {0:.4f}'.format(data._approx.sum()))
        log.debug('Approximate background sum: {0:.4f}'.format(data._approx_bkg.sum()))
开发者ID:mirca,项目名称:gammapy,代码行数:33,代码来源:cwt.py


示例18: ssim

def ssim(img1, img2, cs_map=False):
    """Return the Structural Similarity Map corresponding to input images img1 
    and img2 (images are assumed to be uint8)
    
    This function attempts to mimic precisely the functionality of ssim.m a 
    MATLAB provided by the author's of SSIM
    https://ece.uwaterloo.ca/~z70wang/research/ssim/ssim_index.m
    """
    img1 = img1.astype(numpy.float64)
    img2 = img2.astype(numpy.float64)
    size = 11
    sigma = 1.5
    window = gauss.fspecial_gauss(size, sigma)
    K1 = 0.01
    K2 = 0.03
    L = 255 #bitdepth of image
    C1 = (K1*L)**2
    C2 = (K2*L)**2
    mu1 = signal.fftconvolve(window, img1, mode='valid')
    mu2 = signal.fftconvolve(window, img2, mode='valid')
    mu1_sq = mu1*mu1
    mu2_sq = mu2*mu2
    mu1_mu2 = mu1*mu2
    sigma1_sq = signal.fftconvolve(window, img1*img1, mode='valid') - mu1_sq
    sigma2_sq = signal.fftconvolve(window, img2*img2, mode='valid') - mu2_sq
    sigma12 = signal.fftconvolve(window, img1*img2, mode='valid') - mu1_mu2
    if cs_map:
        return (((2*mu1_mu2 + C1)*(2*sigma12 + C2))/((mu1_sq + mu2_sq + C1)*
                    (sigma1_sq + sigma2_sq + C2)), 
                (2.0*sigma12 + C2)/(sigma1_sq + sigma2_sq + C2))
    else:
        return ((2*mu1_mu2 + C1)*(2*sigma12 + C2))/((mu1_sq + mu2_sq + C1)*
                    (sigma1_sq + sigma2_sq + C2))
开发者ID:AlexBoro,项目名称:python,代码行数:33,代码来源:ssim.py


示例19: nc_afsk1200Demod

def nc_afsk1200Demod(sig, fs=48000.0, TBW=2.0):
    #  non-coherent demodulation of afsk1200
    # function returns the NRZ (without rectifying it)
    # 
    # sig  - signal
    # baud - The bitrate. Default 1200
    # fs   - sampling rate in Hz
    # TBW  - TBW product of the filters
    #
    # Returns:
    #     NRZ  
    # your code here
    taps = fs/1200-1
    bandpass = signal.firwin(taps, 1200, nyq=fs/2)
    spacepass = bandpass * np.exp(1j*2*np.pi*1200*np.r_[0.0:taps]/fs)
    markpass = bandpass * np.exp(1j*2*np.pi*3600*np.r_[0.0:taps]/fs)
    spaces = signal.fftconvolve(sig, spacepass, mode='same')
    marks = signal.fftconvolve(sig, markpass, mode='same')

    analog = np.abs(spaces)-np.abs(marks)
    lowpass = signal.firwin(taps, 2400*1.2, nyq=fs/2)
    filtered = signal.fftconvolve(analog, lowpass, mode='same')
    NRZ = filtered
    
    return NRZ
开发者ID:yizow,项目名称:RiFi,代码行数:25,代码来源:Transmission.py


示例20: run

def run():
    print_complex = get_print_complex()
    convolutionCPU = get_convolution_cpu()
    check_results = get_check_results()

    #data = np.ones((3,3)).astype('complex64')
    data = np.asfortranarray(np.random.randn(3,3).astype('complex64'))
    #kernel = np.ones((3,3)).astype('complex64')
    kernel = np.asfortranarray(np.random.randn(3,3).astype('complex64'))
    result = np.asfortranarray(np.zeros_like(data).astype('complex64'))

    convolutionCPU(_get_float2_ptr(result), _get_float2_ptr(data), _get_float2_ptr(kernel), data.shape[1], data.shape[0], kernel.shape[1], kernel.shape[0], 1, 6)

    print
    print kernel
    print
    print data
    print

    s1 = np.array(data.shape)
    s2 = np.array(kernel.shape)

    print result
    print 
    print fftconvolve(data.real, kernel.real, mode='full').astype('complex64')
开发者ID:npinto,项目名称:python-cuda,代码行数:25,代码来源:conv_gold.py



注:本文中的scipy.signal.fftconvolve函数示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
Python signal.filtfilt函数代码示例发布时间:2022-05-27
下一篇:
Python signal.ellip函数代码示例发布时间:2022-05-27
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap