Пример #1
0
def loop(W, Xpos, Xneg):
    n = W.size
    X = np.arange(n)

    #############
    Xpos, Xneg = se.get_frontiers(W)
    Xpos = hp.refine_frontier_iter(Xpos, W)
    Xneg = hp.refine_frontier_iter(Xneg, W)
    #############

    pcaverage = average_pc_waveform(Xpos, Xneg, W)

    # Ap = hp.approximate_pseudocycles_average(pcaverage)
    # Wp, dWp = hp.parametric_W_wtow(Xpos, Ap, n)

    pcx = interpolate.interp1d(np.linspace(0, 1, pcaverage.size), pcaverage,
                               "cubic")
    Wp = np.zeros(n)
    for i in range(Xpos.size - 1):
        x0 = Xpos[i]
        x1 = Xpos[i + 1]
        Wp[x0:x1] = pcx(np.linspace(0, 1, x1 - x0))
    dWp = np.zeros(n)
    dWp[:-1] = Wp[1:] - Wp[:-1]

    Xf = np.unique(np.hstack([Xpos, Xneg]))
    Ix = hp.split_raw_frontier(Xf, W, 10)

    A = hp.constrained_least_squares_arbitrary_intervals_wtow(
        Wp, dWp, W, Xf[Ix].tolist(), 2)
    We = hp.coefs_to_array_arbitrary_intervals_wtow(A, Wp, Xf[Ix].tolist(), n)
    residue = W - We

    env = hp.coefs_to_array_arbitrary_intervals(A, X, Xf[Ix].tolist(), n)
    # Ws = hp.parametric_W(hp.linearize_pc(Xpos), Ap, n, True)

    Xposl = hp.linearize_pc(Xpos)
    Ws = np.zeros(n)
    for i in range(1, Xposl.size - 1):
        # print(i)
        x0 = Xposl[i]
        x1 = Xposl[i + 1]
        Ws[x0:x1] = pcx(np.linspace(0, 1, x1 - x0))

    return We, Ws * env, residue
Пример #2
0
    return pos_avgpc, pos_orig_pcs, pos_norm_pcs


'''==============='''
''' Read wav file '''
'''==============='''

name = "alto"
W, fps = se.read_wav(f"Samples/{name}.wav")
W = W - np.average(W)
amp = np.max(np.abs(W))
n = W.size
X = np.arange(n)

Xpos_orig, Xneg_orig = se.get_frontiers(W)
Xpos = hp.refine_frontier_iter(Xpos_orig, W)
Xneg = hp.refine_frontier_iter(Xneg_orig, W)

siz = min(Xpos.size, Xneg.size)
Average_ref_X = (Xpos[:siz] + Xneg[:siz]) / 2
Average_ref_X_smooth = np.round(savgol_filter(Average_ref_X, 51,
                                              3)).astype(np.int)
Average_ref_X_smooth = np.unique(np.abs(Average_ref_X_smooth))

Average_ref_X_smooth_linear = hp.linearize_pc_approx(Average_ref_X_smooth)

pos_avgpc, pos_orig_pcs, pos_norm_pcs = average_pc_waveform(
    Average_ref_X_smooth, W)

pcx = interpolate.interp1d(np.linspace(0, 1, pos_avgpc.size), pos_avgpc,
                           "cubic")
Пример #3
0
import signal_envelope as se
import hp
from statistics import mode
'''==============='''
''' Read wav file '''
'''==============='''

name = "piano33"
W, fps = se.read_wav(f"Samples/{name}.wav")
W = W - np.average(W)
amp = np.max(np.abs(W))
n = W.size
X = np.arange(n)

Xpos, Xneg = se.get_frontiers(W)
Xpos = hp.refine_frontier_iter(Xpos, W)
Xneg = hp.refine_frontier_iter(Xneg, W)

T = []
for i in range(1, Xpos.size):
    T.append(Xpos[i] - Xpos[i - 1])
for i in range(1, Xneg.size):
    T.append(Xneg[i] - Xneg[i - 1])
T = np.array(T, dtype=np.int)
maxT = np.max(T)
modeT = mode(T)

Xf = np.sort(np.hstack([Xpos, Xneg]))

Ix = hp.split_raw_frontier(Xf, W, 2)
A = hp.constrained_least_squares_arbitrary_intervals(Xf, np.abs(W), Ix, 2)