Hoffice push

This commit is contained in:
Silas
2024-09-06 15:53:32 +02:00
parent 03bfd70470
commit 179a7f9682
50 changed files with 921 additions and 93 deletions

View File

@@ -11,27 +11,17 @@ classdef Duobinary
function obj = Duobinary()
%NAME Construct an instance of this class
% Detailed explanation goes here
arguments
end
% %
% fn = fieldnames(options);
% for n = 1:numel(fn)
% try
% obj.(fn{n}) = options.(fn{n});
% end
% end
% do more stuff
end
function signalclass = precode(~,signalclass)
function signal = precode(~,signal)
if isa(signal,'Signal')
data = signal.signal;
else
data = signal;
end
data = signalclass.signal;
u = unique(data);
M = numel(u);
@@ -66,21 +56,34 @@ classdef Duobinary
bk = bk + b;
if M == 4
bk = bk ./ sqrt(5);
bk = bk ./ sqrt(5);
elseif M == 6
bk = bk ./ sqrt(10);
elseif M == 8
bk = bk ./ sqrt(21);
bk = bk ./ sqrt(21);
end
assert(isequal(unique(bk),u),'Check Duobinary Precoding'); %seems the signal is not the same as before
if isa(signal,'Signal')
signal.signal = bk;
else
signal = bk;
end
signalclass.signal = bk;
assert(isequal(unique(signalclass.signal),u),'Check Duobinary Precoding'); %seems the signal is not the same as before
end
function signalclass = encode(~,signalclass)
data = signalclass.signal;
function signal = encode(~,signal)
if isa(signal,'Signal')
data = signal.signal;
else
data = signal;
end
data = data./rms(data);
u = unique(data);
M = numel(u);
@@ -102,7 +105,7 @@ classdef Duobinary
data = data ./ 2;
assert(isequal((0:M-1)',unique(data)),'Check Duobinary Precoding'); %seems the signal is not unipolar
% duobinary coding (1+D)
coeff = [1,1];
@@ -119,7 +122,11 @@ classdef Duobinary
data = data ./ sqrt(10.5); % 15-level constellation weighted with probability after DB code i.e.
end
signalclass.signal = data;
if isa(signal,'Signal')
signal.signal = data;
else
signal = data;
end
% Code to evaluate the s in sqrt(s):
% M=6;
@@ -138,7 +145,7 @@ classdef Duobinary
data = signalclass.signal;
u = unique(data);
I = numel(u); %number of duobinary coded const. points
M = (I+1)/2; %PAM-M order
M = (I+1)/2; %PAM-M order
%make unipolar
if I == 7
@@ -166,11 +173,11 @@ classdef Duobinary
data = data - round(mean(data));
if M == 4
data = data ./ sqrt(5);
data = data ./ sqrt(5);
elseif M == 6
data = data ./ sqrt(10);
elseif M == 8
data = data ./ sqrt(21);
data = data ./ sqrt(21);
end
signalclass.signal = data;
@@ -180,7 +187,7 @@ classdef Duobinary
data = signalclass.signal;
u = unique(data);
I = numel(u); %number of duobinary coded const. points
M = (I+1)/2; %PAM-M order
M = (I+1)/2; %PAM-M order
%make unipolar
if I == 7
@@ -206,11 +213,11 @@ classdef Duobinary
%%FALSCH!
for k = 1:length(data)-1
d_ = data(k+1) - data_out(k);
[~,b] = min(abs(d_-[0:M-1]));
d_ = data(k+1) - data_out(k);
data_out(k+1) = const(b);
[~,b] = min(abs(d_-[0:M-1]));
data_out(k+1) = const(b);
end
@@ -219,13 +226,13 @@ classdef Duobinary
data_out = data_out - round(mean(data_out));
if M == 4
data_out = data_out ./ sqrt(5);
data_out = data_out ./ sqrt(5);
elseif M == 6
data_out = data_out ./ sqrt(10);
elseif M == 8
data_out = data_out ./ sqrt(21);
data_out = data_out ./ sqrt(21);
end
signalclass.signal = data_out;