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

📄 commod.m

📁 数字通信第四版原书的例程
💻 M
📖 第 1 页 / 共 2 页
字号:
                    modulated = dmod(bf_mod, Fc, Fd, [Fs, pp5], mthd);
                elseif isempty(pp3)
                    modulated = dmod(bf_mod, Fc, Fd, [Fs, pp5], mthd, pp2);
                elseif isempty(pp4)
                    modulated = dmod(bf_mod, Fc, Fd, [Fs, pp5], mthd, pp2, pp3);
                else
                    modulated = dmod(bf_mod, Fc, Fd, [Fs, pp5], mthd, pp2, pp3, pp4);
                end;
            else
                %baseband
                if isempty(pp2)
                    modulated = dmodce(bf_mod, Fd, [Fs, pp5], mthd);
                elseif isempty(pp3)
                    modulated = dmodce(bf_mod, Fd, [Fs, pp5], mthd, pp2);
                elseif isempty(pp4)
                    modulated = dmodce(bf_mod, Fd, [Fs, pp5], mthd, pp2, pp3);
                else
                    modulated = dmodce(bf_mod, Fd, [Fs, pp5], mthd, pp2, pp3, pp4);
                end;
            end;
        end;
    else
        modulated = code_word;
    end;
    set(bar_color(2), 'XData',[0 (loop-4/7)/Vaa_len (loop-4/7)/Vaa_len  0])
    set(ex_flag(3),'Color',[1 1 1], 'Visible', 'on')

    %channel:
    set(ex_flag(4),'Color',[1 0 0], 'Visible', 'on')
    drawnow
    sig_eng = sum(modulated .* conj(modulated));
    
    list_valu = get(popmu(4), 'Value');
    
    if list_valu > 1
        p51 = str2num(get(entr_valu(13), 'String'));
        p52 = str2num(get(entr_valu(14), 'String'));
        p52 = comempty(p52, entr_valu(14), 0);
        p53 = str2num(get(entr_valu(15), 'String'));
        p53 = comempty(p53, entr_valu(15), 0);
        p54 = str2num(get(entr_valu(16), 'String'));
        p54 = comempty(p54, entr_valu(16), 0);
        if list_valu == 2
            p52 = p52+loop;
            randn('seed', p52');
            if (get(popmu(3), 'Value') ~= 1) & (get(popmu(5), 'Value') == 1)
                %complex
                nois = randn(length(modulated), 2) * p51(loop);
                nois = nois(:, 1) + j*nois(:, 2);
            else
                % real
                nois = randn(length(modulated), 1) * p51(loop);
            end;
        elseif list_valu == 3
            p53 = p53 + loop;
            rand('seed', p52');
            if (get(popmu(3), 'Value') ~= 1) & (get(popmu(5), 'Value') == 1)
                %complex
                nois = rand(length(modulated), 2) * (p51(loop) - p52(loop)) - p52(loop);
                nois = nois(:, 1) + j*nois(:, 2);
            else
                % real
                nois = randn(length(modulated), 1) * (p51(loop) - p52(loop)) - p52(loop);
            end;
        elseif list_valu == 4
            %N/A
            if (get(popmu(3),'Value') ~= 1)
                disp('Binary noise can apply to the case without modulation only.')
                disp('No noise is added to the simulation.')
                nois = 0;
            else
                p52 = p52 + loop;
                randn('seed', p52');
                nois = rand(length(modulated), 1) < p51(loop);
            end;
        elseif list_valu == 5
            % your noise
            % nois = ???
        end;
        modulated = modulated + nois;
        if list_valu == 4
            modulated = rem(modulated, 2);
        end;
    else
        nois = 0;
    end;
    if list_valu == 4
        if p51(loop) > 0
            snratio = 1/p51(loop);
        else
            snratio = Inf;
        end;
    else
        noi_eng = sum(nois .* conj(nois));
        if noi_eng ~= 0
            snratio = sig_eng/noi_eng;
        else
            snratio = Inf;
        end;
    end;
%    set(data_h(3), 'UserData', [get(data_h(3), 'UserData'), snratio]);
%    set(data_h(3), 'String', mat2str(get(data_h(3), 'UserData'), 6));
    set(bar_color(2), 'XData',[0 (loop-3/7)/Vaa_len (loop-3/7)/Vaa_len   0])
    set(ex_flag(4),'Color',[1 1 1], 'Visible', 'on')

    % demodualtion
    set(ex_flag(5),'Color',[1 0 0], 'Visible', 'on')
    drawnow
    list_valu = get(popmu(3), 'Value');
    band_valu = get(popmu(5), 'Value');
    if list_valu > 1
        if loop == 1
            if isempty(pp6) & band_valu == 1
                [lpfltnum, lpfltden] = butter(5, Fc * 2 / Fs);
            else
                lpfltnum = pp6;
                lpfltden = pp7;
            end;
        end;
        if band_valu == 1
            if list_valu == 2
                demodulated = ddemod(modulated, Fc, Fd, [Fs, pp5], 'ask', pp2, lpfltnum, lpfltden);
            elseif list_valu == 3
                demodulated = ddemod(modulated, Fc, Fd, [Fs, pp5], 'qask', pp2, lpfltnum, lpfltden);
            elseif list_valu == 4
                demodulated = ddemod(modulated, Fc, Fd, [Fs, pp5], 'qask/cir', pp2, pp3, pp4, lpfltnum, lpfltden);
            elseif list_valu == 5
                demodulated = ddemod(modulated, Fc, Fd, [Fs, pp5], 'qask/arb', pp2, pp3, lpfltnum, lpfltden);
            elseif list_valu == 6
                demodulated = ddemod(modulated, Fc, Fd, [Fs, pp5], 'fsk', pp2, pp3);
            elseif list_valu == 7
                demodulated = ddemod(modulated, Fc, Fd, [Fs, pp5], 'psk', pp2, lpfltnum, lpfltden);
            elseif list_valu == 8
                demodulated = ddemod(modulated, Fc, Fd, [Fs, pp5], 'msk');
            elseif list_valu == 9
                % your demodualtion method goes here 
            end;
        else
            if list_valu == 2
                if isempty(pp6)
                    demodulated = ddemodce(modulated, Fd, [Fs, pp5], 'ask', pp2);
                else
                    demodulated = ddemodce(modulated, Fd, [Fs, pp5], 'ask', pp2, lpfltnum, lpfltden);
                end
            elseif list_valu == 3
                if isempty(pp6)
                    demodulated = ddemodce(modulated, Fd, [Fs, pp5], 'qask', pp2);
                else
                    demodulated = ddemodce(modulated, Fd, [Fs, pp5], 'qask', pp2, lpfltnum, lpfltden);
                end;
            elseif list_valu == 4
                if isempty(pp6)
                    demodulated = ddemodce(modulated, Fd, [Fs, pp5], 'qask/cir', pp2, pp3, pp4);
                else
                    demodulated = ddemodce(modulated, Fd, [Fs, pp5], 'qask/cir', pp2, pp3, pp4, lpfltnum, lpfltden);
                end;
            elseif list_valu == 5
                if isempty(pp6)
                    demodulated = ddemodce(modulated, Fd, [Fs, pp5], 'qask/arb', pp2, pp3);
                else
                    demodulated = ddemodce(modulated, Fd, [Fs, pp5], 'qask/arb', pp2, pp3, lpfltnum, lpfltden);
                end;
            elseif list_valu == 6
                demodulated = ddemodce(modulated, Fd, [Fs, pp5], 'fsk', pp2, pp3);
            elseif list_valu == 7
                if isempty(pp6)
                    demodulated = ddemodce(modulated, Fd, [Fs, pp5], 'psk', pp2);
                else
                    demodulated = ddemodce(modulated, Fd, [Fs, pp5], 'psk', pp2, lpfltnum, lpfltden);
                end;
            elseif list_valu == 8
                demodulated = ddemodce(modulated, Fd, [Fs, pp5], 'msk');
            elseif list_valu == 9
                % your demodualtion method goes here 
            end;
        end
    else
        demodulated = modulated;
        bit_numb = 1;
    end;
    demodulated = de2bi(demodulated, bit_numb)';
    demodulated = demodulated(:);
    demodulated = demodulated(1:length(code_word));
    bit_err = sum(abs(demodulated - code_word)) / length(code_word);
%    set(data_h(2), 'UserData', [get(data_h(2), 'UserData'), bit_err]);
%    set(data_h(2), 'String', mat2str(get(data_h(2), 'UserData'),6));
    set(bar_color(2), 'XData',[0 (loop-2/7)/Vaa_len (loop-2/7)/Vaa_len   0])
    set(ex_flag(5),'Color',[1 1 1], 'Visible', 'on')

    %decode
    set(ex_flag(6),'Color',[1 0 0], 'Visible', 'on')
    drawnow
    list_valu = get(popmu(2), 'Value');
    if list_valu > 1        
        if list_valu ~= 8
            if isempty(Xcd)
                msg = decode(demodulated, Ncd, Mcd, mthd_cod);
            elseif isempty(Ycd)
                msg = decode(demodulated, Ncd, Mcd, mthd_cod, Xcd);
            else
                msg = decode(demodulated, Ncd, Mcd, mthd_cod, Xcd, Ycd);
            end;
        else
            % your own error-control code goes here.
            %msg = ???(demodulated, Ncd, Mcd, Xcd, Ycd);
        end;
    else
        msg = demodulated;
    end;
    msg=msg(:);
    set(ex_flag(6),'Color',[1 1 1], 'Visible', 'on')
    set(bar_color(2), 'XData',[0 (loop-1/7)/Vaa_len (loop-1/7)/Vaa_len   0])

    set(ex_flag(7),'Color',[1 0 0], 'Visible', 'on')
    bit_err = sum(abs(msg(1:length(indx_bi)) - indx_bi)) / length(indx_bi);

%    set(data_h(3), 'UserData', [get(data_h(3), 'UserData'), snratio]);
%    set(data_h(3), 'String', mat2str(get(data_h(3), 'UserData'), 6));
    set(data_h(4), 'UserData', [get(data_h(4), 'UserData'), [snratio; bit_err]]);
    tmp = get(data_h(4), 'UserData');
    set(data_h(4),'String', ['snr=',mat2str(tmp(1, :), 4),...
                   '; bit_err_ratio=',mat2str(tmp(2, :), 4)],...
                  'Visible', 'on')

    set(bar_color(2), 'XData',[0 (loop-0/7)/Vaa_len (loop-0/7)/Vaa_len   0])

    set(exec(3), 'Enable','on');
    set(ex_flag(7),'Color',[1 1 1], 'Visible', 'on');
    drawnow;
end;
set(bar_color(2), 'Xdata', [0 0 0 0]);
set(ex_flag(1:7),'Visible', 'off');
set(entr_valu, 'ForegroundColor', [0 0 0]);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -