⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 commod.m

📁 数字通信第四版原书的例程
💻 M
📖 第 1 页 / 共 2 页
字号:
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 + -