clc; clear; close all; tic; N=128; M=[4 16 32 64]; D=5; c=0.15; nt=0.1289; nr=0.9500; N_ofdm=1000; snr_dB=1:18; SNR=10.^(snr_dB./10); for kk=1:length(snr_dB) N_fft=N*2+2; for jj=1:length(M) base_data=randi([0 1],1,N*N_ofdm*log2(M(jj))); data_temp1= reshape(base_data,log2(M(jj)),[])'; data_temp2= bi2de(data_temp1); mod_data = qammod(data_temp2,M(jj)); data=reshape(mod_data,N,[])'; H_data=zeros(N_ofdm,N_fft); H_data(:,2:N_fft/2)= data; H_data(:,N_fft/2+2:N_fft)= conj(fliplr(data)); ifft_data=ifft(H_data,[],2); ifft_data=ifft_data+0.02*ones(size(ifft_data)); Noise=awgn(ifft_data,SNR(kk),'measured')-ifft_data; Rx_data=ifft_data*nt*nr*exp(-c*D)+Noise; Rx_data=Rx_data/(nt*nr*exp(-c*D)) fft_data=fft(Rx_data,[],2); Rx_psk_data=fft_data(:,2:N_fft/2); demodulation_data = qamdemod(Rx_psk_data',M(jj)); demodulation_data= reshape(demodulation_data,[],1); temp1=de2bi(demodulation_data); err(kk,jj)=sum(sum((temp1~=data_temp1))); end BER(kk,:)=err(kk,:)./(N*N_ofdm*log2(M(jj))); end figure(); for a=1:length(M) semilogy(snr_dB,BER(:,a),'*-','LineWidth',1.5);hold on; end
时间: 2023-06-16 12:07:35 浏览: 59
这段代码是用来模拟无线通信系统中的 BER(误比特率)与 SNR(信噪比)之间的关系。其中,N是子载波数目,M是调制方式,D是传输距离,c是衰减系数,nt和nr是发射和接收天线的增益,N_ofdm是OFDM符号数目。
代码中先生成随机的二进制数据,然后将其进行 M-QAM 调制,生成调制后的数据。接着,对调制后的数据进行 OFDM 变换,加上高斯白噪声,进行逆变换,并加上信道衰减。最后,对接收到的数据进行 FFT 变换,并将其还原为二进制数据,计算误码率。
代码最后使用 semilogy 函数将误码率与信噪比之间的关系画出来,以便对无线通信系统的性能进行分析。
相关问题
clc;clear all ;close all; xpipei=zeros(19,21);%定义变量。变量规划 readbmp=du
这段代码实际上是MATLAB的代码。
首先,clc命令用于清除命令窗口的内容,使其变为空白。
clear all命令用于清除MATLAB工作空间中的所有变量和函数。
close all命令用于关闭所有已打开的图形窗口。
xpipei=zeros(19,21); 定义了一个名为xpipei的变量,它是一个19行、21列的零矩阵。
readbmp=du; 定义了一个名为readbmp的变量,它的值是du。
根据代码的含义,这段代码的作用是:
清除命令窗口的内容,清除工作空间中的所有变量和函数,关闭所有打开的图形窗口。然后定义一个名为xpipei的19行21列的零矩阵,以及一个名为readbmp的变量,其值为du。
clc clear all close all path=dir('*000'); t0=1; name_train={}; name_test={}; class_train={}; class_test={};
这段代码的作用是读取当前文件夹中以“000”结尾的文件夹中的数据,并将数据分为训练集和测试集,同时记录训练集和测试集的名称和类别。具体实现方式如下:
- `clc`、`clear all` 和 `close all` 是 Matlab 中常用的清除命令,用于清除命令行窗口、工作空间和图形窗口中的内容。
- `path=dir('*000')` 用于获取当前文件夹中以“000”结尾的文件夹的信息,并将这些信息存储在 path 变量中。dir 函数返回一个结构体数组,每个元素表示当前文件夹中的一个文件或子文件夹,包含文件或文件夹的名称、日期、大小等信息。
- `t0=1` 定义一个变量 t0,用于记录已经读取的数据数量。
- `name_train={}` 和 `name_test={}` 定义两个空的单元格数组,用于存储训练集和测试集的名称。
- `class_train={}` 和 `class_test={}` 定义两个空的单元格数组,用于存储训练集和测试集的类别。
接下来的代码是对每个以“000”结尾的文件夹进行遍历,并将其中的数据分为训练集和测试集。具体实现方式如下:
```
for i=1:length(path)
name=path(i).name;
fprintf('Processing %s\n',name);
file=dir(sprintf('./%s/*.mat',name));
for j=1:length(file)
fprintf('Processing file %d/%d\n',j,length(file));
load(sprintf('./%s/%s',name,file(j).name));
if mod(j,5)==0
name_test{end+1}=file(j).name;
class_test{end+1}=name;
else
name_train{end+1}=file(j).name;
class_train{end+1}=name;
end
t0=t0+1;
end
end
```
其中:
- `for i=1:length(path)` 对当前文件夹中以“000”结尾的文件夹进行遍历。
- `name=path(i).name` 获取当前遍历到的文件夹的名称。
- `file=dir(sprintf('./%s/*.mat',name))` 获取当前文件夹中所有以“.mat”为扩展名的文件,并将这些文件的信息存储在 file 变量中。
- `for j=1:length(file)` 对当前文件夹中的所有文件进行遍历。
- `load(sprintf('./%s/%s',name,file(j).name))` 加载当前文件的数据。
- `if mod(j,5)==0` 判断当前文件是训练集还是测试集。每隔 5 个文件取一个作为测试集,其余作为训练集。
- `name_test{end+1}=file(j).name` 将当前文件的名称添加到测试集名称列表中。
- `class_test{end+1}=name` 将当前文件夹的名称添加到测试集类别列表中。
- `name_train{end+1}=file(j).name` 将当前文件的名称添加到训练集名称列表中。
- `class_train{end+1}=name` 将当前文件夹的名称添加到训练集类别列表中。
- `t0=t0+1` 更新已读取的数据数量。
最终,该段代码将得到四个单元格数组:name_train、name_test、class_train 和 class_test,分别存储训练集和测试集的名称和类别。
相关推荐
![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)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)