📄 channel.m
字号:
function varargout = channel(sig,ch_conf,fading,varargin)%CHANNEL MIMO channel model.% SIG_OUT = CHANNEL(SIG_IN,FADING,SNR) corrupts input signal% SIG_IN by the desired type of channel fading. Possible values% for FADING are 'None'|'AWGN'|'Rayleygh'. A signal-to-noise % ratio in decibels must be set unlike a 'None' fading is chosen.% Fading is assumed to be quasistatic and flat. %% NOTE: When a 'None' option is chosen than there are no noise in% the MIMO channel, however the direct signals will be% combined at the receiver input.%% [SIG_OUT,CH_COEFS] = CHANNEL(SIG_IN,FADING,SNR) same as above% but returns a matrix of complex path fading. This may be useful% when performing data detection.%% [SIG_OUT,CH_COEFS] = CHANNEL(SIG_IN,FADING,SNR,'EchoOn') turns% the function echo on.%% See also DETECT, EST.% Copyright 2001-2002 Kamil Anis, anisk@feld.cvut.cz% Dept. of Radioelectronics, % Faculty of Electrical Engineering% Czech Technical University in Pragu% $Revision: 2.0 $ $Date: 2002/10/23 17:33:28 $% --% <additional stuff should go here>[sig_length,space_dim,frames] = size(sig);sig_pwr = varargin{1};snr = varargin{2};symb_time = varargin{3};smplper = varargin{4};%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% BODY BEGIN %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%sigma_ch = 1;esr = symb_time * sigma_ch ^2 * ch_conf(1) * sig_pwr;n0 = esr / (10 ^ (0.1 * snr));sigma = sqrt(2 * n0 / smplper);const = sqrt(2);switch fadingcase 'Rayleigh' ch_coefs = (randn(ch_conf(1),ch_conf(2),frames) +... i * randn(ch_conf(1),ch_conf(2),frames)) / const; ch_noise = (randn(sig_length,space_dim,frames) +... i * randn(sig_length,space_dim,frames)) * sigma / const;case 'AWGN' ch_coefs = ones(ch_conf(1),ch_conf(2),frames); ch_noise = (randn(sig_length,space_dim,frames) +... i * randn(sig_length,space_dim,frames)) * sigma / const;case 'None' ch_coefs = ones(ch_conf(1),ch_conf(2),frames); ch_noise = zeros(sig_length,space_dim,frames);end% signal mixturefor k = 1:frames % no 3D arrays multiplication is available sig_add(:,:,k) = sig(:,:,k) * ch_coefs(:,:,k);endsig_corr = sig_add + ch_noise;varargout = {sig_corr,ch_coefs};%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% BODY END %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%if (isempty(varargin) == 0) & (varargin{end} == 'EchoOn') [indent,gap,name] = iprompt('CHANEL:'); switch fading case 'None' str2 = ['']; otherwise str1 = num2str(snr); str2 = [' ,SNR -> ',str1,' [dB]']; end disp(' '); disp([name,gap,'Channel fading -> ',fading,str2,'.']); disp(' ');end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -