DC removal with buffer len
This commit is contained in:
@@ -65,14 +65,12 @@ classdef FFE_DCremoval < handle
|
|||||||
|
|
||||||
% Training Mode
|
% Training Mode
|
||||||
training = 1;
|
training = 1;
|
||||||
showviz = 0;
|
obj.equalize(X.signal, D.signal,obj.mu_tr,obj.epochs_tr,obj.len_tr,training);
|
||||||
obj.equalize(X.signal, D.signal,obj.mu_tr,obj.epochs_tr,obj.len_tr,training,showviz);
|
|
||||||
|
|
||||||
% Decision Directed Mode
|
% Decision Directed Mode
|
||||||
N = X.length;
|
N = X.length;
|
||||||
training = 0;
|
training = 0;
|
||||||
showviz = 0;
|
[signal,decision]=obj.equalize(X.signal, D.signal,obj.mu_dd,obj.epochs_dd,N,training);
|
||||||
[signal,decision]=obj.equalize(X.signal, D.signal,obj.mu_dd,obj.epochs_dd,N,training,showviz);
|
|
||||||
|
|
||||||
% Output Signal
|
% Output Signal
|
||||||
if obj.decide
|
if obj.decide
|
||||||
@@ -87,7 +85,7 @@ classdef FFE_DCremoval < handle
|
|||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
function [y,d_hat] = equalize(obj,x,d,mio,epochs,N,training,showviz)
|
function [y,d_hat] = equalize(obj,x,d,mio,epochs,N,training)
|
||||||
|
|
||||||
arguments
|
arguments
|
||||||
obj
|
obj
|
||||||
@@ -97,36 +95,14 @@ classdef FFE_DCremoval < handle
|
|||||||
epochs
|
epochs
|
||||||
N
|
N
|
||||||
training
|
training
|
||||||
showviz
|
|
||||||
end
|
end
|
||||||
|
|
||||||
x = [zeros(floor(obj.order/2),1); x; zeros(obj.order,1)];
|
x = [zeros(floor(obj.order/2),1); x; zeros(obj.order,1)];
|
||||||
|
|
||||||
if showviz
|
|
||||||
f = figure(111);
|
|
||||||
subplot(2,2,1:2);
|
|
||||||
hold on
|
|
||||||
a = scatter(1:numel(x),x,1,'.');
|
|
||||||
a2 = scatter(1,1,1,'.');
|
|
||||||
a3 = scatter(1,1,2,'.');
|
|
||||||
a4 = xline(1);
|
|
||||||
ylim([-3 3])
|
|
||||||
xlim([0 length(x)]);
|
|
||||||
% subplot(2,2,3)
|
|
||||||
% dplot = x(1:1+500);
|
|
||||||
% b = scatter(1:numel(dplot),dplot,5,'x');
|
|
||||||
% xline(1)
|
|
||||||
% xline(obj.order)
|
|
||||||
% ylim([-3 3])
|
|
||||||
% xlim([0 500]);
|
|
||||||
subplot(2,2,3:4)
|
|
||||||
c = stem(obj.e);
|
|
||||||
ylim([-1 1])
|
|
||||||
drawnow
|
|
||||||
end
|
|
||||||
|
|
||||||
err = 0;
|
err = 0;
|
||||||
e_dc = 0;
|
% e_dc_buffer = NaN(100,1);
|
||||||
|
e_dc_buffer = NaN(10,1);
|
||||||
|
e_dc_est = 0;
|
||||||
|
|
||||||
for epoch = 1 : epochs
|
for epoch = 1 : epochs
|
||||||
symbol = 0;
|
symbol = 0;
|
||||||
@@ -136,7 +112,7 @@ classdef FFE_DCremoval < handle
|
|||||||
|
|
||||||
U = x(obj.order+sample-1:-1:sample);
|
U = x(obj.order+sample-1:-1:sample);
|
||||||
|
|
||||||
y(symbol,1) = e_dc + obj.e.' * U; % Calculating output of LMS __ * |
|
y(symbol,1) = e_dc_est + obj.e.' * U; % Calculating output of LMS __ * |
|
||||||
|
|
||||||
if training
|
if training
|
||||||
d_hat(symbol,1) = d(symbol);
|
d_hat(symbol,1) = d(symbol);
|
||||||
@@ -154,19 +130,15 @@ classdef FFE_DCremoval < handle
|
|||||||
obj.e = obj.e - err(symbol) * U / normalizationfactor; % Weight update rule of NLMS
|
obj.e = obj.e - err(symbol) * U / normalizationfactor; % Weight update rule of NLMS
|
||||||
end
|
end
|
||||||
|
|
||||||
if mod(sample,100) == 1 && showviz
|
if mod(symbol,length(e_dc_buffer)) == 0
|
||||||
a2.XData = 1:2*numel(y);
|
e_dc_buffer(1) = e_dc_est - obj.mu_dc * err(symbol);
|
||||||
a2.YData = repelem(y, 2);
|
e_dc_buffer = circshift(e_dc_buffer,1);
|
||||||
a3.XData = 1:2*numel(d_hat);
|
e_dc_est = mean(e_dc_buffer,"omitnan");
|
||||||
a3.YData = repelem(d_hat, 2);
|
else
|
||||||
a4.Value = sample;
|
e_dc_buffer(1) = e_dc_est - obj.mu_dc * err(symbol);
|
||||||
% b.YData = x(symbol:symbol+500);
|
e_dc_buffer = circshift(e_dc_buffer,1);
|
||||||
c.YData = obj.e;
|
|
||||||
drawnow;
|
|
||||||
end
|
end
|
||||||
|
|
||||||
e_dc = e_dc - obj.mu_dc * err(symbol);
|
|
||||||
|
|
||||||
obj.error(epoch,symbol) = err(symbol) * err(symbol)'; % Instantaneous square error
|
obj.error(epoch,symbol) = err(symbol) * err(symbol)'; % Instantaneous square error
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|||||||
Reference in New Issue
Block a user