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

📄 slm_2_4.m

📁 OFDM峰均比经典算法matlab程序
💻 M
字号:
clear all
clc
hold on

%Parameter setting
fftn = 128;  %FFT点数
CP_length = fftn/8; %循环前缀长度
symbol_num = 10; %OFDM符号数
M1 = 1;      %调制阶数(1——BPSK)
data_length = fftn*symbol_num*M1;  %数据长度

%Data generating
data_source = bingen(data_length);

%OFDM modulate
data4ifft = reshape(data_source,fftn,symbol_num);  %S/P

        %%%%%%%% PAR Control %%%%%%%%%%%
        %% SLM
        M_n = 2;  %随机相位序列的大小
        P = zeros(fftn,M_n);
        for nn = 1:M_n
            P_temp = rand(fftn,1);
            for jj=1:fftn
                if P_temp(jj,1) <= 0.25
                    P_temp(jj,1) = -j;
                elseif P_temp(jj,1) <= 0.5 && P_temp(jj,1) > 0.25
                    P_temp(jj,1) = -1;
                elseif P_temp(jj,1) <= 0.75 && P_temp(jj,1) > 0.5
                    P_temp(jj,1) = 1;
                elseif P_temp(jj,1) <= 1 && P_temp(jj,1) > 0.75
                    P_temp(jj,1) = j;
                end
            end
            P(:,nn) = P_temp;
        end
        
        for ii = 1:symbol_num 
            for mm = 1:M_n
                data4ifft(:,ii) = data4ifft(:,ii).*P(:,mm);
                
                ifft_out(:,ii) = sqrt(fftn)*ifft(data4ifft(:,nn)); %IFFT
                
                %PAPR计算
                arverage_pwr = ifft_out(:,ii)'*ifft_out(:,ii)/fftn;
                max_value = max(abs(ifft_out(:,ii)));
                PAPR(1,mm) = max_value^2/arverage_pwr;
            end
            plotPAPR(ii) = 10*log10(min(PAPR));
        end
         
         %CCDF计算        
         CCDF = zeros(1,13);
         for jj = 1:13
             PAR_temp = zeros(1,symbol_num);
             PAR_temp(find(plotPAPR > jj-1)) = 1;
             CCDF(jj) = sum(PAR_temp)/symbol_num;
         end
         PAR_max = 0:1:12;
         semilogy(PAR_max,CCDF,'r+-')
         grid on
         
         
         
         
         
         
         
clear all
clc
hold on

%Parameter setting
fftn = 128;  %FFT点数
CP_length = fftn/8; %循环前缀长度
symbol_num = 1e5; %OFDM符号数
M1 = 1;      %调制阶数(1——BPSK)
data_length = fftn*symbol_num*M1;  %数据长度

%Data generating
data_source = bingen(data_length);

%OFDM modulate
data4ifft = reshape(data_source,fftn,symbol_num);  %S/P

        %%%%%%%% PAR Control %%%%%%%%%%%
        %% SLM
        M_n = 4;  %随机相位序列的大小
        P = zeros(fftn,M_n);
        for nn = 1:M_n
            P_temp = rand(fftn,1);
            for jj=1:fftn
                if P_temp(jj,1) <= 0.25
                    P_temp(jj,1) = -j;
                elseif P_temp(jj,1) <= 0.5 && P_temp(jj,1) > 0.25
                    P_temp(jj,1) = -1;
                elseif P_temp(jj,1) <= 0.75 && P_temp(jj,1) > 0.5
                    P_temp(jj,1) = 1;
                elseif P_temp(jj,1) <= 1 && P_temp(jj,1) > 0.75
                    P_temp(jj,1) = j;
                end
            end
            P(:,nn) = P_temp;
        end
        
        for ii = 1:symbol_num 
            for mm = 1:M_n
                data4ifft(:,ii) = data4ifft(:,ii).*P(:,mm);
                
                ifft_out(:,ii) = sqrt(fftn)*ifft(data4ifft(:,nn)); %IFFT
                
                %PAPR计算
                arverage_pwr = ifft_out(:,ii)'*ifft_out(:,ii)/fftn;
                max_value = max(abs(ifft_out(:,ii)));
                PAPR(1,mm) = max_value^2/arverage_pwr;
            end
            plotPAPR(ii) = 10*log10(min(PAPR));
        end
         
         %CCDF计算        
         CCDF = zeros(1,13);
         for jj = 1:13
             PAR_temp = zeros(1,symbol_num);
             PAR_temp(find(plotPAPR > jj-1)) = 1;
             CCDF(jj) = sum(PAR_temp)/symbol_num;
         end
         PAR_max = 0:1:12;
         semilogy(PAR_max,CCDF,'k+-')
         grid on

⌨️ 快捷键说明

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