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

📄 dsss.m

📁 扩频系统的MATLAB源代码,实现无线通信系统扩频的功能
💻 M
字号:
function [Y]=DSSS(X, mode)
% 完成DSSS调制解调功能
% mode=[1,2].  1进行调制,2进行解调,未指定时自动完成调制和解调两个功能。
switch nargin
    case 0
        X='This is a test.';
        Y=DSSS(X);
        return
    case 1
        Y1=DSSS(X, 1); 
        Y2=DSSS(Y1, 2);
        Y=Y2;
        return;
    case 2
        if mode==1%调制
            D=ones(1,7);
            m_sequence=Msequence(D);
            X_length=length(X);
            ascii_value=abs(X);
            ascii_binary=zeros(X_length,7);
            %将数据转换为ASCII二进制码
            for ii=1:X_length
                ascii_binary(ii,:)=Binary(ascii_value(ii));
            end
            subplot(2,3,1);plot(reshape(ascii_binary,1,X_length*7));title('A:输入数据');
            %扩频
            Sp_expand=zeros(X_length,127*7);
            for ii=1:X_length
                for jj=1:7
                    Sp_expand(ii,127*jj-126:127*jj)=xor(m_sequence,ascii_binary(ii,jj));
                end
            end
            subplot(2,3,2);plot(reshape(Sp_expand,1,X_length*127*7));title('B:数据扩展');
            %将扩频码转换为BPSK(1,-1)序列
            for ii=1:X_length
                for jj=1:127*7
                    if~(Sp_expand(ii,jj))
                        Sp_expand(ii,jj)=-1;
                    end
                end
            end
            Sp_expand_bpsk=reshape(Sp_expand,1,X_length*127*7);
            subplot(2,3,3);plot(Sp_expand_bpsk);title('C:BPSK调制')
            Y=Sp_expand_bpsk;
        elseif mode==2%解调
            D=ones(1,7);
            m_sequence=Msequence(D);
            %将BPSK双极性转换为单极性
            l=length(X)/(127*7);
            X_length=length(X);
            for ii=1:X_length
                if X(ii)==-1
                    X(ii)=0;
                end
            end
            Sp_expand=reshape(X,l,127*7);
            subplot(2,3,4);plot(X);title('D:数据传输');
            ascii_binary=zeros(l,7);
            Demodulate_binary=zeros(l,127*7);
            %接收处解调
            for ii=1:l
                for jj=1:7
                    Demodulate(ii,127*jj-126:127*jj)=xor(m_sequence, Sp_expand(ii,127*jj-126:127*jj));
                end
            end
            for ii=1:l
                for jj=1:7
                    ascii_binary(ii,jj)=Demodulate(ii,127*jj-126);
                end
            end
            subplot(2,3,6);plot(reshape(ascii_binary,1,l*7));title('E:数据输出');
            %将ASCII二进制转换为输出数据
            A=zeros(1,l);
            for ii=1:l
                A(ii)=Ascii(ascii_binary(ii,:));
            end
            Y=char(A);
        else
            mode=1;
        end
        return
end
%代码主体,执行中画出各点波形。
%ASCII数值二进制比特转换
function [YY]=Binary(Z1)
z=zeros(1,7);
z(1)=mod(Z1,2);
a=floor(Z1/2);
for ll=1:6
    z(ll+1)=mod(a,2);
    a=floor(a/2);
    if a==0
        break;
    end
end
YY=z;
%二进制比特转换为ASCII数值
function [ZZ]=Ascii(Z2)
l=length(Z2);
A=0;
for ii=1:l
    A=Z2(ii)*2^(ii-1)+A;
end
ZZ=A;
%生成m序列
function [Y]=Msequence(X)
switch nargin
    case 0
        Y=Msequence(X);
        return
    case 1
        l=length(X);
        mp_register=X;
        out_sequence=zeros(1,2^l-1);
        sum_xor=0;
        for ii=1:2^l-1
            out_sequence(ii)=mp_register(l);
            sum_xor=xor(mp_register(l),mp_register(l-1));
            for jj=1:l-1
                mp_register(l-jj+1)=mp_register(l-jj);
            end
            mp_register(1)=sum_xor;
            if mp_register==X
                break;
            end
        end
        Y=out_sequence;
        return
end


⌨️ 快捷键说明

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