ofdm解调算法_OFDM系统中固定频偏算法

加入固定频偏:
function berMatrix = freqOffsetOFDM(BPS,NS,M,SNR,ifftsize,carriers,N,ep)
%标准OFDM系统
input_bit_stream= sign(randn(1,BPS*NS));
input_bit_stream(input_bit_stream== -1)=0;
parallel_data = StoP(input_bit_stream ,M);% 串并转换
%QAM调制
modulated_data =qammod(parallel_data,M);
berMatrix = zeros(size(SNR));
for m=1:length( SNR) %信噪比变量
k = 1 ;
for n = 1 : NS%OFDM信号序数变量
ofdm_symbol = zeros(1 ,ifftsize);
ofdm_symbol(carriers) = modulated_data(k: k+N-1); %各子信道加载数据
%IFFT转换成时域信号
tx_signal = ifft(ofdm_symbol ,ifftsize);
%信道
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%加入频域频移
rx_signal = tx_signal.*exp((2*1i*pi*ep/ifftsize).*(0:ifftsize-1));
%加入噪声
rx_signal=awgn(rx_signal,SNR(m),'measured');
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
received_ofdm = fft(rx_signal, ifftsize); %FFT转换成各自通道数据
received_symbols(k:k+N-1) = received_ofdm(carriers); %去掉循环前缀
k = k +N ;
end %OFDM信号序数变量结束
%received_symbols:接收端FFT后得到的各子通道的复数据,
% 直接画得到星座图
% %figure
% subplot(1,4,ll)
% plot(received_symbols,'*');
% axis([-log2(M),log2(M),-log2(M),log2(M)]);
% title(['epsilon=' num2str(ep)] );
%接收端对M进制复数据解调,得到M进制码元
received_data =qamdemod(received_symbols,M);
output_bit_stream = PtoS(received_data, M);%M进制转换为二进制码元
berMatrix(m)= sum(xor(input_bit_stream, output_bit_stream))/length(input_bit_stream);%计算误码率
end %信噪比变量结束对加频偏信号进行ICI自消除:
function berMatrix = freqOffsetOFDMICI(BPS,NS,M,SNR,ifftsize,carriers,N,ep)
%ICI自消除法
% Input Bit Stream is normally Distributed
input_bit_stream= sign(randn(1,BPS*NS));
input_bit_stream(input_bit_stream== -1)=0;
parallel_data = StoP(input_bit_stream ,M);
modulated_data =qammod(parallel_data,M);%QAM调制
%奇偶载波序列定义
odd_carriers = carriers(1:2: N-1);
even_carriers = carriers(2:2: N);
berMatrix = zeros(size(SNR));
for m=1:length(SNR) %信噪比变量
k = 1;
for n = 1:NS %OFDM信号序数变量
ofdm_symbol1 = zeros(1,ifftsize);
ofdm_symbol2 = zeros(1,ifftsize);
ofdm_symbol1(odd_carriers) = modulated_data(k: k+N/2-1);
ofdm_symbol1(even_carriers) = -modulated_data(k: k+N/2-1); %奇通道数据取反
ofdm_symbol2(odd_carriers) = modulated_data(k+N/2: k+N-1);
ofdm_symbol2(even_carriers) = -modulated_data(k+N/2:k+N-1); %奇通道数据取反
%发送端时域信号
tx_signal1 = (ifft(ofdm_symbol1,ifftsize));
tx_signal2 = (ifft(ofdm_symbol2,ifftsize));
%信道
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%加入频移
rx_signal1 = tx_signal1.*exp(1i*pi*ep/ifftsize*(0:ifftsize-1));
rx_signal2 = tx_signal2.*exp(1i*pi*ep/ifftsize*(0:ifftsize-1));
%加入噪声
rx_signal1 = awgn(rx_signal1, SNR(m),'measured');
rx_signal2 = awgn(rx_signal2, SNR(m),'measured');
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 接收端FFT
received_ofdm1 = fft(rx_signal1, ifftsize);
received_ofdm2 = fft(rx_signal2, ifftsize);
demod_sym1 = .5*(received_ofdm1(odd_carriers)-received_ofdm1(even_carriers));%前半个OFDM信号
demod_sym2 = .5*(received_ofdm2(odd_carriers)-received_ofdm2(even_carriers));%后半个OFDM信号
received_ofdm3 = [demod_sym1 demod_sym2];
received_symbols(k:k+N-1) = received_ofdm3;
k = k + N;
end %OFDM信号序数变量结束
received_data =qamdemod(received_symbols,M);%接收端对M进制复数据解调,得到M进制码元
output_bit_stream = PtoS(received_data, M);%M进制转换为二进制码元
berMatrix(m)= sum(xor(input_bit_stream, output_bit_stream))/length(input_bit_stream); %计算误码率
end %信噪比变量结束极大似然估计法和改进算法
function berMatrix = freqOffsetOFDMMSL(BPS,NS,M,SNR,ifftsize,carriers,N,ep,N_awgn)
%极大似然估计法和改进算法
input_bit_stream= sign(randn(1,BPS*NS));
input_bit_stream(input_bit_stream== -1)=0;
parallel_data = StoP(input_bit_stream ,M);% 串并转换
modulated_data =qammod(parallel_data,M);%QAM调制
berMatrix = zeros(size(SNR));
for m=1:length(SNR) %信噪比变量
%计算ep-SNR对应的频偏
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
ofdm_symbol = zeros(1,ifftsize);
ofdm_symbol(carriers(1:N/2)) = modulated_data(1:N/2); %Use only half the data for MLE
tx_signal1 = ifft(ofdm_symbol,ifftsize/2); %对前一半通道的数据进行ifft_size/2的IFFT
tx_signal = [tx_signal1,tx_signal1]; %复制前一半OFDM信号,形成一个完整的发送信号
%信道
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%加入频移
rx_signal = tx_signal.*exp((2*1i*pi*ep/ifftsize).*(0:ifftsize-1));
%加入噪声
%极大似然估计法:N_awgn=1;
%修正算法:N_awgn>1;
noise=0;
for n_awgn=1:N_awgn
%加入高斯白噪声
noise=noise+awgn(rx_signal,SNR(m),'measured');
end
noise=noise/N_awgn;
rx_signal = rx_signal + noise;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%接收端对前后两时域序列分别进行FFT
received_ofdm1 = fft(rx_signal(1:ifftsize/2), ifftsize/2);
received_ofdm2 = fft(rx_signal((ifftsize/2)+1:ifftsize), ifftsize/2);
%对频偏进行极大似然估计
temp=0;temp1=0;
for w=1:length(ifftsize/2)
temp=temp + imag(received_ofdm2(w)*conj(received_ofdm1(w)));
temp1=temp1 + real(received_ofdm2(w)*conj(received_ofdm1(w)));
end
epestMLE(m) = (atan(temp/temp1))/(pi);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%完成ep-SNR对应的频偏估计
%以后接收到的OFDM信号直接用估计值校正
k = 1;
for n = 1:NS %OFDM信号序数变量
ofdm_symbol = zeros(1,ifftsize);
ofdm_symbol(carriers(1:N)) = modulated_data(k:k+N-1); %各子信道加载数据
tx_signal = ifft(ofdm_symbol,ifftsize);%IFFT转换成时域信号
%信道
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
rx_signal = tx_signal.*exp((2*1i*pi*ep/ifftsize).*(0:ifftsize-1));%加入频域频移
rx_signal=awgn(rx_signal,SNR(m),'measured');%加入噪声
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%利用第一次估计出的频偏进行校正
received_ofdm = rx_signal.* exp((-2*1i*pi*epestMLE(m)/ifftsize)*(0:ifftsize-1));
car_data= fft(received_ofdm,ifftsize); %FFT转换成各自通道数据
received_symbols(k:k+N-1)=car_data(carriers(1:N)); %去掉循环前缀
k = k + N;
end %OFDM信号序数变量结束
received_data =qamdemod(received_symbols,M);%接收端对M进制复数据解调,得到M进制码元
output_bit_stream = PtoS(received_data, M); %M进制转换为二进制码元
berMatrix(m)= sum(xor(input_bit_stream, output_bit_stream))/length(input_bit_stream); %计算误码率
end %信噪比变量结束M进制转换为二进制码元:
function y=PtoS(received_data, M)
%M进制转换为二进制码元
M=log2(M);
[m,n]=size(received_data);
y=zeros(1,M*n);
for k1=1: n
for k2=1: M
if(received_data(k1)>=2^(M-k2))
y(M*(k1-1)+k2)=1;
received_data(k1)=received_data(k1)-2^(M-k2);
else
y(M*(k1-1)+k2)=0;
end
end
end串并转换:
function y=StoP(input_bit_stream ,M)
% 串并转换
M=log2(M);
n=length(input_bit_stream);
y=zeros(1,n/M);
for k1=1: n/M
y(k1)=0;
for k2=1: M
y(k1)=y(k1)+input_bit_stream((k1-1)*M+k2)*2^(M-k2);
end
end调用函数的脚本程序如下:
clear
close all
clc
SNR=0:2:25; % 信噪比
NS = 1600; % NS:待传送OFDM信号总个数
M = 8;% M:调制进制
N = 60; % 子通道个数
BPS = N*log2(M); % 一个OFDM信号携带的比特数
carriers = (1:N ); % 子通道序数
ifftsize = 128; %FFT长度
%未加频偏,未采用消除方法时
ep = 0 ;%归一化频偏
berMatrix_NOEP_Non = freqOffsetOFDM(BPS,NS,M,SNR,ifftsize,carriers,N,ep);
%加频偏,未采用消除方法时
ep = 0.05;%归一化频偏
berMatrix_EP_Non = freqOffsetOFDM(BPS,NS,M,SNR,ifftsize,carriers,N,ep);
berMatrix_EP_ICI = freqOffsetOFDMICI(BPS,NS,M,SNR,ifftsize,carriers,N,ep);
N_awgn = 1;
berMatrix_EP_SL = freqOffsetOFDMMSL(BPS,NS,M,SNR,ifftsize,carriers,N,ep,N_awgn);
N_awgn = 10;
berMatrix_EP_MSL = freqOffsetOFDMMSL(BPS,NS,M,SNR,ifftsize,carriers,N,ep,N_awgn);
% 固定频偏下,不同算法 误码率-信噪比曲线
figure
plot(SNR, berMatrix_NOEP_Non,'-k' )
hold on
plot(SNR, berMatrix_EP_Non ,'.-r')
plot(SNR, berMatrix_EP_ICI ,'--g')
plot(SNR, berMatrix_EP_SL ,'-m')
plot(SNR, berMatrix_EP_MSL ,'-c')
set(gca,'YScale','log')
legend('未加频偏','无频偏估计','加频偏估计','SL','MSL');
grid on
xlabel( 'SNR(dB)')
ylabel('BER')


误码率-信噪比曲线

bc52e10d4ca1206edd85eb6006d83043.png

人工智能算法 信号处理 数值计算 通信系统 项目合作可私信

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/304287.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

重磅!阿里开源AI核心技术,95%算法工程师受用

你是否曾有过这样的疑虑:人工智能大热,作为一名传统程序员,该如何转型或学习?网上AI教程、书籍,质量参差不齐,如何找到真正专业的资源?AI理论遍地皆是,但几乎都在纸上谈兵。我们该从…

android 换机 iphone8,最好的换机之选?iPhone8 PLUS众测体验

最好的换机之选?iPhone8 PLUS众测体验2017-11-11 14:29:0034点赞1收藏0评论文章前面说一下,自己水平有限文笔不好,没有相机,开箱图这些都是手头的iPhone6和本次众测的的产品拍摄,再加上最近白天都没空拍照,…

阿里开始招聘.NET,要求WPF!

说到WPF、上位机,很多.NET开发者可能只是听过并不了解,然而随着工业4.0的火爆大势,当下.NET开发者又多了一个高薪选型,在各大招聘网站上都能找到5年经验25k左右的岗位,强烈推荐大家关注一波。这里借用了下阿里影业对.N…

eeprom stm8l 擦除 读写_[STM8L]EEPROM操作读与写

原标题:[STM8L]EEPROM操作读与写带有片上EEPROM,常用来保存参数,事实上STM8L整个程序存储区都可以用于作为EEPROM,只是默认情况下被闭了。不同型号的STM8L器件其内部默认划分的EEPROM区域都是从0x1000地址开始,以下为S…

JavaWeb中的Session、SessionListener、在线人数统计

2019独角兽企业重金招聘Python工程师标准>>> JavaWeb中的Session 在JavaWeb中使用HttpSession(以下简称session)对象来表示一个会话。正在装载数据…… Session的创建(代表会话周期的开始):第一次调用reque…

全球100款大数据工具汇总(51~100款)

上篇(戳标题即可跳转):全球100款大数据工具汇总(前50款)51、Redis是一个高性能的key-value存储系统,和Memcached类似,它支持存储的value类型相对更多,包括string(字符串&…

Android手机投屏后没有声音,乐播投屏电视没有声音怎么办_乐播投屏电视没有声音手机有声音解决办法_3DM手游...

乐播投屏是一个非常不错的投屏软件,操作使用简单,最近不少小伙伴都在用。但是在使用乐播投屏的时候,有很多小伙伴出现了电视没有声音手机有声音的情况,这是怎么回事呢?我们一起来看看乐播投屏电视没有声音的解决办法吧…

如何容器化你的 ASP.Net Core

Docker 相比 虚拟机 具有更轻量级,更便捷的特性,为什么这么说呢?虚拟机通常打包了完整的操作系统,而容器只仅仅打包了你的应用程序,运行环境及相关依赖库,Docker 是一种开源的工具包,帮助你更加…

tableau三轴合并_《Tableau数据可视化实战》——1.12节合并不同数据源-阿里云开发者社区...

本节书摘来自华章社区《Tableau数据可视化实战》一书中的第1章,第1.12节合并不同数据源,作者(美)Ashutosh Nandeshwar,更多章节内容可以访问云栖社区“华章社区”公众号查看1.12 合并不同数据源通常,我们的数据以不同格式或者不同…

android ble status,Android BLE peripheral disconnects with status code BLE_HCI_INSTANT_PASSED(0x28)

问题My application is able to connect to the BLE peripheral(which is an OBDII/J1939 device) device successfully.2018-01-24 14:58:38,413 INFO LogUtil - GATT Server Status (0) : BLE_HCI_STATUS_CODE_SUCCESS(0x00)2018-01-24 14:58:38,414 INFO LogUtil - GATT Se…

2018年大数据趋势

作者 | Keith D. Foote翻译 | 品觉笔记本电脑、智能手机、传感器,都为物联网带来了大量数据。这是获得竞争优势(或者保持竞争力)的重大机遇,前提是企业足够灵活,可以管理好数据并把数据变成有用的商业智能。人脑能高效…

关于商品分类 商品表和属性表的设计

以前有这样的一个需求,不考虑像京东或者淘宝这样分类下有子分类的情况,只考虑一层分类的情况下,可以随便添加分类,可以任意给商品添加属性,而不需要更 改表的结构. 于是设计了一个这样的结构,实现还是可以实现,一直在用,但是在操作上比较麻烦,大家讨论下有没有更好的方式. ----…

Redis五种数据结构

1、String这是最简单的Redis类型。如果只使用这种类型,Redis就像一个可持久化的Memcached服务器。2、ListRedis的List是基于双向链表实现的,可以支持反向查找和遍历。常用案例:聊天系统、社交网络中获取用户最新发表的帖子、简单的消息队列、…

es创建索引数量多了好还是少了好_Elasticsearch性能优化总结

Elasticsearch是目前大数据领域最热门的技术栈之一,经过近8年的发展,已从0.0.X版升级至6.X版本,虽然增加了很多的特性和功能,但是在主体架构上,还是没有太多的变化。下面就把我对于ES使用实践的一些经验总结一下,供大家参考;也请大家拍砖。 一、 硬件环境选择: 如果有条…

C# NUnit的安装

前言:NUnit是什么?NUnit 是一个单元测试框架,专门针对于.NET来写的。NUnit是xUnit家族种的第4个主打产品,完全由C#语言来编写,并且编写时充分利用了许多.NET的特性,比如反射,客户属性等等。最重要的一点是它适合于所有…

shiro单点登录原理_SSO单点登录三种情况的实现方式详解

单点登录(SSO——Single Sign On)对于我们来说已经不陌生了。对于大型系统来说使用单点登录可以减少用户很多的麻烦。就拿百度来说吧,百度下面有很多的子系统——百度经验、百度知道、百度文库等等,如果我们使用这些系统的时候,每一个系统都需…

[转]解决Windows 7下Windows Live Messenger(MSN) 9.0在一直停靠任务栏而不在系统栏显示的问题...

解决Windows 7下Windows Live Messenger(MSN) 9.0在一直停靠任务栏而不在系统栏显示的问题 用上Windows 7后,MSN一直停靠任务栏而不在系统栏显示,关闭窗口就会退出MSN,解决方法很简单。 1、退出MSN 2、点击“开始”菜单->Windows Live->…

中国癌症大数据出来了!每年126万例癌症死亡本可避免

01 中国本土大样本数据:癌症真的可预防!2017年,由全国肿瘤登记中心副主任陈万青教授、美国癌症协会Farhad Islami教授牵头的生活方式和感染对中国癌症发病和死亡影响的研究,发表在Annals of Oncology上[1,2]。该研究由美国癌症研究…

NPOI 在指定单元格导入导出图片

NPOI 在指定单元格导入导出图片Intro我维护了一个 NPOI 的扩展(WeihanLi.Npoi),主要用来导入导出 Excel 数据,最近有网友提出了导入 Excel 的时候解析图片的需求,于是就有了本文的探索导入Excel 时解析图片xls 和 xlsx 的 API 稍有不同&#…

android 设置folder类型,正确配置你的 Android 项目

简评:优秀的 Android 项目从配置开始。: )作者在这里介绍了一个 Android 项目应该有的配置,文中讲到的内容大家都可以运用在自己的 Android 模板项目中。gitignore当你新建 Android 项目时,默认会生成 gitignore 文件,但并没有包含…