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

📄 ofdm.m

📁 ofdm的简单模型仿真
💻 M
字号:
%==========================================================================
% The mfile investigates the effects of high power amplifier on the ofdam
% signals. The effects on spectrum ang Modulation Error Rate (MER) is of
% more concern.
% 
% Written By     : Hamid Ramezani
% Date           : 17-Jun-2007
% Code version   : 1
% Matlab Version : 7.4.0.287 (R2007a)
%==========================================================================

% Initialization
    clear all;
    close all;
    clc;
    
%==========================================================================
% Setting Parameters
%==========================================================================

    N           = 256;     
    M           = 64;       
    numOfZeros  = N/4+1;    
                           
                           
    GI          = 1/4;      
    BW          = 20;       
    numOfSym    = 100;     
    
 
    satLevel = 5;  
    
%==========================================================================
%   Main Program
%==========================================================================
    txData     = randint(N-numOfZeros,numOfSym,M);  
    txDataMod  = qammod(txData,M);
    

    txDataZpad = [txDataMod((N-numOfZeros+1)/2:end,:);...
                  zeros(numOfZeros,numOfSym);...
                  txDataMod(1:(N-numOfZeros+1)/2-1,:)];

        

    txDataZpadIfft = sqrt(N)*ifft(txDataZpad,N);
   

    txDataZpadIfftGI    = [txDataZpadIfft((1-GI)*N+1:end,:);txDataZpadIfft];
    

    txDataZpadIfftGIAbs     = abs(txDataZpadIfftGI);            


    txDataZpadIfftGIAbsStd  = mean(std(txDataZpadIfftGIAbs));   
    txDataZpadIfftGIAbsMean = mean(mean(txDataZpadIfftGIAbs));
    

    txDataZpadIfftGIAng     = angle(txDataZpadIfftGI);
    

    txDataZpadIfftGIAbsHPA = txDataZpadIfftGIAbs ./...
           sqrt(1+(txDataZpadIfftGIAbs/(txDataZpadIfftGIAbsMean*10^(satLevel/10))).^2);
 
    txDataZpadIfftGIAngHPA = txDataZpadIfftGIAng;
    
 
    txDataZpadIfftGIAbsHPAmean = mean(mean(txDataZpadIfftGIAbsHPA));

    txDataZpadIfftGIAbsHPAStd  = mean(std(txDataZpadIfftGIAbsHPA));
    


    txDataZpadIfftGIHPA    = txDataZpadIfftGIAbsHPA.* ...
                            exp(sqrt(-1) * txDataZpadIfftGIAngHPA);                            


    rxDataZpadIfftHPA  = txDataZpadIfftGIHPA(GI*N+1 : N+GI*N,:);

    rxDataZpadHPA      = 1/sqrt(N)*fft(rxDataZpadIfftHPA,N);

    rxDataModHPA       = [rxDataZpadHPA((N-(N-numOfZeros-1)/2+1):N,:);...
                          rxDataZpadHPA(1:(N-numOfZeros+1)/2,:)];

    rxDataHPA          = qamdemod(rxDataModHPA/mean(std(rxDataModHPA))*mean(std(txDataMod)),M);
    
%==========================================================================
%       statistical computation
%==========================================================================

    MER       = 10*log10(mean(var(rxDataModHPA./mean(std(rxDataModHPA))...
                 - txDataMod./mean(std(txDataMod)))));

    [num BER] = symerr(rxDataHPA,txData);
%==========================================================================
% graphical observation
%==========================================================================
   f1 = figure(1);    
   set(f1,'color',[1 1 1]);
        subplot(2,2,1);
            
            spectrumFftSize = 2*N;
  
            txSpec  = 20*log10(mean(abs(fft(txDataZpadIfftGI(:,:)./ ...
                      mean(std(txDataZpadIfftGI)),spectrumFftSize)),2));
     
            HpaSpec = 20*log10(mean(abs(fft(txDataZpadIfftGIHPA(:,:)./ ...
                      mean(std(txDataZpadIfftGIHPA)),spectrumFftSize)),2));

            Freq    = linspace(-BW/2,BW/2,length(txSpec));
            
            plot(Freq,[txSpec(length(txSpec)/2:length(txSpec));...
                txSpec(1:(length(txSpec)/2-1))]);
            hold on
            grid on
            plot(Freq,[HpaSpec(length(txSpec)/2:length(txSpec));...
                HpaSpec(1:(length(txSpec)/2-1))],'r');
            grid on;
            xlabel('representing frequency');
            ylabel('spectrum signals (first symbol)');
            title('Spectrum Effects')
            legend('Befor Amplifier','After Amplifier')

        subplot(2,2,2);
            plot(real(reshape(rxDataModHPA,1,numOfSym*(N-numOfZeros)))/mean(std(rxDataModHPA)),...
                 imag(reshape(rxDataModHPA,1,numOfSym*(N-numOfZeros)))/mean(std(rxDataModHPA)),'.r')
            hold on
            plot(real(reshape(txDataMod,1,numOfSym*(N-numOfZeros)))/mean(std(txDataMod)),...
                 imag(reshape(txDataMod,1,numOfSym*(N-numOfZeros)))/mean(std(txDataMod)),'.b')
            xlabel('I channel');
            ylabel('Q channel');
            title('signal Constelleations');
            legend('After Amplifier','Before Amplifier');

    	subplot(2,2,3)
   
            txAmp = linspace(0,5,100);
            amAmp = txAmp./(1+(txAmp/satLevel).^2);
            plot(txAmp,txAmp,'b');
            hold on
            plot(txAmp,amAmp,'r');
            plot(1,1,'om');
            xlabel('Input Amplitude');
            ylabel('Output Amplitude');
            title('AM/AM response of power amplifier');
            legend('Linear Response','Amplifier Response','Mean of OFDM Amplitude');
            
        subplotHandel = subplot(2,2,4);
            text(0,1 ,['Mean Error Rate     : ',num2str(MER),' dB']);
            text(0,.8,['Bit  Error Rate     : ',num2str(BER)]);
            
            text(0,.6,['Modulation          : ',num2str(M),' QAM']);   
            text(0,.4,['IFFT Size           : ',num2str(N),' points']);  
            text(0,.2,['Guard Interval Size : ',num2str(N),' points']);              
            text(0,.0,['Saturation Level    : ',num2str(satLevel),' dB relative to AM Avg']);

            set(subplotHandel,'Xcolor',[1 1 1]);
            set(subplotHandel,'Ycolor',[1 1 1]);

⌨️ 快捷键说明

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