无线通信——基于MATLAB实现OFDM系统(信道估计与均衡)

无线通信——基于MATLAB实现OFDM系统(信道估计与均衡)基于 MATLAB 实现 OFDM 系统基带信号在频率选择性衰落信道条件下的发送与接收题目及要求 仿真系统构成 信号输入 为随机比特流 OFDM 调制 仿真信道传输 OFDM 解调 信号输出 可能存在误码的比特率 仿真分析内容 根据输入 输出比特流计算不同信噪比条件下的误码率 并绘制曲线 对调制的要求 OFDM 调制的子载波间隔为 15KHz 循环前缀长度及子载波数目可调 各子载波使用 QPSK 调制 其它要求 信道采用 3GPPTS36 101 给出的 ETU300Hz 多径信道 并在其上叠加一个信噪比可调的白噪

基于MATLAB实现OFDM系统基带信号在频率选择性衰落信道条件下的发送与接收

题目及要求:

仿真系统构成:信号输入(为随机比特流)、OFDM调制、仿真信道传输、OFDM解调、信号输出(可能存在误码的比特率);
仿真分析内容:根据输入、输出比特流计算不同信噪比条件下的误码率,并绘制曲线。
对调制的要求:OFDM调制的子载波间隔为15KHz,循环前缀长度及子载波数目可调,各子载波使用QPSK调制。
其它要求






  1. 信道采用3GPP TS36.101给出的ETU300Hz多径信道,并在其上叠加一个信噪比可调的白噪声。表2.1-1~表2.1-4和表2.2-1给出的ETU300Hz多径信道的参数。
  2. 设计梳妆或者块状导频并在接收端完成信道估计与补偿,并与没有信道估计情况下的性能进行分析比较。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述






正文

1. OFDM系统的组成

2. 仿真过程

3. 仿真程序

整体代码如下所示:

% ================================================== % 作者: Allen % 时间:4/27 2020 % =================OFDM仿真参数说明:================ % f_delta=15e3; ---子载波间隔 % 子载波数 carrier_count ---128 也就是FFT点数,通常为2的次幂 % 子载波间隔 f_delta ---15e3 % 总符号数 symbol_count ---1000 % IFFT长度 ifft_length ---128 % 循环前缀 cp_length ---16 % 调制方式 ---QPSK % 信道估计算法 ce_method ---1:采用最小二乘法LS;0:采用mse算法 % 插入导频间隔 pilot_interval ---5 % 每星座符号比特数 M ---2 % 信道模型选择参数 awgn_en ---0:表示ETU信道;1:AWGN信道 % 最大多普勒扩展 fd ---300;通常可配置0-300hz之间的数据 % 仿真统计次数 sta_num ---10 % 信噪比大小SNR ---可设置 % ====================仿真过程======================= % 产生0-1随机序列 => 串并转换 => 映射 => 取共轭 % => IFFT => 加循环前缀和后缀 => 并串转换 => % 多径信道即ETU信道 => 加AWGN => 串并转换 => 去前缀 % => FFT =>解映射 => 求误码率 % ================================================== clear all; close all; carrier_count = 128; % 子载波数 f_delta=15e3; %子载波间隔 symbol_count = 1000; %一次发送的总符号数 ifft_length = carrier_count; %ifft点数为子载波数目 cp_length = 16; %循环前缀 ce_method=1 %信道估计算法参数1:采用最小二乘法LS;0:采用mse算法 pilot_interval=5; %导频间隔 awgn_en=0; %信道选择参数 0:表示ETU信道;1:AWGN信道 M=2; %每星座符号比特数 fd=300; %最大多普勒扩展 sta_num=20; % 仿真统计次数 num_bit=carrier_count*symbol_count*M; %对应比特数据个数,即128*1000*2 pilot_bit_l=randi([0 1],1,M*carrier_count);%生成导频序列,长度为M*carrier_count OFDM_SNR_BER=zeros(1,31); %存储直接解调OFDM误码率 OFDM_LS_SNR_BER=zeros(1,31); %存储基于信道估计后OFDM误码率 i=1; % ================多径信道参数======================= fs=(carrier_count)*f_delta; %信道带宽,为子载波间隔乘以子载波个数 ts=1/fs; %每个bit符号持续的时间 tau=[0,50,120,200,230,500,1600,2300,5000]/(10^9); pdb=[-1.0,-1.0,-1.0,0,0,0,-3.0,-5.0,-7.0]; chan=rayleighchan(ts,fd,tau,pdb); chan.ResetBeforefiltering=0; % ================产生随机序列======================= OFDM_sigbits =sourcebits(num_bit) ; % 1*,发送的OFDM数据 [moddata_outI,moddata_outQ]=qpsk_modulation(OFDM_sigbits); %进行映射 OFDMmoddata_in_temp=moddata_outI+1i*moddata_outQ; OFDMmoddata_in=reshape(OFDMmoddata_in_temp,carrier_count,length(OFDMmoddata_in_temp)/carrier_count); %串并变换 % ================加导频======================== [Insertpilot_out,count,pilot_seq]=insert_pilot_f(OFDMmoddata_in,pilot_bit_l,pilot_interval); %加入导频后的矩阵为Insertpilot_out,大小为128*1200 % ===================IFFT=========================== OFDMmoddata_out=ifft(Insertpilot_out,ifft_length)*sqrt(ifft_length); % ==================加循环前缀================== InsertCPdata_out=Insert_CP(OFDMmoddata_out,cp_length); % =================并串转换========================== [m,n] = size(InsertCPdata_out) Channel_data=reshape(InsertCPdata_out,1,m*n); % ===================发送信号,多径信道==================== for SNR=0:1:30 be1=0; be2=0; frm_cnt=0; while(frm_cnt<sta_num) frm_cnt=frm_cnt+1; %经过多径信道 if(awgn_en==1) Add_Multipath_data=Channel_data; %awgn信道 elseif(fd~=0) Add_Multipath_data=filter(chan,Channel_data); %ETU信道 end Add_noise_data=awgn(Add_Multipath_data,SNR,'measured'); %添加高斯白噪声 % =======================串并变换=========================== Add_noise_data_temp=reshape(Add_noise_data,m,n); % =======================去循环前缀========================== DeleteCPdata_out=Delete_CP(Add_noise_data_temp,cp_length); % =======================取出导频H========================== [Deletepilot_Data,H]=Get_pilot(DeleteCPdata_out,pilot_interval); % =========================FFT============================== OFDM_Demodulationdata_out_iter1=fft(Deletepilot_Data,ifft_length)/sqrt(ifft_length); % ===============无信道估计下并串转换以及逆映射=============== OFDMdemodulationdata_out_1=reshape(OFDM_Demodulationdata_out_iter1,1,num_bit/2); [demodulationdata_outI_1,demodulationdata_outQ_1]=qpsk_demodulation(OFDMdemodulationdata_out_1);%星座的逆映射 P2Sdata_out_1=P2SConverter(demodulationdata_outI_1,demodulationdata_outQ_1); % =====================有信道估计下========================== estimation_output=Channel_estimation(ce_method,Deletepilot_Data,pilot_seq,H); OFDMdemodulationdata_out_2=reshape(estimation_output,1,num_bit/2); [demodulationdata_outI_2,demodulationdata_outQ_2]=qpsk_demodulation(OFDMdemodulationdata_out_2);%星座的逆映射 P2Sdata_out_2=P2SConverter(demodulationdata_outI_2,demodulationdata_outQ_2); % =========================误比特率========================== be1=be1+length(find(P2Sdata_out_1~=OFDM_sigbits)); be2=be2+length(find(P2Sdata_out_2~=OFDM_sigbits)); ber1=be1/(frm_cnt*num_bit); ber2=be2/(frm_cnt*num_bit); if(mod(frm_cnt,20)==0) fprintf('SNR=%.1f,frm_cnt=%d,ber_de=%.8f,ber_ls=%.8f\n',SNR,frm_cnt,ber1,ber2); end end % fprintf('SNR=%.1f,frm_cnt=%d,ber_de=%.8f,ber_ls=%.8f\n',SNR,frm_cnt,ber1,ber2); % =========================误码率========================== OFDM_SNR_BER(i)=ber1; OFDM_LS_SNR_BER(i)=ber2; i=i+1; end 

4.仿真结果

5.仿真结果分析以及结论

6.写在最后

代码为整体架构,其中里面的一些具体的子函数以及OFDM的原理比如保护间隔以及插入循环前缀的原因等等已上传。链接地址:代码仿真

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/223678.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月17日 下午1:39
下一篇 2026年3月17日 下午1:39


相关推荐

  • 100天精通Oracle-实战系列(第8天)保姆级 PL/SQL Developer 安装与配置「建议收藏」

    100天精通Oracle-实战系列(第8天)保姆级 PL/SQL Developer 安装与配置「建议收藏」100天精通Oracle-实战系列(第8天)PL/SQLDeveloper安装与配置

    2022年10月12日
    3
  • html一个汉字空格占位_空格占位符复制

    html一个汉字空格占位_空格占位符复制空格占位符Html

    2026年4月14日
    11
  • 杭州的旅游景点与民间传说故事「建议收藏」

    杭州的旅游景点与民间传说故事「建议收藏」 杭州的旅游景点与民间传说故事虎跑梦泉虎跑泉是一处以“泉”为主题的观泉、听泉、品泉、试泉的泉源景观,又是以性空、济公、弘一法师传奇故事为特色的人文景观,坐落位于西湖之南的大慈山定慧禅寺内。民间传说唐代性空大师游历此山,这里风景优美,只是无水源,决定去别处,忽然有神人告诉他即将有二只老虎会来挖泉,翌日,果然有二虎跑山出泉,甘冽醇厚,纯净无菌,从此“龙井茶叶虎跑泉”被称为“西湖双绝”。

    2022年5月31日
    37
  • Vue进阶(四十三):Vuex之Mutations详解

    Vue进阶(四十三):Vuex之Mutations详解通俗的理解 mutations 里面装着一些改变数据方法的集合 这是 Veux 设计很重要的一点 就是把处理数据逻辑方法全部放在 mutations 里面 使得数据和视图分离 2 怎么用 mutations mutation 结构 每一个 mutation 都有一个字符串类型的事件类型 type 和回调函数 handler 也可以理解为 type handler 这和订阅发布有点类似 先注册事件 当触发

    2026年3月19日
    1
  • materialize软件下载_钢琴零基础入门教程

    materialize软件下载_钢琴零基础入门教程https://materializecss.com/https://github.com/Dogfalo/materializehttp://www.materializecss.cn/1,下

    2022年8月4日
    11
  • javaweb项目部署到tomcat_idea创建tomcat项目

    javaweb项目部署到tomcat_idea创建tomcat项目提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录一、创建JavaWeb项目二、使用步骤三、修改默认加载界面提示:以下是本篇文章正文内容,下面案例可供参考一、创建JavaWeb项目新建一个简单的Javaweb项目,具体如下图所示tomca没有配置的话,ApplicationServer是没有默认tomcat的。这时候需要自己引入,点击输入框右边文件夹图标,找到tomcat所在文件夹位置即可(没有先下载tomcat)。完成直接Next,配置项目保存的路径后就完成了.

    2026年1月28日
    5

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号