【OFDM通信】基于matlab OFDM通信系统仿真【含Matlab源码 315期】

举报
海神之光 发表于 2022/05/29 04:03:56 2022/05/29
【摘要】 一、获取代码方式 获取代码方式1: 通过订阅紫极神光博客付费专栏,凭支付凭证,私信博主,可获得此代码。 备注: 订阅紫极神光博客付费专栏,可免费获得1份代码(有效期为订阅日起,三天内有效); 二、O...

一、获取代码方式

获取代码方式1:
通过订阅紫极神光博客付费专栏,凭支付凭证,私信博主,可获得此代码。

备注:
订阅紫极神光博客付费专栏,可免费获得1份代码(有效期为订阅日起,三天内有效);

二、OFDM简介

在这里插入图片描述

三、部分源代码

clear all 
close all
%% 参数设定
N_FFT=256;%FFT点数
fs=4*10^6;%基带采样频率4MHz
fsub=15.625*10^3;%子载波频率间隔15.625KHz
%% 训练符号
%短训练符号频域表示
F_Shortpreamble(1:256)=[0,0,0,0,-1-1j,0,0,0,1-1j,0,0,0,1+1j,0,0,0,-1-1j,0,0,0,-1+1j,0,0,0,1-1j,0,0,0,1+1j,0,0,0, -1+1j,0,0,0, 1-1j,0,0,0, -1-1j,0,0,0, 1+1j,0,0,0, -1+1j,0,0,0, -1-1j,0,0,0, 1+1j,0,0,0, 1-1j,0,0,0,-1-1j,0,0,0, 1-1j,0,0,0, 1+1j,0,0,0, -1-1j,0,0,0, -1+1j,0,0,0, -1+1j,0,0,0, -1-1j,0,0,0, 1-1j,0,0,0, -1+1j,0,0,0,1+1j,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,1+1j,0,0,0,1+1j,0,0,0,1+1j,0,0,0,1-1j,0,0,0,-1+1j,0,0,0,1+1j,0,0,0,1+1j,0,0,0,1+1j,0,0,0,1-1j,0,0,0,-1+1j,0,0,0,1+1j,0,0,0,1+1j,0,0,0,1+1j,0,0,0,1-1j,0,0,0,-1+1j,0,0,0,1-1j,0,0,0,1-1j,0,0,0,1-1j,0,0,0,-1-1j,0,0,0,1+1j,0,0,0,-1+1j,0,0,0,-1+1j,0,0,0,-1+1j,0,0,0,1+1j,0,0,0,-1-1j,0,0,0];
%短训练符号时域表示
T_Shortpreamble(1:256)=ifft(F_Shortpreamble);
%长训练符号频域表示
F_Longpreamble(1:256)=[ 0, -1-j, 1+j, -1+j, -1+j, -1-j, 1+j, 1+j, 1+j, -1-j, 1+j, 1-j, 1-j, 1-j, -1+j,-1+j,-1+j, -1+j, 1-j, -1-j, -1-j, -1+j, 1-j, 1+j, 1+j, -1+j, 1-j, 1-j, 1-j, -1+j, 1-j, -1-j, -1-j, -1-j, 1+j,1+j, 1+j,1+j, 1-j, -1+j, -1+j, 1+j, -1-j, 1-j, 1-j, 1+j, -1-j, -1-j, -1-j, 1+j, -1-j, -1+j, -1+j, -1+j, 1-j, 1-j, 1-j, 1-j, -1+j,1+j, 1+j, -1-j, 1+j, -1+j, -1+j, -1-j, 1+j, 1+j, 1+j, -1-j, 1+j, 1-j, 1-j, 1-j, -1+j, -1+j, -1+j, -1+j, 1-j, -1-j,-1-j, 1-j, -1+j, -1-j, -1-j, 1-j, -1+j, -1+j, -1+j, 1-j, -1+j,1+j, 1+j, 1+j, -1-j, -1-j, -1-j, -1-j, 1+j, 1-j, 1-j, 0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1-j,1-j, -1-j, 1+j, 1-j, 1-j, -1+j, 1-j, 1-j, 1-j, 1+j, -1-j, 1+j, 1+j, -1-j, 1+j, -1-j, -1-j, 1-j, -1+j, 1-j, 1-j, -1-j, 1+j,1-j, 1-j, -1+j, 1-j, 1-j, 1-j, 1+j, -1-j, 1+j, 1+j, -1-j, 1+j, -1-j, -1-j, 1-j, -1+j, 1-j, 1-j, -1-j, 1+j, 1-j, 1-j, -1+j,1-j, 1-j, 1-j, 1+j, -1-j, 1+j, 1+j, -1-j, 1+j, -1-j, -1-j, 1-j, -1+j, 1+j, 1+j, 1-j, -1+j, 1+j, 1+j, -1-j, 1+j, 1+j,1+j, -1+j, 1-j, -1+j, -1+j, 1-j, -1+j, 1-j, 1-j,1+j, -1-j, -1-j, -1-j, -1+j, 1-j, -1-j, -1-j, 1+j, -1-j, -1-j, -1-j, 1-j,-1+j, 1-j, 1-j, -1+j, 1-j, -1+j,-1+j, -1-j, 1+j];
%长训练符号频域表示
T_Longpreamble(1:256)=ifft(F_Longpreamble);
%% 卷积编码
%[133 171]卷积码其实是卷积码(2,1,7)的最佳编码形式
signal = randi([0 1],1,1920);%编码器输入48比特
trellis=poly2trellis(7,[133 171]);%内部参数前者是卷积码的约束长度N,后者是根据输入输出连线情况的一个m*n矩阵,m为输入信号的个数,n为输出信号的个数。
con_code=convenc(signal,trellis);
figure
 subplot(2,1,1)
 stairs(signal(1:50));
 ylabel('幅度');
 title('卷积编码前的数据');
 subplot(2,1,2)
 stairs(con_code(1:100));
 title('卷积编码后的数据');
 ylabel('幅度');
%% QPSK映射
bits_per_symbol=2;%每符号含比特数,QPSK调制
QPSK_code_bin=reshape(con_code,1920,bits_per_symbol);%1920是数据长度,进行矩阵变换,将1*3840的矩阵变换为1920*2的矩阵,前1920为第一列,后1920位第二列
QPSK_code_dec=2*QPSK_code_bin(:,1)+QPSK_code_bin(:,2);
txSig = pskmod(QPSK_code_dec,4,pi/4);
scatterplot(txSig)%星座图
%% 反傅里叶变换
temp=zeros(1,256);
temp([13 38 63 88 168 193 218 243])=1;%内插1
for m=1:10
    temp_data(m,2:12)=txSig((m-1)*192+1:(m-1)*192+11);
    temp_data(m,14:37)=txSig((m-1)*192+12:(m-1)*192+35);
    temp_data(m,39:62)=txSig((m-1)*192+36:(m-1)*192+59);
    temp_data(m,64:87)=txSig((m-1)*192+60:(m-1)*192+83);
    temp_data(m,89:100)=txSig((m-1)*192+84:(m-1)*192+95);
    temp_data(m,156:167)=txSig((m-1)*192+96:(m-1)*192+107);
    temp_data(m,169:192)=txSig((m-1)*192+108:(m-1)*192+131);
    temp_data(m,194:217)=txSig((m-1)*192+132:(m-1)*192+155);
    temp_data(m,219:242)=txSig((m-1)*192+156:(m-1)*192+179);
    temp_data(m,244:256)=txSig((m-1)*192+180:(m-1)*192+192);
    temp_data(m,:)=temp+temp_data(m,:);
    f_data(m,:)=ifft(temp_data(m,:))*16;
    figure
    plot(0:1/(255*4*10^6):1/(4*10^6),abs(f_data(m,:))');
    title('时域波形');
    xlabel('t/s');
    ylabel('幅度');
end
%% 加CP
data_cp=[f_data(:,193:end),f_data(:,:)];%数据加CP
Shortpreamble_cp=[T_Shortpreamble(:,193:end),T_Shortpreamble(:,:)];%短训练集加CP
Longpreamble_cp=[T_Longpreamble(:,193:end),T_Longpreamble(:,:)];%长训练集加CP
%% 并串变换
OFDM_frame=[Shortpreamble_cp.*32,Longpreamble_cp,reshape(data_cp.',[],1).'];
%% 上变频
 fc=4*4000000;  % 取载波fc为基带带宽的4%设采样频率为载波频率的四倍,则每个基带时隙内要输出16*320个符号;
 t=0:80*10^(-6)/(320*16):80*10^(-6)/320*length(OFDM_frame)-80*10^(-6)/(320*16);
 carrier=exp(j*(2*pi*(fc+25)*t));
 sam=kron(OFDM_frame,ones(1,16));
 frame_up=real(sam.*carrier);%上变频
 figure
 subplot(2,1,1)
 plot(t,abs(frame_up));
 xlabel('t/s');
 ylabel('幅度');
 title('上变频后的时域波形');
 subplot(2,1,2)
 plot(abs(OFDM_frame));
 title('OFDM帧时域波形');
 xlabel('t/s');
 ylabel('幅度');
for SNR=2:100
% SNR=6;
 %% 信道
rxSig = awgn(frame_up,SNR/2);%高斯白噪声信道
%rxSig=frame_up;
% figure 
% plot(rxSig,'r');
% hold on 
% plot(frame_up,'b')
%% 下变频
carrier_cos=cos(2*pi*fc*t);
carrier_sin=-sin(2*pi*fc*t);%两路解调信号
carrier_cos_reshape=reshape(carrier_cos,16,length(carrier_cos)/16);
carrier_sin_reshape=reshape(carrier_sin,16,length(carrier_sin)/16);

frame_up_reshape=reshape(rxSig,16,length(rxSig)/16);
rece_cos=frame_up_reshape'*carrier_cos_reshape/16*2;
rece_sin=frame_up_reshape'*carrier_sin_reshape/16*2;
for ii=1:length(OFDM_frame)
    rece_real(ii)=rece_cos(ii,ii);
    rece_im(ii)=rece_sin(ii,ii);
end
rece_down=rece_real+1i*rece_im;  %%下变频结束,得到基带复数信号
%% AGC自动增益控制
y=agc(rece_down,20,length(rece_down));
% figure
%  subplot(2,1,1)
%  plot(abs(rece_down));
%  ylabel('幅度');
%  title('下变频后的信号');
%  subplot(2,1,2)
%  plot(abs(y));
%  title('自动增益控制后的信号');
%  ylabel('幅度');
%% 帧检测
FrameStart=frame_detection(y,340);
frame=[y(FrameStart+1:end),zeros(1,256)];
%% 去CP与FFT去导频
for i=1:10
    data_rx(i,:)=frame(65+i*320:(i+1)*320);
%     data_rx(i,:)=y(65+(i+1)*320:(i+2)*320);
    data_r(i,:)=fft(data_rx(i,:))/sqrt(N_FFT);
    data(i,1:11)=data_r(i,2:12);
    data(i,12:35)=data_r(i,14:37);
    data(i,36:59)= data_r(i,39:62);
    data(i,60:83)=data_r(i,64:87);
    data(i,84:95)=data_r(i,89:100);
    data(i,96:107)=data_r(i,156:167);
    data(i,108:131)=data_r(i,169:192);
    data(i,132:155)=data_r(i,194:217);
    data(i,156:179)=data_r(i,219:242);
    data(i,180:192)=data_r(i,244:256);
end

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114
  • 115
  • 116
  • 117
  • 118
  • 119
  • 120
  • 121
  • 122
  • 123
  • 124
  • 125
  • 126
  • 127
  • 128
  • 129
  • 130
  • 131
  • 132
  • 133
  • 134

四、运行结果

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

五、matlab版本及参考文献

1 matlab版本
2014a

2 参考文献
[1] 沈再阳.精通MATLAB信号处理[M].清华大学出版社,2015.
[2]高宝建,彭进业,王琳,潘建寿.信号与系统——使用MATLAB分析与实现[M].清华大学出版社,2020.
[3]王文光,魏少明,任欣.信号处理与系统分析的MATLAB实现[M].电子工业出版社,2018.

文章来源: qq912100926.blog.csdn.net,作者:海神之光,版权归原作者所有,如需转载,请联系作者。

原文链接:qq912100926.blog.csdn.net/article/details/113837657

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。