Channel.m
上传用户:m_sun_001
上传日期:2014-07-30
资源大小:1115k
文件大小:2k
源码类别:

matlab例程

开发平台:

Matlab

  1. function OutSignal = channel(TimeSignal,clipcompress,SNR,Multipath)
  2. % CHANNEL Applies a channel model to the waveform including, noise, multipath & clipping.
  3. %
  4. % OutSignal = channel(TimeSignal,clipcompress,SNR,Multipath)
  5. %
  6. % The model is the simulate some of the effects of a radio channel. For this reason,
  7. % the effects are applied in the following order : 
  8. % 1. Clipping  : Effect from the output power amplifier.
  9. % 2. Noise     : Thermal noise due to the channel.
  10. % 3. Multipath : Channel effect at the receiver.
  11. %
  12. % INPUTS:
  13. % TimeSignal   : Time waveform of signal to apply the channel to.
  14. % clipcompress : Amount of clipping to apply to the signal, in dB
  15. % Peak Power of original signal / Peak Power after clipping.
  16. % if no clipping is needed choos clipcompress = 0.
  17. % SNR      : SNR of the transmitted signal, in dB,
  18. % RMS power of original signal / RMS power of noise to be added.
  19. % if no noise is needed choose SNR >= 300.
  20. % Multipath    : This is a vector of the magnitude and delay for each reflection.
  21. % This is a coefficient vector for  modelling the multipath with an
  22. % FIR filter. The first coefficient must be 1 if a direct signal is 
  23. % needed.
  24. % For Example : for reflections at sample times : 5 & 7 with magnitude
  25. % of 50% & 30% respectively of the direct signal :
  26. % Multipath = [1 0 0 0 0 0.5 0 0.3]
  27. % If no multipath effect is needed make 'Multipath' = []
  28. % OUTPUTS:
  29. % OutSignal    : Output signal after the model.
  30. %
  31. % Copyright (c) Eric Lawrey 1997
  32. % Modifications:
  33. % 17/6/97 : Started working on the function.
  34. %================================
  35. %Clip the signal
  36. %================================
  37. if clipcompress ~= 0,
  38. MaxAmp = (10^(0-(clipcompress/20)))*max(TimeSignal);
  39. TimeSignal(find(TimeSignal>=MaxAmp))=ones(1,length(find(TimeSignal>=MaxAmp)))*MaxAmp;
  40. TimeSignal(find(TimeSignal<=(-MaxAmp)))=ones(1,length(find(TimeSignal<=(-MaxAmp))))*(-MaxAmp);
  41. % PeaktoRms = 10*log10(max(TimeSignal.^2)/(std(TimeSignal)^2));
  42. end
  43. %================================
  44. %Add noise
  45. %================================
  46. if SNR < 300,
  47. SigPow = std(TimeSignal); %find the signal power
  48. NoiseFac = 10^(0-(SNR/20));
  49. TimeSignal = TimeSignal + randn(1,length(TimeSignal))*SigPow*NoiseFac; 
  50. end
  51. %================================
  52. %Add multipath
  53. %================================
  54. if Multipath ~= []
  55. TimeSignal = filter(Multipath,1,TimeSignal); %add multi path to the signal
  56. end
  57. OutSignal = TimeSignal;