?? cdma信道仿真-awgn多徑衰落信道.txt
字號:
<matalb> CDMA信道仿真-AWGN多徑衰落信道
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% %
% 該函數仿真CDMA系統的信道,在輸入所需用戶序列和其他干擾用戶序列后 %
% 在信號上疊加高斯白噪聲,干擾用戶多徑干擾和所需用戶的多徑干擾和衰落。 %
% 并根據輸入延時曲線產生信道延時,輸出mul_fad_sequence為信道信號輸出 %
% max_delay為信道最大延遲,fade_sign為瑞利信道中最大幅度分量的衰落量 %
% mpath_amp為信道多徑的幅度因子 %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function [mul_fad_sequence,max_delay,fade_sign,rake_rev_sequence,mpath_amp] = cdma_channel_simulation(...
sequence,sf,mpath_delay,eb_no,k_factor)
% sequence 發射機的輸出序列
% sf 擴頻因子
% mpath_delay 多徑傳輸延時
% snr 信道信噪比
% k_factor 萊斯k因子
mpath_delay = sort(mpath_delay); % 保證多徑延時按照升序排列
eb_no_linear = 10^(eb_no/10); % 轉換信號噪聲比
[signal_row,signal_len] = size(sequence);
if signal_row == 1 % 初始化干擾用戶數目
interfering_num = 0;
else
interfering_num = signal_row - 1;
end
%%
mpath_len = length(mpath_delay); % 多徑成分,得到多徑延遲曲線的長度
mpath_amp(2:mpath_len) = rand(1,mpath_len-1); % 隨機生成多徑成分幅度
scatter_power = mpath_amp*mpath_amp'; % 多徑成分離散功率
mpath_amp(1) = sqrt(scatter_power*k_factor); % 視距成分的幅度(LOS)
[max_mpath_amp,max_index] = max(mpath_amp); % 得到多徑分量的最大幅度
mpath_amp = mpath_amp/max_mpath_amp; % 歸一化多徑衰落幅度,最大幅度因子為1
% 設計衰落信號的IIR濾波器
FilterOrder = 4; Ripple = 0.5; BW = 0.01; % 濾波器階數為4,通帶衰減為0.5,帶寬0.01
[b,a] = cheby1(FilterOrder,Ripple,BW); % 得到切比雪夫1型濾波器的參數
%%
%生成信道噪聲
noise_amplitude = sqrt(sf/(2*eb_no_linear));
% 計算噪聲的強度,如果擴頻因子越大,信號對擴頻序列的影響也越大
% 信道噪聲與信噪比成反比,信噪比越大,噪聲幅度越小
max_delay = max(mpath_delay); % 得到最大延時
len = signal_len;
desired_noise = noise_amplitude*randn(1,len+max_delay);
% 所需的噪聲序列,長度要比信源序列的長度長最大延時單位
rake_desired_noise = desired_noise(1:len);
%%
mpath_len = length(mpath_delay); % 多徑成分的向量長度
interfering_sequence = sequence(2:(interfering_num+1),:);
if interfering_num > 0 % 如果存在干擾器
interfering_signal = zeros(interfering_num,len+max_delay); % 初始化干擾器的信號
rake_interfering_signal = zeros(mpath_len,len);
for k = 1:mpath_len % 利用多徑延時曲線成員的數量開始循環
rake_interfering_signal(k,:) = sum(mpath_amp(k)*...
interfering_sequence,1); % 多徑疊加,但消除延遲
index = 1+mpath_delay(k):len+mpath_delay(k); % 設置索引號
interfering_signal(:,index) = ... % 多徑干擾信號采用加性疊加的方式
interfering_signal(:,index) + ...
mpath_amp(k)*interfering_sequence; % mpath_amp相當于干擾碼序列的權重因子
end
end
%%
zf = zeros(FilterOrder,mpath_len);
desired_sequence = sequence(1,:);
desired_mpath_signal = zeros(1,len+max_delay); % 初始化所需的多徑信號
rake_mpath_signal = zeros(mpath_len,len);
for k = 1:mpath_len
if k == 1
fading = ones(1,len);
else
fading = randn(1,len/(2^sf-1)) + k*randn(1,len/(2^sf-1));
% 信道模型,瑞利隨機過程發生器
[fading zf(:,k)] = filter(b,a,fading,zf(:,k));
fading = interp(fading,(2^sf-1));
fading = abs(fading/sqrt(mean(fading.*conj(fading))));
end
if k == max_index
fade_sign = sign(fading);
end
rake_mpath_signal(k,:) = (mpath_amp(k)*fading).*desired_sequence;
% rake不含延時的所需用戶的多徑衰落分量
index = 1+mpath_delay(k):len+mpath_delay(k);
desired_mpath_signal(index) = ...
% 利用瑞利隨機過程發生器生成的隨機衰落序列
desired_mpath_signal(index)+... % 產生衰減的效果
(mpath_amp(k)*fading).*desired_sequence;
end
%%
if interfering_num > 0
% 合并用戶多徑信號,干擾用戶多徑信號和信道高斯白噪聲
mul_fad_sequence = desired_mpath_signal + ...
sum(interfering_signal,1) + desired_noise;
for k = 1:mpath_len
rake_rev_sequence(k,:) = rake_mpath_signal(k,:) + ...
rake_interfering_signal(k,:) + rake_desired_noise;
end
else
mul_fad_sequence = desired_mpath_signal + desired_noise;
for k = 1:mpath_len
rake_rev_sequence(k,:) = rake_mpath_signal(k,:) + rake_desired_noise;
end
end
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -