xref: /btstack/test/sbc/sbc_synthesis_v1.py (revision 6ccd8248590f666db07dd7add13fecb4f5664fb5)
1*6ccd8248SMilanka Ringwald#!/usr/bin/env python3
2fdfc9b7dSMilanka Ringwaldimport numpy as np
3fdfc9b7dSMilanka Ringwaldimport wave
4fdfc9b7dSMilanka Ringwaldimport struct
5fdfc9b7dSMilanka Ringwaldimport sys
6fdfc9b7dSMilanka Ringwaldimport time
7fdfc9b7dSMilanka Ringwaldfrom sbc import *
8fdfc9b7dSMilanka Ringwald
9fdfc9b7dSMilanka Ringwaldmatrix_R = np.zeros(shape = (16,8))
10fdfc9b7dSMilanka Ringwaldmatrix_C2 = np.zeros(shape = (8,8))
11fdfc9b7dSMilanka Ringwaldmatrix_N = np.zeros(shape = (16,16))
12fc754a2bSMilanka RingwaldV_SGN = [1,1,1,1, 0, -1,-1,-1,-1, 1,1,1,1,1,1,1]
13fc754a2bSMilanka RingwaldV_remap = np.zeros(80)
14fdfc9b7dSMilanka Ringwald
15fdfc9b7dSMilanka Ringwalddef sbc_init_synthesis_v1(M):
16fdfc9b7dSMilanka Ringwald    global matrix_R, matrix_C2, matrix_N
17fdfc9b7dSMilanka Ringwald    if M == 4:
18fdfc9b7dSMilanka Ringwald        print("SBC V1 init failed, 4-subband version not implemented yet")
19fdfc9b7dSMilanka Ringwald    M2 = M << 1
20fdfc9b7dSMilanka Ringwald    Mh = M >> 1
21fc754a2bSMilanka Ringwald    L  = 10 * M
22fc754a2bSMilanka Ringwald    L2 = L << 1
23fdfc9b7dSMilanka Ringwald
24fdfc9b7dSMilanka Ringwald    matrix_R = np.zeros(shape = (M2,M))
25fdfc9b7dSMilanka Ringwald    matrix_C2 = np.zeros(shape = (M,M))
26fdfc9b7dSMilanka Ringwald    matrix_N = np.zeros(shape = (M2,M2))
27fc754a2bSMilanka Ringwald    V_remap  = np.zeros(L)
28fdfc9b7dSMilanka Ringwald
29fdfc9b7dSMilanka Ringwald    R_c1 = 12
30fdfc9b7dSMilanka Ringwald
31fdfc9b7dSMilanka Ringwald    for k in range(Mh):
32fdfc9b7dSMilanka Ringwald        matrix_R[k][k+Mh] = 1
33fdfc9b7dSMilanka Ringwald
34fdfc9b7dSMilanka Ringwald    for k in range(Mh+1,M2):
35fdfc9b7dSMilanka Ringwald        matrix_R[k][abs(R_c1-k)] = -1
36fdfc9b7dSMilanka Ringwald
37fdfc9b7dSMilanka Ringwald    for k in range(M):
38fdfc9b7dSMilanka Ringwald        for i in range(M):
39fdfc9b7dSMilanka Ringwald            matrix_C2[k][i] = np.cos((i+0.5)*k*np.pi/M)
40fdfc9b7dSMilanka Ringwald
41fdfc9b7dSMilanka Ringwald    matrix_N = np.dot(matrix_R, matrix_C2)
42fdfc9b7dSMilanka Ringwald
43fc754a2bSMilanka Ringwald    for i in range(L):
44fc754a2bSMilanka Ringwald        offset = i%M2
45fc754a2bSMilanka Ringwald        if offset >= M:
46fc754a2bSMilanka Ringwald            offset += M2
47fc754a2bSMilanka Ringwald        V_remap[i] = L2/5 * (i/M2) + offset
48fc754a2bSMilanka Ringwald
49fc754a2bSMilanka Ringwald
50fc754a2bSMilanka Ringwald
51fc754a2bSMilanka Ringwalddef VSGN(i,M2):
52fc754a2bSMilanka Ringwald    return V_SGN[i%M2]
53fc754a2bSMilanka Ringwald
54fc754a2bSMilanka Ringwalddef remap_V(i):
55fc754a2bSMilanka Ringwald    global V_remap
56fc754a2bSMilanka Ringwald    return V_remap[i]
57fc754a2bSMilanka Ringwald
58fdfc9b7dSMilanka Ringwalddef sbc_frame_synthesis_v1_4subbands(frame, ch, blk):
59*6ccd8248SMilanka Ringwald    print ("sbc_frame_synthesis_v1_4subbands(frame, ch, blk) not implemented yet")
60fdfc9b7dSMilanka Ringwald    exit(1)
61fdfc9b7dSMilanka Ringwald
62fdfc9b7dSMilanka Ringwalddef sbc_frame_synthesis_v1_8subbands(frame, ch, blk):
63*6ccd8248SMilanka Ringwald    print ("sbc_frame_synthesis_v1_8subbands(frame, ch, blk) not implemented yet")
64fdfc9b7dSMilanka Ringwald    exit(1)
65fdfc9b7dSMilanka Ringwald
66fdfc9b7dSMilanka Ringwalddef matrix_R():
67fdfc9b7dSMilanka Ringwald    global matrix_R
68fdfc9b7dSMilanka Ringwald    return matrix_R
69fdfc9b7dSMilanka Ringwald
70fdfc9b7dSMilanka Ringwalddef matrix_C2():
71fdfc9b7dSMilanka Ringwald    global matrix_C2
72fdfc9b7dSMilanka Ringwald    return matrix_C2
73fdfc9b7dSMilanka Ringwald
74fdfc9b7dSMilanka Ringwalddef matrix_N():
75fdfc9b7dSMilanka Ringwald    global matrix_N
76fdfc9b7dSMilanka Ringwald    return matrix_N
77fdfc9b7dSMilanka Ringwald
78fdfc9b7dSMilanka Ringwalddef R(k,i):
79fdfc9b7dSMilanka Ringwald    global matrix_R
80fdfc9b7dSMilanka Ringwald    return matrix_R[k][i]
81fdfc9b7dSMilanka Ringwald
82fdfc9b7dSMilanka Ringwalddef C2(k,i):
83fdfc9b7dSMilanka Ringwald    global matrix_C2
84fdfc9b7dSMilanka Ringwald    return matrix_C2[k][i]