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

📄 ofdmber.m

📁 SC-FDMA中IFDMA和LFDMA两种不同子载波映射方式在不同滚降系数下的峰均比
💻 M
字号:
modu_type='16QAM';
total_sub=512;
num_sym=64;
snr=0:1:20;
num_snr=length(snr);
num_run=10^4;
%error_count=0;
error=zeros(1,num_snr);
sc_error=zeros(1,num_snr);
%data_set=[1+j -1+j -1-j 1-j];

for n=1:num_snr
   % SNR=10^(snr(n)/10);
    error_count=0;
    sc_error_count=0;
    for m=1:num_run
        if modu_type=='Q-PSK',
        tmp=round(rand(2,num_sym));
        tmp=2*tmp-1;
        data=(tmp(1,:)-j*tmp(2,:))/sqrt(2);%Es=1
        elseif modu_type=='16QAM',
                data_set=[-3+j*3 -1+j*3 1+j*3 3+j*3 ...
                                -3+j -1+j 1+j 3+j ... 
                                -3-j -1-j 1-j 3-j ...
                                -3-j*3 -1-j*3 1-j*3 3-j*3];
                data_set=data_set./sqrt(mean(abs(data_set).^2));
                 num=ceil(rand(1,num_sym).*16);
                 data=zeros(1,num_sym);
                for L=1:num_sym
                    if num(L)==0
                        num(L)=1;
                    end
                    data(L)=data_set(num(L));
                end
%                data=data./sqrt(mean(abs(data_set)^2));
        end
        ifft_in=zeros(1,total_sub);
        ifft_in(1:num_sym)=data;
        ifft_out=sqrt(total_sub)*ifft(ifft_in);
        
        dft_out=fft(data)/sqrt(num_sym);
        sc_ifft_in=zeros(1,total_sub);
        sc_ifft_in(1:num_sym)=dft_out;
        sc_ifft_out=sqrt(total_sub)*ifft(sc_ifft_in);
        
        noise_power=10^(-snr(n)/10);
        tmp = randn(2, total_sub);
        complex_noise=(tmp(1,:)+j*tmp(2,:))/sqrt(2);
        rx_samples=ifft_out+complex_noise*sqrt(noise_power);
        sc_rx_samples=sc_ifft_out+complex_noise*sqrt(noise_power);
        
        data_re_fft=fft(rx_samples);
        data_received=data_re_fft(1:num_sym);
        if modu_type=='Q-PSK',
            data_received=sign(real(data_received))+j*sign(imag(data_received));
            data_received=data_received/sqrt(2);
            right_num=find((data_received-data)==0);
            error_count=error_count+(num_sym-length(right_num));
        elseif modu_type=='16QAM'
 %           location=1:16;
            for L=1:num_sym
                length=abs(data_received(L)-data_set);
                data_detection=(length==min(length));
                num_position=find(data_detection);
                data_received(L)=data_set(num_position);
                if data_received(L)~=data(L)
                    error_count=error_count+1;
                end
            end
        end
%        right_num=find((data_received-data)==0);
%        error_count=error_count+(num_sym-length(right_num));
        
        sc_re_fft=fft(sc_rx_samples);
        sc_re_ifft=sc_re_fft(1:num_sym);
        sc_received=ifft(sc_re_ifft);
        if modu_type=='Q-PSK',
            sc_received=sign(real(sc_received))+j*sign(imag(sc_received));
            sc_received=sc_received/sqrt(2);
            sc_right_num=find((sc_received-data)==0);
           sc_error_count=sc_error_count+(num_sym-length(sc_right_num));
        elseif modu_type=='16QAM'
  %          location=1:16;
            for L=1:num_sym
                length=abs(sc_received(L)-data_set);
                sc_detection=(length==min(length));
                num_position=find(sc_detection);
                sc_received(L)=data_set(num_position);
                if sc_received(L)~=data(L)
                   sc_error_count=sc_error_count+1;
                end
            end
        end
 %       sc_right_num=find((sc_received-data)==0);
 %       sc_error_count=sc_error_count+(num_sym-length(sc_right_num));
%        for k=1:num_sym
%            re_detection=abs(data_received(k)-data_set);
 %           min_len=min(rx_detection);
 %           if min_len==re_detection(1)
  %              data_received(k)=1+j;
  %          elseif min_len==re_detection(2)
  %              data_received(k)=-1+j;
  %          elseif min_len==re_detection(3)
 %               data_received(k)=-1-j;
  %          else
    %            data_received(k)=1-j;
    %        end
%            if data_received(k)~=data(k)
  %              error_count=error_count+1;
  %          end
  %      end
    end
    error(n)=error_count/(num_run*num_sym);
    sc_error(n)=sc_error_count/(num_run*num_sym);
end
semilogy(snr,error,'o-',snr,sc_error,'>-');
%axis([0 20 0 1]);
legend('OFDM','SC-FDMA');
%semilogy(snr,sc_error);

            
                 

⌨️ 快捷键说明

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