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

📄 mimocdma.m

📁 steganography program
💻 M
字号:
%mc-cdma simple structure
% considering channel with four taps 
% with cyclic prefix
clear;
clear all;
close all;
%input symbol/bit duration

n=100;%number of symbols
c1=pn([0 1 0 0 1]);
c=2*c1-1;
        
%code matched filter
co=fliplr(c);
       
gmc=32;%length of the code
cp=16;%number of cyclic prefix
snr=[-16:10];
%snr=5;
runs=10000;

l=length(c);

for power=1:length(snr)
    er=0;er1=0;er2=0;er3=0;
    for r=1:runs
        tr=[];trds=[];
        
        
        
        b=randint(1,2*n);
        
        %qpsk moudulation
        b1=b;
        b1(find(b1==0))=-1;
        j=1;
        for i=1:2:2*n
            m(j)=complex(b1(i),b1(i+1));
            j=j+1;    
        end
        
        for i=1:n
            %tr((i-1)*gmc+1:i*gmc)=ifft(m(i)*c,gmc);
            tr1=[];
            tr1=ifft(m(i)*c,gmc);
            tr((i-1)*(gmc+cp)+1:i*(gmc+cp))=[tr1(gmc-cp+1:gmc) tr1]; %generating the transmitted signal and adding cyclic prefix
        end
        trds=kron(m,c);%spreading (ds-cdma system)
        
        
        %channel model
        pdp=[-20 -10 -10 0];%power density profile
        %pdp=[0 -10 -10 -20];
        for i=1:length(pdp)
            h(i)=sqrt((10^(pdp(i)/10))/2)*complex(randn(1,1),randn(1,1));
        end
        
        tr=conv(h,tr);%passing through the channel
        trds=conv(h,trds);
        
        
        
        %sp=var(tr)+abs(mean(tr))^2;
        sp=mean(tr.*conj(tr));
        np=sp/(10^(snr(power)/10));
        noise=sqrt(np/2)*complex(randn(1,length(tr)),randn(1,length(tr)));
        tr=tr+noise;
        
        %power calculation for ds-cdma
        %spds=var(trds)+abs(mean(trds))^2;
        spds=mean(trds.*conj(trds));
        npds=spds/(10^(snr(power)/10));
        nds=sqrt(npds/2)*complex(randn(1,length(trds)),randn(1,length(trds)));
        trds=trds+nds;
        
        
        
        %receiver structure
        %h=1;  %checking without the channel
        
        t=1;
        for i=1:n
            rc=[];
            %rc=fft(tr((i-1)*gmc+1:i*gmc),gmc)./fft(h,gmc);%ORC combining
            rc=fft(  tr( (i-1)*(gmc+cp)+cp+1 :i*(gmc+cp)), gmc )./fft(h,gmc); %ORC combining ,cyc. pre. removal
            d=rc(1:gmc-1).*c;
            
            decc=sum(d);
            
            
            if real(decc)>0
                if imag(decc)>0
                    rb(t)=1;rb(t+1)=1;
                else
                    rb(t)=1;rb(t+1)=0;
                end
            else
                if imag(decc)>0
                    rb(t)=0;rb(t+1)=1;
                else
                    rb(t)=0;rb(t+1)=0;
                end
            end
            
            t=t+2;
        end 
        er=er+sum(mod(b+rb,2));
        
        t=1;
        for i=1:n
            rc=[];
            rc=fft( tr(  (i-1)*(gmc+cp)+cp+1:i*(gmc+cp)),gmc).*conj(fft(h,gmc));%MRC combining and removal of cyc. pre.
            
            %%
            d=rc(1:gmc-1).*c;
            
            decc=sum(d);
            
            
            if real(decc)>0
                if imag(decc)>0
                    rb1(t)=1;rb1(t+1)=1;
                else
                    rb1(t)=1;rb1(t+1)=0;
                end
            else
                if imag(decc)>0
                    rb1(t)=0;rb1(t+1)=1;
                else
                    rb1(t)=0;rb1(t+1)=0;
                end
            end
            
            t=t+2;
        end 
        er1=er1+sum(mod(b+rb1,2));
        
        
        t=1;
        for i=1:n
            rc=[];
            rc=fft( tr(  (i-1)*(gmc+cp)+cp+1:i*(gmc+cp)),gmc).*conj(fft(h,gmc));
            rc=rc./abs(fft(h,gmc));%EGC combining
            
            d=rc(1:gmc-1).*c;
            decc=sum(d);
            
            
            if real(decc)>0
                if imag(decc)>0
                    rb2(t)=1;rb2(t+1)=1;
                else
                    rb2(t)=1;rb2(t+1)=0;
                end
            else
                if imag(decc)>0
                    rb2(t)=0;rb2(t+1)=1;
                else
                    rb2(t)=0;rb2(t+1)=0;
                end
            end
            
            t=t+2;
            
            
        end 
        er2=er2+sum(mod(b+rb2,2));
        
        
        %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
        %ds-cdma detection
        %channel matched filter
        ch=conj(fliplr(h));
        
        %passing through the channel matched filter
        trds=conv(ch,trds);
        
        
        %passing through the code matched filter
        trds=conv(co,trds);
        
        
        in=l+length(h)-1;
        
        trdd=trds(in:l:l*n+in-l);
        
        t=1;er3=0;
        %detection
        for i=1:n
            if real(trdd(i)) > 0
                if imag(trdd(i))>0
                    rb3(t)=1;rb3(t+1)=1;
                else
                    rb3(t)=1;rb3(t+1)=0;
                end
            else
                if imag(trdd(i))>0
                    rb3(t)=0;rb3(t+1)=1;
                else
                    rb3(t)=0;rb3(t+1)=0;
                end
            end
            t=t+2;
        end
        
        er3=er3+ sum(mod(b+rb3,2));
        power
        
        r
    end
    ber(power)=er/(2*n*runs);
    ber1(power)=er1/(2*n*runs);
    ber2(power)=er2/(2*n*runs);
    ber3(power)=er3/(2*n*runs);
   
end


semilogy(snr,ber,'b-x',snr,ber1,'r-o',snr,ber2,'m-d');
hold;
semilogy(snr,ber3,'k-o');


%%%%%%%%%%%%%%note%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%use mccdma_t1 for evaluating without cyclic prefix

⌨️ 快捷键说明

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