✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。

🍎个人主页:Matlab科研工作室

🍊个人信条:格物致知。

⛄ 内容介绍

交频分复用(OFDM)是一种多载波宽带数字调制技术,它具有频带利用率高和抗多径干扰能力强等优点,因而适合于高速率的无线通信系统.分析了OFDM技术的实现原理,用MATLAB软件对OFDM的传输性能进行了仿真模拟并对结论进行了分析.

⛄ 完整代码

%==========================================================================

% 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

%==========================================================================

    % OFDM System Parameters

    N           = 256;      % length of OFDM IFFT (16,32,64,...,2^n)

    M           = 64;       % number of QAM constellation points (4,16,64,256)

    numOfZeros  = N/4+1;    % numOfZeros must be an odd number and lower 

                            % than N. The zero padding operation is

                            % necessarry in practical implementations.

    GI          = 1/4;      % Guard Interval (1/4,1/8,1/16,...,4/N)

    BW          = 20;       % OFDM signal Band width in MHz

    numOfSym    = 100;      % number of OFDM Symbols

    

    % Amplifire Parameters

    satLevel = 5;   % in dB , higher than the tx out mean of voltage

    

%==========================================================================

%   Main Program

%==========================================================================

    txData     = randint(N-numOfZeros,numOfSym,M);  % data generation

    

    % QAM modulation

    txDataMod  = qammod(txData,M);

    

    % zeros padding

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

                  zeros(numOfZeros,numOfSym);...

                  txDataMod(1:(N-numOfZeros+1)/2+1,:)];

        % Note : in practice zero padding operation must be followed by

        % a standard. Usually the last part of data frame shifts to the first

        % part of zero padded frame.

        

   % IFFT

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

   

    % Guard Interval Insertion

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

    

    % Amplifier Model

    txDataZpadIfftGIAbs     = abs(txDataZpadIfftGI);            % tx data amplitude


    % tx data amplitude standard deviation and mean

    txDataZpadIfftGIAbsStd  = mean(std(txDataZpadIfftGIAbs));   

    txDataZpadIfftGIAbsMean = mean(mean(txDataZpadIfftGIAbs));

    

    % tx data phase in radian 

    txDataZpadIfftGIAng     = angle(txDataZpadIfftGI);

    

    % It is imagined that the amplifier has no effect on the phase of the

    % signal. The solid state amplifier effects on signal phase is about 5

    % degrees. The amplifier AM/AM response is followed by x/sqrt(1+(x/k)^2)

    txDataZpadIfftGIAbsHPA = txDataZpadIfftGIAbs ./...

           sqrt(1+(txDataZpadIfftGIAbs/(txDataZpadIfftGIAbsMean*10^(satLevel/10))).^2);

    % no change in the phase

    txDataZpadIfftGIAngHPA = txDataZpadIfftGIAng;

    

    % mean of amplitude after amplification

    txDataZpadIfftGIAbsHPAmean = mean(mean(txDataZpadIfftGIAbsHPA));

    % standard deviation after amplification

    txDataZpadIfftGIAbsHPAStd  = mean(std(txDataZpadIfftGIAbsHPA));

    


    % polar to cartesian conversion

    txDataZpadIfftGIHPA    = txDataZpadIfftGIAbsHPA.* ...

                            exp(sqrt(-1) * txDataZpadIfftGIAngHPA);                            


    % receiver part

    % Guard Interval removal

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

    % FFT operation

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

    % zero removal and rearrangement

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

                          rxDataZpadHPA(1:(N-numOfZeros+1)/2,:)];

    % demodulation

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

    

%==========================================================================

%       statistical computation

%==========================================================================

    % Mean Error Rate computation

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

                 - txDataMod./mean(std(txDataMod)))));

    % Bit Error Rate computation

    [num BER] = symerr(rxDataHPA,txData);

%==========================================================================

% graphical observation

%==========================================================================

   f1 = figure(1);    

   set(f1,'color',[1 1 1]);

        subplot(2,2,1);

            

            spectrumFftSize = 2*N;

            % spectrum of signal befor High Power Amplifier

            txSpec  = 20*log10(mean(abs(fft(txDataZpadIfftGI(:,:)./ ...

                      mean(std(txDataZpadIfftGI)),spectrumFftSize)),2));

            % spectrum of signal after High Power Amplifier

            HpaSpec = 20*log10(mean(abs(fft(txDataZpadIfftGIHPA(:,:)./ ...

                      mean(std(txDataZpadIfftGIHPA)),spectrumFftSize)),2));

            % corresponding frequency 

            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)

            % normalize amplitude 

            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']);

            % setting the axes invisibale

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

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

⛄ 运行结果

基于Matlab实现OFDM系统高功率放大器效应_High

基于Matlab实现OFDM系统高功率放大器效应_Power_02

基于Matlab实现OFDM系统高功率放大器效应_High_03

⛄ 参考文献

[1]孙志雄. 基于MATLAB的OFDM系统仿真分析[J]. 信息技术, 2007, 31(12):4.

❤️部分理论引用网络文献,若有侵权联系博主删除
❤️ 关注我领取海量matlab电子书和数学建模资料