欢迎来真孝善网,为您提供真孝善正能量书籍故事!

OFDM系统仿真全解析与MATLAB应用指南

时间:11-18 神话故事 提交错误

【嵌入式牛介绍】本文介绍了ofdm的基本原理和仿真程序

【嵌入式牛鼻】ofdm、matalb

【嵌入式牛问】ofdm仿真涉及哪些参数和技术?

【嵌入牛文】

由于是复制的,如果图片显示不完整,需要源程序,请点击下面的链接查看原文:

OFDM完整仿真流程及讲解(MATLAB) - Zimu的文章- 知乎https://zhuanlan.zhihu.com/p/57967971

后期更新不同步。单击上面的链接即可查看更新的部分。

目录:

1. 说明

2. ofdm概述

三、基本原则

4. 过程中涉及的技术

5、OFDM基本参数选择

6. OFDM的MATLAB仿真程序

1. 说明

0.能够找到这篇文章,说明你对ofdm已经有了一点了解,所以我就不详细介绍它的原理了。这段代码的目的只是为了了解ofdm的整个流程;

1、书上对ofdm的介绍挺简单,但是自己模拟的时候发现很多知识点都不懂;

2.花了很长时间才弄清楚整个ofdm流程。网上的程序都是一段一段的,无法直接看懂整个过程。于是我就想到自己模拟一下完整的过程来加深理解;

3、基带信号可以完成整个过程,但如果要加上频段传输部分就完整了;

4.对于通道部分,我想使用瑞利通道。程序已经写好了,但是误差和信道估计还不是很清楚,所以我先用高斯信道;

5.如有不足之处,欢迎指正。

2. 概述

OFDM是一种特殊的多载波传输方案。它可以看作是一种调制技术或多路复用技术。

简单来说:OFDM是一种多载波传输方式。它将频段划分为多个子信道来并行传输数据,将高速数据流划分为多个并行的低速数据流,然后将其调制到每个信道的子载波上。传播。由于它将非平坦衰落无线信道转换为多个正交平坦衰落子信道,因此可以消除信道波形之间的干扰,达到对抗多径衰落的目的。

正交频分复用(OFDM)是多载波调制(MCM)的改进。其特点是各个子载波相互正交,因此扩频调制后的频谱可以相互重叠,不仅减少了子载波之间的相互干扰,还大大提高了频谱利用率。

选择OFDM的一大原因是系统能够抵抗频率选择性衰落和窄带干扰。在单载波系统中,一次衰落或干扰就会导致整个链路失效,但在多载波系统中,某一时刻只有少数子信道会受到深度衰落的影响。

三、基本原则

3.1 OFDM系统收发器典型框图(可根据实际需要增加/删除部分)如下:

OFDM 收发器框图

上半部分对应于发射器链路,下半部分对应于接收器链路。

发送端将发送的数字信号转换为子载波幅度和相位的映射,并进行离散傅里叶变换(IDFT),将数据的频谱表达变为时域。 IFFT和IDFT变换具有相同的功能,但具有更高的计算效率,因此适用于所有应用系统。接收端进行与发送端相反的操作,利用FFT变换进行分解,最后将子载波的幅度和相位转换回数字信号。

这里可以理解,传输的是频域信号,因为IFFT是从频域到时域的。实际上,这里的IFFT起到了实现子载波正交的作用。具体来说,可以推导其DFT公式。在知乎里编辑公式太麻烦了。

3.2 OFDM调制与解调

OFDM符号包括多个调制子载波的复合信号,每个子载波可以接收psk(相移键控)和qam(正交幅度调制)调制。

OFDM发射机将信息比特流映射为psk或qam符号序列,然后将串行符号序列转换为并行符号流。每N个串并转换符号由不同的子载波调制。

一个OFDM 符号是N 个并行符号的复合信号。如果单个串行符号的传输时间(周期)为Ts,则一个OFDM符号的持续时间(周期)为Tsym=N*Ts。

频域调制信号X[k]的频率为:fk=k/Tsym,子载波数量为N,则k=0,1,2.N-1。 (源自DFT原理)

4. 过程中涉及的技术

为什么要使用它?如何使用?

4.1 保护间隔

多径信道会对OFDM符号造成ISI效应,破坏子载波之间的正交性。因此,需要采用一些方法来消除多径信道带来的符号间干扰(ISI)的影响,即插入保护间隔。

保护间隔的插入方式有两种:一种是零填充(zp),即用0填充保护间隔;另一种是插入循环前缀(cp)或循环后缀(cs)来实现OFDM的循环扩展(为了一定的连续性)。

ZP 在保护间隔内不插入任何信号。然而,这种情况下,由于多径传播的影响,会出现载波间干扰(ICI),即不同子载波之间会出现干扰。

一般采用cp。 cp将OFDM末尾的样本复制到前面,长度为Tcp,因此每个符号的长度为Tsym=Tsub+Tcp,Tsub为数据部分的子载波数量。 Tcp大于等于多径时延,符号间的ISI影响将被限制在保护间隔内,因此不会影响接下来的OFDM FFT变换。

4.2 交织

交织的作用是将突发错误转化为随机错误,有利于前向纠错码的译码,提高整个通信系统的可靠性。交织由两个转换过程组成。第一个变换确保相邻的编码比特被映射到非相邻的子载波。第二次变换保证相邻编码比特分别映射到星座图的重要和非重要比特,避免长期低比特映射。

对于qpsk、16qam 和64qam,交织块的长度Ncbps 分别为2、4 和6,s=Ncbps/2,d=16。

4.3 信道编码

由于移动通信中的干扰和衰落,信号传输过程中会出现错误。因此,数字信号必须采用纠错和检错技术,即纠错和检错编码技术,以增强数据在信道中传输时抵抗各种干扰的能力。提高系统可靠性的能力。

这里的信道编码一般采用卷积编码和维特比译码。

卷积编码是现代数字通信系统中常见的前向纠错码。它与传统的线性分组码不同。卷积编码的码字输出不仅与当前时刻输入的信息符号有关,还与先前输入的信息有关。相关符号。

4.4 扩频

“扩频通信技术是一种信息传输方式,其信号所占用的频带宽度远大于传输信息所需的最小带宽;频带的扩展是通过独立的码序列完成的,通过以下方式实现:与传输的信息数据无关;在接收端,使用相同的编码对传输的信息数据进行相关的同步接收、解扩和恢复。

根据香农定理,带宽和信噪比可以互换。扩频扩大了带宽,并且可以降低对信噪比的要求。

4.5 试点

飞行员不携带信息。导频是双方已知的数据,用于信道估计。

在接收机中,虽然可以利用接收到的分段训练序列和长训练序列进行信道均衡和频偏校正,但符号中仍然会存在一定的残余偏差,并且偏差会随着时间的推移而积累,这将导致所有的子载波产生一定的相位偏移。因此,参考相位也需要持续跟踪。为了实现该功能,需要将导频符号插入到52个非零子载波中。

4.6 RF(射频)调制

OFDM 调制器的输出生成基带信号,该信号与传输所需的频率混合。这可以使用模拟技术或数字上变频来实现。由于数字调制技术改善了处理I和Q通道之间的匹配以及数字IQ调制器的相位精度,因此将更加准确。

5、OFDM基本参数选择

5.1 各种OFDM 参数的选择需要在多个相互冲突的要求之间进行折衷。一般来说,首先要确定三个参数:带宽、比特率、保护间隔。

5.1.1 按照惯例,保护间隔的长度应为移动环境中信道时延扩展均方根值的2至4倍。

5.1.2 确定保护间隔后,就确定了OFDM符号周期的长度。为了最小化由于插入保护比特而造成的信噪比的损失,OFDM符号周期长度远长于保护间隔长度。然而,符号周期不能任意大,否则将需要更多的子载波。如果带宽不变,子载波间隔会变小,系统实现复杂度会增加,系统的峰均功率比也会增加。同时,系统对频率偏差更加敏感。因此,符号周期长度一般选择为保护间隔的5倍,这样插入保护比特带来的信噪比损失仅为1dB左右。

5.1.3 确定保护间隔和符号周期长度后,用-3dB带宽除以子载波间隔(即去除保护间隔后符号周期的倒数)即可得到子载波数量。或者,可以通过将所需比特率除以每个子信道的比特率来确定子载波的数量。每个信道中传输的比特率可以由调制类型、编码率和符号率来确定。

5.2 有用符号持续时间T

T影响子载波之间的间隔和解码的等待时间。为了维持数据吞吐量,子载波的数量和FFT的长度必须相对较大,这导致符号持续时间较长。总之,符号周期长度的选择是基于保证信道的稳定性。

5.3 子载波数量

N=1/T

其值对应于FFT处理的复点数,需要适应数据速率和保护间隔的要求。

5.4 调制方式

OFDM系统的调制方式是根据功率和频谱利用率来选择的,可以使用qam和psk。

为了使所有点具有相同的平均功率,需要对从二进制序列映射的复数进行归一化。 (BPSKQPSK16QAM64QAM分别对应乘以1、1/根2、1/根10、1/根42),然后解调时再改回来。

5.5 举例说明;

需要: (1) 比特率25Mbit/s (2) 可容忍延迟扩展至200ns (3) 带宽小于18MHz。

1)保护间隔从200ns延迟扩大到800ns;

2)从800ns的保护间隔算起,符号周期长度为6*800ns=4.8us;

3)子载波间隔选择为4.8-0.8=4us的倒数,即250KHz;

4)根据所需比特率与OFDM符号率的比值,每个符号需要传输的比特数为:(25Mbit/s)/(1/4.8us)=120bit。

5)为了完成上述120bit/symbol,有两种选择:使用16QAM和码率为1/2的编码方法,使得每个子载波承载2bit的有用信息,因此需要60个子载波;另一种是采用QPSK和A编码方式,码率为3/4,每个子载波承载1.5比特信息。因此,需要80个子载波。但80个子载波意外需要80*250KHz=20MHz的带宽,大于给定的带宽要求,所以选择第一种,60个子载波。可以使用64点IFFT来实现,其余4个子载波用0填充。

6. OFDM的MATLAB仿真主程序

clc;

清除;

%——————————————————————————————————————————————3—— ————————%

%q1: ifft点的数量不应该等于子载波的数量吗?子载波数和ifft点数有什么关系?

%a:ifft点数等于子载波数

%q2:fft 矩阵?

%a:y 可以是向量或矩阵。如果y 是向量,则Y 是y 的FFT,并且与y 具有相同的长度。如果y 是矩阵,则Y 对矩阵的每个列向量执行FFT。

%q3: 如何上变频ofdm 信号

%——————————————————————————————————————————————3—— ————————%

%%参数设置

N_sc=52; %系统子载波数(不包括DC载波),子载波数

N_fft=64; % FFT 长度

N_cp=16; % 循环前缀长度,循环前缀

N_symbo=N_fft+N_cp; % 1 个完整的OFDM 符号长度

N_c=53; % 包括DC载波在内的子载波总数,载波数量

M=4; %4PSK调制

信噪比=0:1:25; %模拟信噪比

N_frm=10; % 各信噪比下的模拟帧数和帧数

钕=6; % 每帧包含的OFDM 符号数

P_f_inter=6; % 试验间隔

数据站=[]; %飞行员位置

L=7; %卷积码约束长度

表伦=6*L; %维特比解码器回溯深度

阶段=3; %m 序列顺序

ptap1=[1 3]; %m 序列寄存器连接方法

regi1=[1 1 1]; %m 序列寄存器初始值

%%基带数据数据生成

P_data=randi([0 1],1,N_sc*Nd*N_frm);

%%信道编码(卷积码,或交织器)

%卷积码:前向纠错非线性码

%Interleaving:最大化分散突发错误

格子=poly2trellis(7,[133 171]); %(2,1,7)卷积编码

code_data=convenc(P_data,网格);

%%qpsk调制

data_temp1=reshape(code_data,log2(M),[])"; %每组按2位分组,M=4

data_temp2=bi2de(data_temp1); %将二进制转换为十进制

modu_data=pskmod(data_temp2,M,pi/M); % 4PSK调制

%图(1);

scatterplot(modu_data),grid;%星座图(也可以取实部,使用plot函数)

%%扩频

%——————————————————————————————————————————————3—— ————————%

%扩频通信信号所占用的频率带宽远大于传输信息所需的最小带宽

%根据香农定理,扩频通信采用宽带传输技术来换取信噪比上的好处。这就是扩频通信的基本思想和理论基础。

%扩频是一系列正交码字与基带调制信号的内积。

% 扩频后,数字频率变为原来的m倍。码片数量=2(符号数量)* m(扩频系数)

%——————————————————————————————————————————————3—— ————————%

代码=mseq(阶段,ptap1,regi1,N_sc);扩展码的生成百分比

代码=代码* 2 - 1; %将1和0转换为1和-1

modu_data=重塑(modu_data,N_sc,长度(modu_data)/N_sc);

spread_data=spread(modu_data,代码); % 扩频

spread_data=reshape(spread_data,[],1);

%%插入先导

P_f=3+3*1i; %导频

P_f_station=[1:P_f_inter:N_fft];%导频位置(导频位置很重要,为什么?)

Pilot_num=length(P_f_station);%飞行员数量

forimg=1:N_fft %数据位置

ifmod(img,P_f_inter)~=1 %mod(a,b) 是求a除以b的余数

数据站=[数据站,img];

结尾

结尾

数据行=长度(数据站);

data_col=ceil(长度(spread_data)/data_row);

Pilot_seq=ones(pilot_num,data_col)*P_f;%将pilot放入矩阵中

data=zeros(N_fft,data_col);%默认整个矩阵

data(P_f_station(1:end),)=pilot_seq;%按行获取pilot_seq

ifdata_row*data_collength(spread_data)

data2=[spread_data;zeros(data_row*data_col-length(spread_data),1)];%完成数据矩阵。填写0为虚拟载波频率~

结尾;

%%串并转换

data_seq=reshape(data2,data_row,data_col);

data(data_station(1:end),)=data_seq;%将导频与数据合并

%%IFFT

ifft_data=ifft(数据);

%%插入保护间隔和循环前缀

tx_cd=[ifft_data(N_fft-N_cp+1:end,);ifft_data];%将ifft末尾的N_cp号添加到前面

%%并行转串行转换

tx_data=reshape(Tx_cd,[],1);%由于传输需要

%%通道(通过多瑞利通道,或者信号通过AWGN通道)

Ber=zeros(1,长度(SNR));

Ber2=zeros(1,长度(SNR));

forjj=1:长度(SNR)

rx_channel=awgn(Tx_data,SNR(jj),"测量");%添加高斯白噪声

%%串并转换

Rx_data1=reshape(rx_channel,N_fft+N_cp,[]);

%%删除保护间隔和循环前缀

Rx_data2=Rx_data1(N_cp+1:end,);

%%快速傅里叶变换

fft_data=fft(Rx_data2);

%%通道估计和插值(均衡)

数据3=fft_data(1:N_fft,);

Rx_pilot=data3(P_f_station(1:end),); %收到试点

h=Rx_pilot./pilot_seq;

H=interp1( P_f_station(1:end)",h,data_station(1:end)","linear","extrap");%分段线性插值:插值点处的函数值由连接其最近两侧的线性函数确定点预测。使用指定的插值方法计算已知点集之外的插值点的函数值。

%%通道修正

data_aftereq=data3(data_station(1:end),)./H;

%%并行转串行转换

data_aftereq=reshape(data_aftereq,[],1);

data_aftereq=data_aftereq(1:length(spread_data));

data_aftereq=reshape(data_aftereq,N_sc,长度(data_aftereq)/N_sc);

%%反膨胀

demspread_data=解扩(data_aftereq,代码); % 数据解扩

%%QPSK解调

demodulation_data=pskdemod(demspread_data,M,pi/M);

De_data1=reshape(demodulation_data,[],1);

De_data2=de2bi(De_data1);

De_Bit=reshape(De_data2",1,[]);

%%(解交织)

%%通道解码(维特比解码)

格子=poly2trellis(7,[133 171]);

rx_c_de=vitdec(De_Bit,trellis,tblen,"trunc","hard"); %艰难的决定

%%计算误码率

[err,Ber2(jj)]=biterr(De_Bit(1:length(code_data)),code_data);%解码前误码率

[err,Ber(jj)]=bitrr(rx_c_de(1:length(P_data)),P_data);%解码后误码率

结尾

图(2);

符号学(SNR,Ber2,"b-s");

坚持,稍等;

符号学(SNR,Ber,"r-o");

坚持,稍等;

legend("4PSK调制和卷积码解码前(扩频)", "4PSK调制和卷积码解码后(扩频)");

坚持,稍等;

xlabel("信噪比");

ylabel("BER");

title("AWGN信道下误码率曲线");

图(3)

子图(2,1,1);

x=0:1:30;

茎(x,P_data(1:31));

ylabel("幅度");

title("发送数据(以前30条数据为例)");

legend("4PSK调制,卷积解码,扩频");

子图(2,1,2);

x=0:1:30;

茎(x,rx_c_de(1:31));

ylabel("幅度");

title("接收数据(以前30条数据为例)");

legend("4PSK调制,卷积解码,扩频");

7.如果你能看到这个,如果你能帮助我,emmmm,给我点个赞吧~

原来的:

整个过程

本来每一步都有解释和注释,但是程序编辑太多了,变得难看,所以就删掉了。比如扩频,它的原理、作用、以及如何实现~

三、代码及说明

1、尽量对程序的每一句进行注释,以便初学者拿到程序后能够理解;

2、下面的程序是上变频之前的,包括画图,给OFDM信号一个直观的感受(可能和上图的流程有冲突,这只是为了画图说明,所以这也是第一次学习和掌握容易混淆的地方)

清除;

%%参数设置

sub_carriers=2048;%子载波数量

T=1/子载波;

time=[0:T:1-T];%Nifft部分,各部分用T分隔

Lp=4984;

P_Tx=(rand(1,Lp)0.5);%(bits)%生成1个数据包,长度Lp :

conv_out=卷积_en(P_Tx);%(卷积编码):

interleave_table=interleav_matrix(ones(1,2*(Lp+8)));

interleav_out=interleaving(conv_out, interleave_table);%(交织器)

x=qpsk(interleav_out);%(4QAM调制)

L=length(x);%信号长度

s=48;

symbol_used_len=L/s;%将输入分为S个符号,每个符号为symbol_used_len long

%循环前缀的长度

cp=256;

%每个OFDM符号的采样值应填充‘0’的个数zeros_pad

Zeros_pad=sub_carriers-symbol_used_len;

%每个OFDM 符号一侧的‘0’数量应被填充zeros_pad_side

Zeros_pad_side=zeros_pad/2;

% 将输入信号分为s个符号,然后对每个符号进行FFT运算,实现OFDM解调并保证能量不变

time_domain_x_link=[];

对于I=0:(s-1)

% 分割输入

x_temp=x(I*symbol_used_len+1:I*symbol_used_len+symbol_used_len);

% 对每个分割部分进行补零,使其长度为sub_carriers

x_temp_pad=[zeros(1,zeros_pad_side),x_temp,zeros(1,zeros_pad_side)];

% 对每个符号进行IFFT运算

time_domain_x_temp=ifft(x_temp_pad)* sqrt(子载波);

%给每个符号添加循环前缀

time_domain_x_cp_temp=[time_domain_x_temp(sub_carriers-cp+1:sub_carriers),time_domain_x_temp];

%将符号连接成串行数据流

time_domain_x_link=[time_domain_x_link,time_domain_x_cp_temp];

结尾

sum_xI=real(time_domain_x_link);

sum_xQ=imag(time_domain_x_link);

数字;

num=1000;%画出前num个点 xaxis  = zeros(length(time(1:num))); plot(time(1:num), sum_xI(1:num),"b:", time(1:num), sum_xQ(1:num),"g:", time(1:num), abs(sum_xI(1:num)+j*sum_xQ(1:num)),"k-", time(1:num), xaxis,"r-"); ylabel("y"),xlabel("t"), title(["前", num2str(num),"个点经ifft的QAM符号实部之和虚部之和以及实部与虚部的绝对值波形"]), legend("实部之和","虚部之和","绝对值"); 3.与上面图片流程相符的代码 代码前面的问题也是我在这个过程中遇到的,困扰了好久,可以带着问题看看。欢迎讨论。 clc; clear; %————————————————————————————————————————————————————————% %q1:fft点数难道不是应该等于子载波数吗?子载波数与ifft点数的关系?

%q2:对矩阵进行fft? %q3:怎么对ofdm信号上变频 %q4:基带速率是多少?怎么实现? %q5传输频带是多少?怎么实现? %q6子载波间隔是多少?怎么实现? %q7符号周期是多少?怎么实现? %————————————————————————————————————————————————————————% %%参数设置 N_sc=52;      %系统子载波数(不包括直流载波)、number of subcarrier N_fft=64;            % FFT 长度 N_cp=16;            % 循环前缀长度、Cyclic prefix N_symbo=N_fft+N_cp;        % 1个完整OFDM符号长度 N_c=53;            % 包含直流载波的总的子载波数、number of carriers M=4;              %4PSK调制 SNR=0:1:25;        %仿真信噪比 N_frm=10;            % 每种信噪比下的仿真帧数、frame Nd=6;              % 每帧包含的OFDM符号数 P_f_inter=6;      %导频间隔 data_station=[];    %导频位置 L=7;                %卷积码约束长度 tblen=6*L;          %Viterbi译码器回溯深度 stage=3;          % m序列的阶数 ptap1=[1 3];      % m序列的寄存器连接方式 regi1=[1 1 1];    % m序列的寄存器初始值 %%基带数据数据产生 P_data=randi([0 1],1,N_sc*Nd*N_frm); %%信道编码(卷积码、或交织器) %卷积码:前向纠错非线性码 %交织:使突发错误最大限度的分散化 trellis=poly2trellis(7,[133 171]);      %(2,1,7)卷积编码 code_data=convenc(P_data,trellis); %%qpsk调制 data_temp1=reshape(code_data,log2(M),[])";            %以每组2比特进行分组,M=4 data_temp2=bi2de(data_temp1);                            %二进制转化为十进制 modu_data=pskmod(data_temp2,M,pi/M);              % 4PSK调制 %figure(1); scatterplot(modu_data),grid;%星座图(也可以取实部用plot函数) %%扩频 %————————————————————————————————————————————————————————% %扩频通信信号所占有的频带宽度远大于所传信息必需的最小带宽 %根据香农定理,扩频通信就是用宽带传输技术来换取信噪比上的好处,这就是扩频通信的基本思想和理论依据。 %扩频就是将一系列正交的码字与基带调制信号内积 %扩频后数字频率变成了原来的m倍。码片数量=2(符号数)* m(扩频系数) %————————————————————————————————————————————————————————% code=mseq(stage,ptap1,regi1,N_sc);    % 扩频码的生成 code=code * 2 - 1;        %将1、0变换为1、-1 modu_data=reshape(modu_data,N_sc,length(modu_data)/N_sc); spread_data=spread(modu_data,code);        % 扩频 spread_data=reshape(spread_data,[],1); %%插入导频 P_f=3+3*1i;                      %Pilot frequency P_f_station=[1:P_f_inter:N_fft];%导频位置(导频位置很重要,why?) pilot_num=length(P_f_station);%导频数量 forimg=1:N_fft                        %数据位置 ifmod(img,P_f_inter)~=1          %mod(a,b)就是求的是a除以b的余数 data_station=[data_station,img]; end end data_row=length(data_station); data_col=ceil(length(spread_data)/data_row); pilot_seq=ones(pilot_num,data_col)*P_f;%将导频放入矩阵 data=zeros(N_fft,data_col);%预设整个矩阵 data(P_f_station(1:end),:)=pilot_seq;%对pilot_seq按行取 ifdata_row*data_col>length(spread_data) data2=[spread_data;zeros(data_row*data_col-length(spread_data),1)];%将数据矩阵补齐,补0是虚载频~ end; %%串并转换 data_seq=reshape(data2,data_row,data_col); data(data_station(1:end),:)=data_seq;%将导频与数据合并 %%IFFT ifft_data=ifft(data); %%插入保护间隔、循环前缀 Tx_cd=[ifft_data(N_fft-N_cp+1:end,:);ifft_data];%把ifft的末尾N_cp个数补充到最前面 %%并串转换 Tx_data=reshape(Tx_cd,[],1);%由于传输需要 %%信道(通过多经瑞利信道、或信号经过AWGN信道) Ber=zeros(1,length(SNR)); Ber2=zeros(1,length(SNR)); forjj=1:length(SNR) rx_channel=awgn(Tx_data,SNR(jj),"measured");%添加高斯白噪声 %%串并转换 Rx_data1=reshape(rx_channel,N_fft+N_cp,[]); %%去掉保护间隔、循环前缀 Rx_data2=Rx_data1(N_cp+1:end,:); %%FFT fft_data=fft(Rx_data2); %%信道估计与插值(均衡) data3=fft_data(1:N_fft,:); Rx_pilot=data3(P_f_station(1:end),:); %接收到的导频 h=Rx_pilot./pilot_seq; H=interp1( P_f_station(1:end)",h,data_station(1:end)","linear","extrap");%分段线性插值:插值点处函数值由连接其最邻近的两侧点的线性函数预测。对超出已知点集的插值点用指定插值方法计算函数值 %%信道校正 data_aftereq=data3(data_station(1:end),:)./H; %%并串转换 data_aftereq=reshape(data_aftereq,[],1); data_aftereq=data_aftereq(1:length(spread_data)); data_aftereq=reshape(data_aftereq,N_sc,length(data_aftereq)/N_sc); %%解扩 demspread_data=despread(data_aftereq,code);      % 数据解扩 %%QPSK解调 demodulation_data=pskdemod(demspread_data,M,pi/M);    De_data1=reshape(demodulation_data,[],1); De_data2=de2bi(De_data1); De_Bit=reshape(De_data2",1,[]); %%(解交织) %%信道译码(维特比译码) trellis=poly2trellis(7,[133 171]); rx_c_de=vitdec(De_Bit,trellis,tblen,"trunc","hard");  %硬判决 %%计算误码率 [err,Ber2(jj)]=biterr(De_Bit(1:length(code_data)),code_data);%译码前的误码率 [err,Ber(jj)] = biterr(rx_c_de(1:length(P_data)),P_data);%译码后的误码率 end figure(2); semilogy(SNR,Ber2,"b-s"); holdon; semilogy(SNR,Ber,"r-o"); holdon; legend("4PSK调制、卷积码译码前(有扩频)","4PSK调制、卷积码译码后(有扩频)"); holdon; xlabel("SNR"); ylabel("BER"); title("AWGN信道下误比特率曲线"); figure(3) subplot(2,1,1); x=0:1:30; stem(x,P_data(1:31)); ylabel("amplitude"); title("发送数据(以前30个数据为例)"); legend("4PSK调制、卷积译码、有扩频"); subplot(2,1,2); x=0:1:30; stem(x,rx_c_de(1:31)); ylabel("amplitude"); title("接收数据(以前30个数据为例)"); legend("4PSK调制、卷积译码、有扩频");

用户评论

安好如初

看起来是个很全面的教程啊!想把OFDM学透。

    有10位网友表示赞同!

话扎心

终于找到一个完整的OFDM仿真教程了,要好好学习一下!

    有19位网友表示赞同!

苍白的笑〃

希望这个教程能带我深入理解OFDM是如何工作的。

    有5位网友表示赞同!

如梦初醒

用MATLAB仿真OFDM,是不是会很方便呢?

    有11位网友表示赞同!

暖栀

看了标题就感觉难度很大,但还是想试试看!

    有20位网友表示赞同!

最怕挣扎

学习通信技术一直是我的目标,OFDM很重要懂吗?

    有6位网友表示赞同!

半梦半醒i

这个教程能帮助我解开OFDM中的很多谜团吧!

    有17位网友表示赞同!

人心叵测i

MATLAB仿真果然是工程学里的利器啊。

    有15位网友表示赞同!

清原

期待看到详细的代码示例和讲解!

    有6位网友表示赞同!

↘▂_倥絔

看完教程后,希望能自己动手实现一个简单的OFDM系统。

    有18位网友表示赞同!

优雅的叶子

我想要了解更多关于OFDM应用的文章,这个教程能帮我吗?

    有14位网友表示赞同!

淡淡の清香

OFDM技术在无线通信领域的作用很大吧?需要加深理解!

    有11位网友表示赞同!

来自火星的我

学习完这个教程后,感觉自己的通信专业知识会提升不少!

    有19位网友表示赞同!

冷嘲热讽i

这个标题很吸引人,一定会认真读一下的!

    有12位网友表示赞同!

凉凉凉”凉但是人心

希望教程讲解清晰易懂,我能顺利跟着操作。

    有18位网友表示赞同!

我没有爱人i

OFDM仿真过程看起来很复杂,需要耐心学习!

    有6位网友表示赞同!

千城暮雪

期待看到一些有趣的仿真结果和分析!

    有17位网友表示赞同!

酒笙倾凉

这个教程应该很有价值,能帮到跟我学习OFDM的同学们。

    有8位网友表示赞同!

青瓷清茶倾城歌

感谢分享这么有帮助的教程!

    有10位网友表示赞同!

【OFDM系统仿真全解析与MATLAB应用指南】相关文章:

1.蛤蟆讨媳妇【哈尼族民间故事】

2.米颠拜石

3.王羲之临池学书

4.清代敢于创新的“浓墨宰相”——刘墉

5.“巧取豪夺”的由来--米芾逸事

6.荒唐洁癖 惜砚如身(米芾逸事)

7.拜石为兄--米芾逸事

8.郑板桥轶事十则

9.王献之被公主抢亲后的悲惨人生

10.史上真实张三丰:在棺材中竟神奇复活