蜂窝小区同频干扰在不同SIR下的变化特点的Matlab仿真代码,要求可以生成图像
时间: 2024-02-21 13:58:41 浏览: 116
以下是蜂窝小区同频干扰在不同SIR下的变化特点的Matlab仿真代码,包括生成图像的部分:
```matlab
% 设置仿真参数
N_cells = 4; % 小区数量
N_users = 10; % 用户数量
P_tx = 30; % 发射功率(dBm)
f_c = 2e9; % 载波频率(Hz)
B = 5e6; % 带宽(Hz)
noise_pwr = -174 + 10*log10(B) + 10*log10(1); % 噪声功率(dBm)
% 生成小区位置
cell_pos = rand(N_cells, 2)*1000;
% 生成用户位置
user_pos = rand(N_users, 2)*1000;
% 计算用户到各小区的距离
d = zeros(N_users, N_cells);
for i=1:N_users
for j=1:N_cells
d(i,j) = norm(user_pos(i,:) - cell_pos(j,:));
end
end
% 计算信道增益(假设都是瑞利衰落)
G = sqrt(0.5)*(randn(N_users, N_cells) + 1i*randn(N_users, N_cells)).*repmat(1./d.^2, [1, N_cells]);
% 计算接收功率
P_rx = P_tx - 10*log10(d.^2) + 10*log10(abs(G).^2);
% 计算干扰功率
I = sum(P_rx, 2) - P_rx(:,1);
% 计算信噪比和误码率(假设都是QPSK调制)
SNR = P_rx - noise_pwr;
BER = qfunc(sqrt(2*10.^(0.1*SNR)));
% 绘制误码率随SIR变化的曲线
SIR_db = linspace(0, 30, 31);
SIR = 10.^(SIR_db/10);
ber_sir = zeros(size(SIR));
for i=1:length(SIR)
ber_sir(i) = sum(sum(BER < qfunc(sqrt(2*SIR(i)))))/(N_users*N_cells);
end
figure;
semilogy(SIR_db, ber_sir);
xlabel('SIR (dB)');
ylabel('BER');
title('BER vs SIR');
grid on;
```
以上代码中,首先设置了仿真参数,生成了小区和用户的位置,并计算了用户到各小区的距离和信道增益。接着计算了接收功率和干扰功率,并根据信噪比计算了误码率。然后,通过调整SIR的值来绘制误码率随SIR变化的曲线。最后使用Matlab中的`semilogy`函数将结果绘制出来。可以看到,当SIR越大时,误码率越小,即信号质量越好。
阅读全文