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

📄 ddss_matlab.txt

📁 直接序列扩频Matlab程序 直接序列扩频通信可以有效地抵抗来自信道中的窄带干扰。在一个直扩通信系统中,扩频是通过伪噪声序列(PN)对发送的信息数据进行调制来实现的。在接收端,原伪噪声序列和所收信
💻 TXT
字号:
直接序列扩频Matlab程序

                        
                        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 + -