-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathAACquantizer.m
124 lines (86 loc) · 3.36 KB
/
AACquantizer.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
function [S, sfc, G] = AACquantizer(frameF, frameType, SMR)
% QUERY 1
X = frameF ;
MagicNumber = 0.4054 ;
MQ = 8191 ;
load('TableB219.mat') ;
if ~strcmp (frameType, 'ESH')
a = zeros(size(B219a , 1), 1) ;
a(:) = (16/3)*log2( (max(X)^(3/4))/MQ ) ;
% QUERY 2
S = sign(X).*floor( ( abs(X)* 2^(-a(1)/4) ).^(3/4) + MagicNumber) ;
Xhat = sign(S).*(abs(S)).^(4/3) .* 2^(a(1)/4) ;
noBands = size(B219a, 1) ;
P = zeros(noBands,1);
Pe = zeros(noBands,1);
for i = 1:noBands
start = B219a(i, 2)+1;
finish = B219a(i, 3) +1;
P(i) = sum(X(start:finish ).^2) ;
Pe(i) = sum( ( X(start:finish) - Xhat(start:finish) ).^2) ;
end
T = P./SMR ;
for i = 1:noBands
while Pe(i) < T(i)
a(i) = a(i) + 1 ;
if max(abs( a(2:end) - a(1:end-1) )) >= 60
a(i) = a(i)-1;
break;
end
% i+1 + i ????
start = B219a(i, 2)+1;
finish = B219a(i, 3) +1;
S(start : finish) = sign(X(start : finish)).*floor((abs(X(start : finish)).*2^(-a(i)/4)).^(3/4) + MagicNumber) ;
Xhat(start : finish) = sign(S(start : finish)).*(abs(S(start : finish))).^(4/3) .* 2^(a(i)/4) ;
Pe(i) = sum( ( X(start : finish) - Xhat(start : finish) ).^2) ;
end
end
G = a(1) ;
sfc = a(2:end) - a(1:end-1) ;
sfc = [G ;sfc] ;
else
a = zeros(size(B219b , 1), 8) ;
S = zeros(128, 8);
Xhat = zeros(128, 8);
for f = 1:8
a(:, f) = (16/3)*log2((max(X(:, f)).^(3/4))/MQ) ;
S(:,f) = sign(X(:,f)).*floor((abs(X(:,f)).*2^(-a(1,f)/4)).^(3/4) + MagicNumber) ;
Xhat(:,f) = sign(S(:,f)).*(abs(S(:,f))).^(4/3) .* 2^(a(1,f)/4) ;
end
% QUERY 2
noBands = size(B219b, 1) ;
% subframes
Pe = zeros(noBands,8);
P = zeros(noBands,8);
T = zeros(noBands,8);
for f = 1:8
for i = 1:noBands
start = B219b(i, 2)+1;
finish = B219b(i, 3) +1;
P(i, f) = sum(X(start: finish, f).^2) ;
Pe(i, f) = sum(X(start: finish, f) - Xhat(start: finish, f ).^2) ;
end
T(:, f) = P(:, f)./SMR(:, f) ;
for i = 1:noBands
while Pe(i, f) < T(i, f)
a(i, f) = a(i, f) + 1 ;
if max(abs( a(2:end, f) - a(1:end-1, f) )) >= 60
a(i, f) = a(i, f) - 1 ;
break;
end
% i+1 + i ????
start = B219b(i, 2)+1;
finish = B219b(i, 3) +1;
for j = start: finish
S(j, f) = sign(X(j, f))*floor((abs(X(j, f))*2^(-a(i, f)/4))^(3/4) + MagicNumber) ;
Xhat(j, f) = sign(S(j, f))*(abs(S(j, f)))^(4/3) * 2^(a(i, f)/4) ;
end
Pe(i, f) = sum((X(start: finish, f) - Xhat(start: finish, f)).^2) ;
end
end
end
G = a(1,:) ;
sfc = a(2:end, :) - a(1:end-1, :) ;
sfc = [G ;sfc] ;
end
end