www.pudn.com > ofdm_matlab.rar > Channel.m


function OutSignal = channel(TimeSignal,clipcompress,SNR,Multipath) 
% CHANNEL Applies a channel model to the waveform including, noise, multipath & clipping. 
% 
%	OutSignal = channel(TimeSignal,clipcompress,SNR,Multipath) 
% 
%	The model is the simulate some of the effects of a radio channel. For this reason, 
%	the effects are applied in the following order :  
%	1. Clipping  : Effect from the output power amplifier. 
%	2. Noise     : Thermal noise due to the channel. 
%	3. Multipath : Channel effect at the receiver. 
% 
%	INPUTS: 
%	TimeSignal   :	Time waveform of signal to apply the channel to. 
%	clipcompress :	Amount of clipping to apply to the signal, in dB 
%			Peak Power of original signal / Peak Power after clipping.	 
%			if no clipping is needed choos clipcompress = 0. 
%	SNR	     :	SNR of the transmitted signal, in dB, 
%			RMS power of original signal / RMS power of noise to be added. 
%			if no noise is needed choose SNR >= 300. 
%	Multipath    :	This is a vector of the magnitude and delay for each reflection. 
%			This is a coefficient vector for  modelling the multipath with an 
%			FIR filter. The first coefficient must be 1 if a direct signal is  
%			needed. 
%			For Example : for reflections at sample times : 5 & 7 with magnitude 
%			of 50% & 30% respectively of the direct signal : 
%			Multipath = [1 0 0 0 0 0.5 0 0.3] 
%			If no multipath effect is needed make 'Multipath' = [] 
%	OUTPUTS: 
%	OutSignal    : Output signal after the model. 
% 
%	Copyright (c) Eric Lawrey 1997 
 
%	Modifications: 
%	17/6/97 : Started working on the function. 
 
%================================ 
%Clip the signal 
%================================ 
if clipcompress ~= 0, 
	MaxAmp = (10^(0-(clipcompress/20)))*max(TimeSignal); 
	TimeSignal(find(TimeSignal>=MaxAmp))=ones(1,length(find(TimeSignal>=MaxAmp)))*MaxAmp; 
	TimeSignal(find(TimeSignal<=(-MaxAmp)))=ones(1,length(find(TimeSignal<=(-MaxAmp))))*(-MaxAmp); 
%	PeaktoRms = 10*log10(max(TimeSignal.^2)/(std(TimeSignal)^2)); 
end 
%================================	 
%Add noise 
%================================ 
if SNR < 300, 
	 
	SigPow = std(TimeSignal);	%find the signal power 
	NoiseFac = 10^(0-(SNR/20)); 
	TimeSignal = TimeSignal + randn(1,length(TimeSignal))*SigPow*NoiseFac;  
end 
 
%================================ 
%Add multipath 
%================================ 
if isempty(Multipath) 
	TimeSignal = filter(Multipath,1,TimeSignal);	%add multi path to the signal 
end 
 
OutSignal = TimeSignal;