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