📄 commod.m
字号:
function commod(com_fig);
% COMMOD
%
%
% Copyright (c) 1995-96 by The MathWorks, Inc.
% $Revision: 1.1 $ $Date: 1996/04/01 17:53:50 $
if nargin < 1
return;
elseif ~(com_fig > 0)
return;
end;
handle = get(gcf, 'UserData');
if ~isempty(handle)
h_axes = handle(1);
h_plot = handle(2);
testl = handle(3:7);
popmu = handle(8:12);
entr_text = handle(13:32);
entr_valu = handle(33:52);
exec = handle(53:63);
data_h = handle(60:63);
load_save = handle(64:67);
bar_color = handle(68:69);
ex_flag = handle(70:76);
else
error('The GUI figure is distroyed. Close the window and restart COMMGUI.');
end;
set(bar_color(1), 'Visible', 'off');
set(bar_color(2), 'Visible', 'on');
default_color = get(0, 'DefaultUicontrolBackgroundColor');
for i = 1 : length(entr_valu)
if strcmp(get(entr_valu(i), 'Visible'), 'off')
set(entr_valu(i), 'String', '');
end;
end;
Fd = str2num(get(entr_valu(1), 'String'));
Fd = comempty(Fd, entr_valu(1), 1);
source_flag = get(popmu(1), 'Value');
if source_flag == 2
NN = get(entr_valu(2), 'String');
if isempty(NN)
set(entr_valu(2), 'UserData', randint(100,1));
end;
NN = comempty(NN, entr_valu(2), 100);
msgg = get(entr_valu(2), 'UserData');
data_length = ones(1, size(msgg, 2)) * size(msgg, 1);
else
data_length = str2num(get(entr_valu(2), 'String'));
data_length = comempty(data_length, entr_valu(2), 100);
end;
Vaa = str2num(get(entr_valu(13), 'String'));
Vaa = comempty(Vaa, entr_valu(13), .5);
Vaa_len = length(Vaa);
MultipleNumb = str2num(get(entr_valu(3), 'String'));
MultipleNumb = comempty(MultipleNumb, entr_valu(3), 2);
MultipleNumb = comleng(MultipleNumb, Vaa, 'First Entry for channel');
if source_flag == 2
if size(msgg, 2) < length(MultipleNumb)
msgg(:, size(msgg,2)+1:length(MultipleNumb)) = msgg(:,1)*ones(1, length(MultipleNumb)-size(msgg,2));
end;
end;
for loop = 1 : Vaa_len
set(ex_flag(1:7),'Visible', 'off')
drawnow
% source
set(ex_flag(1),'Color',[1 0 0], 'Visible', 'on')
drawnow
if source_flag == 1
%random Integer
Seed = str2num(get(entr_valu(4), 'String'));
Seed = comempty(Seed, entr_valu(4), 12345);
if isempty(Seed)
Seed = sum(date) * sum(handle) + loop;
end;
Seed = comleng(Seed, Vaa, 'Seed');
x = randint(data_length(loop), 1, MultipleNumb(loop));
indx = de2bi(x, MultipleNumb(loop))';
elseif source_flag == 2
x = msgg(:, loop);
indx = de2bi(x, MultipleNumb(loop))';
elseif source_flag == 3
%your own source goes here.
end;
set(bar_color(2), 'XData',[0 (loop-6/7)/Vaa_len (loop-6/7)/Vaa_len 0])
set(ex_flag(1),'Color',[1 1 1], 'Visible', 'on')
% error control coding
set(ex_flag(2),'Color',[1 0 0], 'Visible', 'on')
drawnow
list_valu = get(popmu(2), 'Value');
% indx_bi = de2bi(indx, ceil(log(MN)/log(2)))';
indx_bi = indx(:);
if list_valu > 1
if sum(abs(indx-floor(indx))) > 0
error('You have to use source coding before error-control coding.');
end;
tmp = [...
'Hamming ';...
'Linear ';...
'Cyclic ';...
'BCH ';...
'RS ';...
'Convolut'...
];
mthd_cod = deblank(tmp(list_valu-1,:));
Ncd = str2num(get(entr_valu(5), 'String'));
if list_valu ~= 7
Ncd = comempty(Ncd, entr_valu(5), 7);
end;
Mcd = str2num(get(entr_valu(6), 'String'));
if list_valu ~= 7
if Mcd > Ncd
Mcd = [];
end;
default_v = Ncd - ceil(log(Ncd)/log(2));
if list_valu == 6
default_v = Ncd -2;
end
Mcd = comempty(Mcd, entr_valu(6), default_v);
end;
Xcd = get(entr_valu(7), 'String');
if isempty(Xcd)
if list_valu == 3
% block
[junk, default_v] = hammgen(ceil(log(Ncd)/log(2)));
Xcd = comempty(Xcd, entr_valu(7), default_v);
Ncd = 2^ceil(log(Ncd)/log(2)) - 1;
Mcd = Ncd - ceil(log(Ncd)/log(2));
set(entr_valu(5), 'String',num2str(Ncd));
set(entr_valu(6), 'String',num2str(Mcd));
elseif list_valu == 4
% cyclic
default_v = cyclpoly(Ncd, Mcd);
Xcd = comempty(Xcd, entr_valu(7), default_v);
elseif list_valu == 7
% convolution
Xcd = comempty(Xcd, entr_valu(7), 'fig_10_9');
end;
end;
if list_valu ~= 8
if list_valu == 7
[A,B,C,D,N,K,M] = gen2abcd(Xcd);
Ncd = comempty(Ncd, entr_valu(5), N);
Mcd = comempty(Mcd, entr_valu(6), K);
Ycd = str2num(get(entr_valu(8), 'String'));
Ycd = comempty(Ycd, entr_valu(8), Ncd * 2);
end;
if isempty(Xcd)
code_word = encode(indx_bi, Ncd, Mcd, mthd_cod);
else
if max((abs(Xcd)>=97) & (abs(Xcd)<=122)) | max((abs(Xcd)>=65) & (abs(Xcd)<=90))
else
Xcd = str2mat(Xcd);
end;
code_word = encode(indx_bi, Ncd, Mcd, mthd_cod, Xcd);
end;
else
% your own error-control code goes here.
% Ncd is param1
% Mcd is param2
% Xcd is param3
% Ycd is param4
%code_word = ???(indx, Ncd, Mcd, Xcd, Ycd);
end;
else
code_word = indx_bi;
end;
set(bar_color(2), 'XData',[0 (loop-5/7)/Vaa_len (loop-5/7)/Vaa_len 0])
set(ex_flag(2),'Color',[1 1 1], 'Visible', 'on')
%modulation
set(ex_flag(3),'Color',[1 0 0], 'Visible', 'on')
drawnow
list_valu = get(popmu(3), 'Value');
if list_valu > 1
Fs = str2num(get(entr_valu(9), 'String'));
Fs = comempty(Fs, entr_valu(9), Fd*5);
pp2 = str2num(get(entr_valu(10), 'String'));
default1 = 16;
default2 = 1;
if list_valu == 5
default1 = [1 1 -1 -1];
default2 = [1 -1 -1 1];
elseif list_valu == 6
default2 = Fd;
end;
pp2 = comempty(pp2, entr_valu(10), default1);
pp3 = str2num(get(entr_valu(11), 'String'));
pp3 = comempty(pp3, entr_valu(11), default2);
pp4 = str2num(get(entr_valu(12), 'String'));
pp4 = comempty(pp4, entr_valu(12), 0);
pp5 = str2num(get(entr_valu(17), 'String'));
pp5 = comempty(pp5, entr_valu(17), 0);
pp6 = str2num(get(entr_valu(18), 'String'));
pp7 = str2num(get(entr_valu(19), 'String'));
Fc = str2num(get(entr_valu(20), 'String'));
Fc = comempty(Fc, entr_valu(20), Fs/3);
if Fs < Fd
disp('Warning: Modulation sample frequency should be larger than digital frequuncy.');
end
if (list_valu == 9)
% your own modulation goes here
% modulated == ???
else
if (list_valu == 2) ...
| (list_valu == 3) ...
| (list_valu == 6) ...
| (list_valu == 7)
MLP = pp2;
elseif (list_valu == 4)
MLP = sum(pp2);
elseif (list_valu == 5)
MLP = length(pp2);
elseif (list_valu == 8)
MLP = 2;
end;
bit_numb = floor(log(MLP) / log(2));
bf_mod = vec2mat(code_word, bit_numb);
bf_mod = bi2de(bf_mod);
mthd = get(popmu(3), 'String');
mthd = deblank(mthd(list_valu, :));
if get(popmu(5), 'Value') == 1
%passband
if isempty(pp2)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -