www.gusucode.com > ofdm结合2x2的m.. > ofdm结合2x2的m...构的WLAN环境数据传输仿真程序matlab版,包括信道估计和同步等模块/tx_power_amplifier.m
% AMP - Non-linear power amplifier % % usage:[out,inPow,outPow,P3,P_I]=tx_power_amplifier(in,one_dB,G,R,s,N); % [out,inPow,outPow]=tx_power_amplifier(in,1,1,R,s,N,T); % % in: Input data stream % one_dB: Output power at 1 db compression point for amplifier (dBW) % G: Linear Gain of the amplifier (dB) % R: Source Impedance % s: Knee sharpness of limiter % N: Number of samples in one period for power estimation % % out: Output data stream % inPow: Estimate of input power. (dB) % outPow: Estimate of output power (dB) % P3: Estimate of third order intermod products power (dB) % PI: Estimate of third order intercept power (dB) function [out,inPow,outPow,P3,P_I]=amp(in,one_dB,G,R,s,N,T); % % REFERENCES: % % TARGET: % % REVISION HISTORY: % DATE AUTHOR DESCRIPTION STR % 02-28-97 John D Terry Original Code % %******************************************************************************* [r,q]=size(in); if r>q in=in.'; L=r; else L=q; end if ~(r == 1 | q == 1) error('input must be a vector'); end % % Compute square of each sample % square=in.*conj(in); % % Group data into integral number of periods for power estimation % integral=reshape(square(1:N*floor(L/N)),N,floor(L/N)); % % Compute power estimates % P_est=mean(integral'); % % Compute average Input Power % P_avg=10*log10(mean(P_est'))-10*log10(R); inPow=P_avg; if nargin==6 % % Linear Gain and correction for limiting amplifier's gain % G=G+20*log10(.7); k1=10^(G/20); % % Compute coefficient of cubic power needed to meet third order intercept point % k3=10^((30*log10(k1)-10*log10(17.33)-one_dB-10*log10(R))/10); % % Compute AM/AM modulation distortion for linear region % third_order=in*k1-k3*in.^3+1e-38; % % Compute AM/AM modulation distortion for linear region % if inPow+G > one_dB + 2 g1=10^((G-1)/20); third_order=g1*in+1e-38; end % % Third order intercept power dBW % P_I=10*log10(2/3*k1^3/k3/R); % % Third order intermod product power dBW % P3=3*P_avg-2*P_I; % % Asymptotic output level of limiter % LL=10^((one_dB+1)/20)*sqrt(R); % % Limiter Output % out=LL*sign(third_order)./(1+(.7*LL./abs(third_order)).^s).^inv(s); elseif nargin==7 % % Asymptotic output level of limiter % LL=10^((max(T(:,2))+4)/20)*sqrt(R); % % Spline Fit % T=((10*ones(size(T))).^(T/10)*R); PP=spline(T(:,1),(T(:,2)./T(:,1))); sqr=(conv(ones(1,N)/N,in.*conj(in))); out=(sqrt(ppval(PP,sqr(N/2:(N/2-1+length(in)))))).*(in+1e-15*max(in)); % % Limiter Output % out=LL*sign(out)./(1+(LL./abs(out)).^s).^inv(s); end % % Estimate Output Power % OP=out.*conj(out); sum_out=reshape(OP(1:N*floor(L/N)),N,floor(L/N)); P_nat=mean(sum_out); outPow=10*log10(mean(P_nat))-10*log10(R);