h=(randn(h_length,nr,nt)+1j *randn(h_length,nr,nt))/sqrt(2)/sqrt(h_length);
时间: 2024-06-03 19:13:23 浏览: 14
这行代码是在生成一个三维的复高斯随机矩阵h,其中h_length是矩阵h的第一维长度,nr是矩阵h的第二维长度,nt是矩阵h的第三维长度。这里使用了randn函数生成高斯分布的实数部分和虚数部分,然后乘以1j将实数部分转换为虚数部分,最后除以sqrt(2)和sqrt(h_length)将矩阵h的元素值限制在[-1,1]之间,并保证整个矩阵h的能量为1。
相关问题
clear; close all; clc; q=1.6e-19; Ib=202e-6; N0=2*q*Ib; Rb=1e6; Tb=1/Rb; R=1; sig_length=1e6; D=5; c=0.15; nt=0.1289; nr=0.9500; N = 10^5; Eb_N0_dB = 1:15; Eb_N0 = 10.^(Eb_N0_dB./10); M = 4; k = 2; s0 = [1 0 0 0]; s1 = [0 1 0 0]; s2 = [0 0 1 0]; s3 = [0 0 0 1]; alpha = [1 2 3 4]; for ii = 1:length(Eb_N0) transmit = randsrc(1,N,alpha); receive = zeros(1,N); P_avg(ii)=sqrt(N0*Rb*Eb_N0(ii)/(2*R^2)); i_peak(ii)=2*R*P_avg(ii); Ep(ii)=i_peak(ii)^2*Tb; sgma(ii)=sqrt(N0*Ep(ii)/2); th=0.5*Ep(ii); for jj = 1:length(transmit) y = zeros(1,4); if transmit(jj) == 1 y =nt*nr.*s0.*exp(-c*D)+sgma(ii)*randn(size(s2)); elseif transmit(jj) == 2 y = nt*nr.*s1.*exp(-c*D)+sgma(ii)*randn(size(s2)); elseif transmit(jj) == 3 y = nt*nr.*s2.*exp(-c*D)+sgma(ii)*randn(size(s2)); elseif transmit(jj) == 4 y = nt*nr.*s3.*exp(-c*D)+sgma(ii)*randn(size(s2)); end y(find(y>th))=1; cmetrics = [dot(y,s0) dot(y,s1) dot(y,s2) dot(y,s3)]; [C, receiveindex] = max(cmetrics); receive(jj) = receiveindex; end errorCount(ii) = nnz([receive - transmit]); end totalError = errorCount/N代码逐句解释
这段代码实现了一个基本的QPSK数字通信系统的仿真,其中QPSK是一种调制方式,将数字信息编码成一个复数信号,其中每个复数点代表两个比特(bit)的信息。下面对代码逐句解释:
```
clear; close all; clc;
```
清空变量,关闭所有的图形窗口,清空命令行窗口。
```
q=1.6e-19; Ib=202e-6; N0=2*q*Ib; Rb=1e6; Tb=1/Rb; R=1; sig_length=1e6; D=5; c=0.15;
```
定义常量,包括电子电荷q、电流Ib、噪声功率谱密度N0、码率Rb、码元时间Tb、电阻R、信号长度sig_length、传播距离D和损耗系数c。
```
nt=0.1289; nr=0.9500; N = 10^5; Eb_N0_dB = 1:15; Eb_N0 = 10.^(Eb_N0_dB./10); M = 4; k = 2;
```
定义常量,包括发射端天线增益nt、接收端天线增益nr、发送比特数N、信号能量与噪声功率比Eb/N0(单位为分贝)、调制方式M(这里为QPSK)和每个符号所代表的比特数k。
```
s0 = [1 0 0 0]; s1 = [0 1 0 0]; s2 = [0 0 1 0]; s3 = [0 0 0 1]; alpha = [1 2 3 4];
```
定义4个QPSK调制点,每个点代表两个比特,因此一个符号可以代表4个比特。alpha定义了4个调制点所对应的整数值,分别是1、2、3、4。
```
for ii = 1:length(Eb_N0)
```
循环,从Eb/N0的最小值开始,逐渐增加。
```
transmit = randsrc(1,N,alpha);
```
产生长度为N的随机整数向量,取值为alpha中的四个整数。
```
receive = zeros(1,N);
```
初始化接收向量。
```
P_avg(ii)=sqrt(N0*Rb*Eb_N0(ii)/(2*R^2));
```
计算平均功率。
```
i_peak(ii)=2*R*P_avg(ii);
```
计算峰值电流。
```
Ep(ii)=i_peak(ii)^2*Tb;
```
计算每个符号的能量。
```
sgma(ii)=sqrt(N0*Ep(ii)/2);
```
计算噪声标准差。
```
th=0.5*Ep(ii);
```
计算判决门限。
```
for jj = 1:length(transmit)
```
循环,处理每个发送比特。
```
y = zeros(1,4);
```
初始化接收信号向量。
```
if transmit(jj) == 1
y =nt*nr.*s0.*exp(-c*D)+sgma(ii)*randn(size(s2));
elseif transmit(jj) == 2
y = nt*nr.*s1.*exp(-c*D)+sgma(ii)*randn(size(s2));
elseif transmit(jj) == 3
y = nt*nr.*s2.*exp(-c*D)+sgma(ii)*randn(size(s2));
elseif transmit(jj) == 4
y = nt*nr.*s3.*exp(-c*D)+sgma(ii)*randn(size(s2));
end
```
模拟信号在传输过程中的衰减和噪声影响。
```
y(find(y>th))=1;
```
判决,如果接收信号大于判决门限,则判定为1。
```
cmetrics = [dot(y,s0) dot(y,s1) dot(y,s2) dot(y,s3)];
```
计算接收信号与四个调制点之间的相关性。
```
[C, receiveindex] = max(cmetrics);
```
找到相关性最大的调制点。
```
receive(jj) = receiveindex;
```
记录接收到的比特值。
```
end
```
处理完一个符号,继续处理下一个符号。
```
errorCount(ii) = nnz([receive - transmit]);
```
计算误比特率。
```
end
```
处理完所有的Eb/N0值。
```
totalError = errorCount/N
```
计算误比特率。
OFDM-MIMO多径信道的LS估计,绘制MSE与信噪比的关系图的代码
以下是基于MATLAB的OFDM-MIMO多径信道LS估计,绘制MSE与信噪比关系图的代码:
```matlab
clear all;
close all;
% 设置参数
M = 4; % 调制阶数
Nt = 2; % 发射天线数
Nr = 2; % 接收天线数
SNR_dB = 0:5:30; % 信噪比范围
numIter = 1000; % 模拟次数
num_tap = 4; % 多径信道时延数
num_subcarrier = 64; % 子载波数
% 生成QPSK调制信号
data = randi([0 M-1], Nt, num_subcarrier);
% 构造发送信号
x = qammod(data, M);
% 构建MIMO多径信道
for i = 1:length(SNR_dB)
SNR = 10^(SNR_dB(i)/10);
h = zeros(Nr, Nt, num_tap);
for j = 1:num_tap
h(:,:,j) = (randn(Nr, Nt) + 1j*randn(Nr, Nt))/sqrt(2);
end
n = sqrt(1/SNR)*(randn(Nr, num_subcarrier, num_tap) + 1j*randn(Nr, num_subcarrier, num_tap))/sqrt(2);
y_tmp = zeros(Nr, num_subcarrier, num_tap);
for j = 1:num_tap
y_tmp(:,:,j) = squeeze(h(:,:,j))*x(:,:,j) + squeeze(n(:,:,j));
end
y(:,:,i) = sum(y_tmp, 3);
H(:,:,i) = squeeze(sum(h, 3));
end
% LS信道估计
H_LS = zeros(Nr, Nt, num_subcarrier, length(SNR_dB));
for i = 1:length(SNR_dB)
for j = 1:num_subcarrier
H_LS(:,:,j,i) = y(:,j,i)*x(:,j,i)'/(x(:,j,i)*x(:,j,i)');
end
end
% 计算MSE
MSE_LS = zeros(length(SNR_dB), 1);
for i = 1:length(SNR_dB)
for j = 1:num_subcarrier
for k = 1:numIter
noise = sqrt(1/SNR)*(randn(Nr, 1) + 1j*randn(Nr, 1))/sqrt(2);
H_est = y(:,j,i)*x(:,j,i)'/(x(:,j,i)*x(:,j,i)');
MSE_LS(i) = MSE_LS(i) + norm(H(:,:,i) - H_est, 'fro')^2;
end
end
end
MSE_LS = MSE_LS/numIter/num_subcarrier;
% 绘制MSE与信噪比关系图
figure;
semilogy(SNR_dB, MSE_LS, 'r-o');
title('LS信道估计MSE与信噪比关系图');
xlabel('信噪比 (dB)');
ylabel('MSE');
grid on;
```
该代码使用LS算法对OFDM-MIMO多径信道进行信道估计,并绘制了MSE与信噪比之间的关系图。
相关推荐
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)