FFE now has a automatic optimization of the mu-parameters -> enables the fast comparison of LMS, NLMS and RLS and also good for very long filters (1000+ taps) which might be unstable else.

Minor changes here and there
This commit is contained in:
Silas Oettinghaus
2026-05-12 10:40:03 +02:00
parent 56b48095db
commit f883071dec
13 changed files with 524 additions and 65 deletions

View File

@@ -7,6 +7,10 @@ arguments
options.parameters = struct();
options.database_type
options.dataBase
options.server = "134.245.243.254";
options.port = 3306;
options.user = "silas";
options.password = "silas";
options.load_file_path = struct();
options.storage_path
options.mode
@@ -18,7 +22,8 @@ try
if options.mode == "load_run_id" || options.append_to_db
database = DBHandler("dataBase", [options.dataBase], "type", options.database_type, ...
'user', "silas", 'password', "silas", 'server', "134.245.243.254");
"user", options.user, "password", options.password, ...
"server", options.server, "port", options.port);
end
if options.mode == "load_run_id"
@@ -68,7 +73,6 @@ function output = initializeOutput()
end
function dspInput = loadDspInputFromFiles(run_id, options)
%#ok<INUSD>
Tx_bits = load(options.load_file_path.tx_bits_path);
Symbols = load(options.load_file_path.tx_symbols_path);
Scpe_sig_raw = load(options.load_file_path.rx_raw_path);

View File

@@ -82,6 +82,9 @@ try
eq_.b2 = [];
eq_.b3 = [];
end
try
eq_.mu_optimization = [];
end
ffe_results.config = Equalizerstruct();
ffe_results.config.eq = jsonencode(eq_);

View File

@@ -274,32 +274,32 @@ showEQNoisePSD(eq_noise, "fignum", 338, "displayname", 'Residual Noise after VNL
for t = 1:4
pf_.ncoeff = t;
[~,~] = pf_.process(eq_signal_sd, eq_noise);
showEQNoisePSD(eq_noise, "fignum", 3388, "displayname", 'Residual Noise after VNLE', 'postfilter_taps', pf_.coefficients);
showEQNoisePSD(eq_noise, "fignum", 339, "displayname", 'Residual Noise after VNLE', 'postfilter_taps', pf_.coefficients);
end
tx_symbols.spectrum("displayname",'Equalized Signal','fignum',1234,'normalizeTo0dB',1);
tx_symbols.spectrum("displayname",'Equalized Signal','fignum',340,'normalizeTo0dB',1);
if ~isempty(postFFE)
showEQcoefficients('n1', postFFE.e, "displayname", 'Coefficients', 'fignum', 338);
showEQcoefficients('n1', postFFE.e, "displayname", 'Coefficients', 'fignum', 341);
end
% showEQcoefficients('n1', eq_.e1,'n2', eq_.e2,'n3', eq_.e3, "displayname", 'Coefficients', 'fignum', 339);
showEQfilter(eq_.e, eq_signal_sd.fs.*2);
figure(340); clf;
eq_signal_sd.eye(eq_signal_sd.fs, M, "fignum", 340);
eq_signal_sd.eye(eq_signal_sd.fs, M, "fignum", 342);
figure(341); clf;
showLevelHistogram(eq_signal_sd, tx_symbols, "fignum", 341);
showLevelHistogram(eq_signal_sd, tx_symbols, "fignum", 343);
warning off
showLevelScatter(eq_signal_sd, tx_symbols, "fignum", 400);
showLevelScatter(eq_signal_sd, tx_symbols, "fignum", 344);
% showLevelScatter(rx_signal.resample("fs_out", tx_symbols.fs), tx_symbols, "fignum", 401);
drawnow;
warning on
whitened_noise.spectrum("displayname",'after postfilter','fignum',342);
eq_noise.spectrum("displayname",'before postfilter','fignum',342);
whitened_noise.spectrum("displayname",'after postfilter','fignum',345);
eq_noise.spectrum("displayname",'before postfilter','fignum',345);
end