Exemple #1
0
def gmf_iaif(
    psd,
    glottal_order=3,
    vt_order=48,
):
    """
    psd : 1-d numpy array, shape : fft_size/2 +1
    """
    fft_size = (psd.shape[0] - 1) * 2
    psd_res = psd
    for i in range(3):
        lpc_coef, g = lpc.psd2lpc(psd_res, order=1)
        re_psd = lpc.lpc2psd(lpc_coef, g, fft_size)
        psd_res = np.power(np.sqrt(psd_res) / np.sqrt(re_psd), 2)

    # vt_order vocal tract
    lpc_coef, g = lpc.psd2lpc(psd_res, order=vt_order)
    re_psd = lpc.lpc2psd(lpc_coef, g, fft_size)

    gross_vocal_psd = re_psd

    glottal_psd = psd / gross_vocal_psd

    # final glottal_order glottal

    glottal_lpc, glottal_g = lpc.psd2lpc(glottal_psd, order=glottal_order)
    re_glottal_psd = lpc.lpc2psd(glottal_lpc, glottal_g, fft_size)

    vocal_psd = psd / re_glottal_psd

    # final  vocal tract
    vt_lpc, vt_g = lpc.psd2lpc(vocal_psd, order=vt_order)
    #re_vt_psd = lpc.lpc2psd(vt_lpc,vt_g,fft_size)

    return glottal_lpc, glottal_g, vt_lpc, vt_g
Exemple #2
0
def synthesisLPC2PSD(source_object, filter_object, seeds_signals):
    fft_size = (filter_object["spectrogram"].shape[0] - 1) * 2
    print("synthesis lpc 2 psd")

    excitation_signal, _, _ = synthesisRequiem.get_excitation_signal(
        source_object['temporal_positions'], filter_object['fs'],
        source_object['f0'], source_object['vuv'], seeds_signals['pulse'],
        seeds_signals['noise'], source_object['aperiodicity'])

    psd = filter_object['spectrogram']

    lpcs = []
    gains = []

    start_time = time.time()

    for i in range(psd.shape[1]):
        lpc_coef, g = lpc.psd2lpc(psd[:, i], order=ORDER)
        lpcs.append(lpc_coef)
        gains.append(g)
    print("lpc coef cost {}".format(time.time() - start_time))
    recons_psds = []

    start_time = time.time()
    for lpc_coef, g in zip(lpcs, gains):
        recons_psd = lpc.lpc2psd(lpc_coef, g, fft_size)
        recons_psds.append(recons_psd)
    recons_psds = np.array(recons_psds)
    y0 = synthesisRequiem.get_waveform(excitation_signal,
                                       np.transpose(recons_psds, [1, 0]),
                                       source_object['temporal_positions'],
                                       source_object['f0'],
                                       filter_object['fs'])
    print("filter cost {}".format(time.time() - start_time))
    return y0
Exemple #3
0
def synthesisLPC(source_object, filter_object, seeds_signals):
    fft_size = (filter_object["spectrogram"].shape[0] - 1) * 2
    print("synthesis lpc")
    excitation_signal, _, _ = synthesisRequiem.get_excitation_signal(
        source_object['temporal_positions'], filter_object['fs'],
        source_object['f0'], source_object['vuv'], seeds_signals['pulse'],
        seeds_signals['noise'], source_object['aperiodicity'])

    psd = filter_object['spectrogram']
    lpcs = []
    gains = []

    start_time = time.time()
    for i in range(psd.shape[1]):
        lpc_coef, g = lpc.psd2lpc(psd[:, i], order=ORDER)
        lpcs.append(lpc_coef)
        gains.append(g)
    print("lpc coef cost {}".format(time.time() - start_time))

    lpcs = np.array(lpcs)
    gains = np.array(gains)
    lpcs[:, 0] = np.log(gains)

    poledf = pysptk.synthesis.AllPoleDF(ORDER)

    synthesizer = pysptk.synthesis.Synthesizer(
        poledf, int(filter_object['fs'] * 0.005))

    start_time = time.time()
    y = synthesizer.synthesis(excitation_signal, lpcs)
    print("filter cost {}".format(time.time() - start_time))
    return y
Exemple #4
0
def synthesisGMF_IAIF(source_object, filter_object, seeds_signals):
    fft_size = (filter_object["spectrogram"].shape[0] - 1) * 2
    print("synthesis gmf-iaif")

    excitation_signal, _, _ = synthesisRequiem.get_excitation_signal(
        source_object['temporal_positions'], filter_object['fs'],
        source_object['f0'], source_object['vuv'], seeds_signals['pulse'],
        seeds_signals['noise'], source_object['aperiodicity'])

    psd = filter_object['spectrogram']

    glottal_lpcs = []
    glottal_gains = []
    lpcs = []
    gains = []

    start_time = time.time()
    for i in range(psd.shape[1]):
        lpc_coef, g = lpc.psd2lpc(psd[:, i], order=ORDER)
        glottal_lpc, glottal_g, lpc_coef, g = gmf_iaif.gmf_iaif(psd[:, i],
                                                                vt_order=ORDER)

        glottal_lpcs.append(glottal_lpc)
        glottal_gains.append(glottal_g)
        lpcs.append(lpc_coef)
        gains.append(g)
    print("gmf-iaif cost :{}, frames: {}".format(time.time() - start_time,
                                                 psd.shape[1]))

    recons_psds = []
    start_time = time.time()
    for glottal_lpc, glottal_g, lpc_coef, g in zip(glottal_lpcs, glottal_gains,
                                                   lpcs, gains):
        recons_psd = lpc.lpc2psd(glottal_lpc, glottal_g * g, fft_size)
        #recons_psd *= lpc.lpc2psd(lpc_coef,g,fft_size)
        recons_psds.append(recons_psd)
    recons_psds = np.array(recons_psds)

    y0 = synthesisRequiem.get_waveform(excitation_signal,
                                       np.transpose(recons_psds, [1, 0]),
                                       source_object['temporal_positions'],
                                       source_object['f0'],
                                       filter_object['fs'])
    print("filter cost {}".format(time.time() - start_time))
    return y0
Exemple #5
0
def psd2lpc(psd):

    glottal_lpcs = []
    glottal_gains = []
    lpcs = []
    gains = []

    start_time = time.time()
    for i in range(psd.shape[1]):
        lpc_coef, g = lpc.psd2lpc(psd[:, i], order=ORDER)
        glottal_lpc, glottal_g, lpc_coef, g = gmf_iaif.gmf_iaif(psd[:, i],
                                                                vt_order=ORDER)

        glottal_lpcs.append(glottal_lpc)
        glottal_gains.append(glottal_g)
        lpcs.append(lpc_coef)
        gains.append(g)
    print("gmf-iaif cost :{}, frames: {}".format(time.time() - start_time,
                                                 psd.shape[1]))

    return np.array(glottal_lpcs), np.array(glottal_gains), np.array(
        lpcs), np.array(gains)