Minor Changes here and there

This commit is contained in:
Silas Oettinghaus
2024-08-16 10:08:50 +02:00
parent 3f089dca9f
commit 793a5b7efd
7 changed files with 100 additions and 68 deletions

View File

@@ -140,6 +140,8 @@ classdef FFE < handle
err(symbol) = y(symbol) - d_hat(symbol); % Instantaneous error
true_err(symbol) = y(symbol) - d(symbol); % Instantaneous error
if mio ~= 0
obj.e = obj.e - (mio * err(symbol) * U) ; % Weight update rule of LMS
else

View File

@@ -101,7 +101,7 @@ classdef FFE_DCremoval < handle
err = 0;
% e_dc_buffer = NaN(100,1);
e_dc_buffer = NaN(10,1);
e_dc_buffer = NaN(1,1);
e_dc_est = 0;
for epoch = 1 : epochs

View File

@@ -124,12 +124,15 @@ classdef FFE_FFDCAVG < handle
ylim([-1 1])
drawnow
end
for epoch = 1 : epochs
symbol = 0;
err_buffer = zeros(numel(obj.constellation),50);
err_buffer = zeros(numel(obj.constellation),90);
dc_err = zeros(numel(obj.constellation),1);
dc_sto = NaN(numel(obj.constellation),N);
for sample = 1 : obj.sps : N
symbol = symbol+1;
@@ -142,16 +145,29 @@ classdef FFE_FFDCAVG < handle
[~,symbol_idx] = min(abs(d(symbol) - obj.constellation)); % decision for closest constellation point
d_hat(symbol,1) = d(symbol);
else
[~,symbol_idx] = min(abs(y(symbol) - obj.constellation)); % decision for closest constellation point
always_correct_decision = 0;
if always_correct_decision
[~,symbol_idx] = min(abs(d(symbol) - obj.constellation)); % decision for closest constellation point
else
[~,symbol_idx] = min(abs(y(symbol) - obj.constellation)); % decision for closest constellation point
end
d_hat(symbol,1) = obj.constellation(symbol_idx);
end
err(symbol) = y(symbol) - d_hat(symbol); % Instantaneous error
err_buffer(symbol_idx,1) = err(symbol);
err_buffer(symbol_idx,:) = circshift(err_buffer(symbol_idx,:),1);
y(symbol) = y(symbol) - obj.mu_buff*mean(err_buffer(symbol_idx,:));
if 1
%use buffer for dc-error
err_buffer(symbol_idx,1) = err(symbol);
err_buffer(symbol_idx,:) = circshift(err_buffer(symbol_idx,:),1);
dc_sto(symbol_idx,symbol) = obj.mu_buff*mean(err_buffer(symbol_idx,:));
y(symbol) = y(symbol) - obj.mu_buff * mean(err_buffer(symbol_idx,:));
else
%or use 1+alpha*D as adaptive error
dc_err(symbol_idx) = dc_err(symbol_idx) + obj.mu_buff * err(symbol);
dc_sto(symbol_idx,symbol) = dc_err(symbol_idx);
y(symbol) = y(symbol) - dc_err(symbol_idx);
end
if training
[~,symbol_idx] = min(abs(d(symbol) - obj.constellation)); % decision for closest constellation point
@@ -173,8 +189,10 @@ classdef FFE_FFDCAVG < handle
if mod(sample,100) == 1 && showviz
a2.XData = 1:2*numel(y);
a2.YData = repelem(y, 2);
a3.XData = 1:2*numel(d_hat);
a3.YData = repelem(d_hat, 2);
a4.Value = sample;
% b.YData = x(symbol:symbol+500);
c.YData = obj.e;