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
44function [z,bmw,mcAdapt, snrAll] = bmlms(x, b, mu, order, ...
45 beta, phi, psi, bp, bw1, bmF, snrThresh, snrRate, snrInit)
46
47
48narginchk(13, 13);
49if ~isreal(x) || length(size(x)) ~= 2 || ~all(all(isfinite(x)))
50 error('x must be a real matrix');
51elseif ~isvector(b) || ~isreal(b) || ~all(isfinite(b))
52 error('b must be a real vector');
53elseif ~isvector(bp) || ~isreal(bp) || ...
54 ~all(all(isfinite(bp)))
55 error('bp must be a real vector');
56elseif isempty(mu) || ~isscalar(mu) || ~isreal(mu) || ~isfinite(mu)
57 error('mu must be a real scalar');
58elseif isempty(order) || ~isscalar(order) || ~isreal(order) || ...
59 ~isfinite(order) || order < 0 || ...
60 abs(mod(order,floor(order))) > 0
61 error('order must be a positive integer');
62elseif isempty(beta) || ~isscalar(beta) || ~isreal(beta) || ...
63 ~isfinite(beta) || beta < 0 || beta > 1
64 error('beta must be a real scalar in [0,1]');
65elseif ~isempty(bw1) && (length(size(bw1)) ~= 2 || ...
66 ~isreal(bw1) || ~all(all(isfinite(bw1))))
67 error('bw1 must be a real matrix');
68elseif ~isempty(bmF) && ...
69 (~isreal(bmF) || length(size(bmF)) ~= 3 || ...
70 size(bmF,1) ~= order || size(bmF,2) ~= size(x,2) || ...
71 ~all(all(all(isfinite(bmF)))))
72 error('bmF must be a real cubic matrix');
73elseif ~isempty(snrThresh) && (~isscalar(snrThresh) || ...
74 ~isreal(snrThresh) || ~isfinite(snrThresh))
75 error('snrThresh must be a real scalar')
76elseif ~isempty(snrRate) && ...
77 (~isscalar(snrRate) || ~isreal(snrRate) || ...
78 ~isfinite(snrRate) || snrRate < 0 || ...
79 abs(mod(snrRate,floor(snrRate))) > 0)
80 error('snrRate must be a positive integer')
81elseif xor(isempty(snrThresh), isempty(snrRate))
82 error(['snrThresh and snrRate must both be specified or' ...
83 ' both empty'])
84elseif ~isempty(snrInit) && (~isvector(snrInit) || ~isreal(snrInit))
85 error('snrInit must be a real vector');
86elseif ~isempty(phi) && (length(size(phi))~=2 || ~isreal(phi) || ...
87 ~all(all(isfinite(phi))))
88 error('phi must be a real matrix')
89elseif ~isempty(psi) && (length(size(psi))~=2 || ~isreal(psi) || ...
90 ~all(all(isfinite(psi))))
91 error('psi must be a real matrix')
92end
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[N, nmic] = size(x);
119if nargin == 3, bp = zeros(order, 1); end
120bmw = zeros(order, nmic, length(b));
121
122if ~isempty(bw1)
123 w=bw1; else w= zeros(order, nmic);
124end
125z=zeros(length(b), nmic);
126
127snrAll = zeros(N, nmic);
128mcAdapt = zeros(length(b),nmic);
129snr=zeros(1, nmic);
130
131if ~isempty(snrThresh)
132
133
134 if isempty(snrInit)
135 snr = Inf*ones(1, size(z,2));
136 else
137 snr = snrInit;
138 end
139
140 mcAdapt = zeros(size(z));
141
142 amcInds=gt(snr,snrThresh);
143end
144
145
146
147
148
149for n = 1:length(b)
150
151[bWin,z,w1]=targbm(bp,b,x,n,order,w,z);
152
153
154if ~isempty(bmF), w= bmF(:,:,n); continue, end
155
156
157
158[snr,amcInds,mcAdapt]=AMC(b,z,n,snrThresh,snrRate,snr,amcInds,mcAdapt);
159
160snrAll(n,:) = snr;
161
162
163[w]=optwbm(bWin,n,w1,z,beta,mu,snrThresh,amcInds);
164
165[w]=CCAF(phi,psi,order,w,snrThresh,amcInds);
166
167bmw(:,:,n)=w;
168
169end
170
171end