-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathADPCM_enc.m
More file actions
73 lines (49 loc) · 1.43 KB
/
ADPCM_enc.m
File metadata and controls
73 lines (49 loc) · 1.43 KB
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
% ADPCM Encoder
clear all
% read wave file
[a, Fs] = audioread('Say My Name.mp3');
% 50ms sample of wave file
anz = Fs * 100;
pos = Fs * 10; % Set cut offset (Cut of top of song)
x = a(pos:pos+anz-1, 1); % left channel
%sound(x,Fs);
K = length(x); % length of sample
N = 6; % predictor order
% Initialization
e = zeros(N+1, K); % predection error, all indicies are +1 because MatLab starts at 1 and not at 0
e(0+1,:) = x; % e(0)(k) = x(k)
b = zeros(N+1, K); % all indicies are +1
b(0+1,:) = x; % b(0)(k) = x(k)
y = zeros(1, N-1 +1); % prediction factor
% Burg Algorithm Nth order predictor:
for n = 1:N-1 +1
num = 0;
den = 0;
for k = n:K-1 % numerator sum
num = num + e(n, k+1)*b(n, k);
end;
for k = 1:K-1 % denominator sum
den = den + e(n, k+1)^2 + b(n, k)^2;
end;
y(n) = 2 * num / den; % nth reflection factor
e(n+1, n+1:K) = e(n, n+1:K) - y(n) * b(n, n:K-1);
b(n+1, n+1:K) = b(n, n:K-1) - y(n) * e(n, n+1:K);
end;
for k = 1:N
e(N+1, k) = e(k, k);
end;
clearvars -except y e N Fs
e = e(7,:);
ef = zeros(1,7);
bf = zeros(2,7);
% +++++++++++++++++++++ ADPCM decoder +++++++++++++++++++++++++++++++
for k = 1:length(e)
ef(7) = e(k); % Neuer Wert
for i = N:-1:1
ef(i) = ef(i+1) + bf(1,i)*y(i);
bf(1,i+1) = ef(i)*(-y(i))+bf(1,i);
end;
bf(1,1) = ef(1);
x(k) = ef(1);
end;
sound(x,Fs);