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]