matlab实现ofdm调制解调,基于ofdm的调制解调原理,ofdm调制解调fpga代码 - 全文

OFDM介绍

OFDM ( Orthogona lFrequency D iv isionM ulTIplex ing) 即正交频分复用技术, 实际上 OFDM 是 MCM M ult-iC arrierM odu la TIon, 多载波调制的一种。其主要思想是: 将信道分成若干正交 子信道, 将高速数据信号转换成并行的低速子数据流, 调制到在每个子信道上进行传输。正 交信号可以通过在接收端采用相关技术来分开, 这样可以减少子信道之间的相互干扰 IC I。

OFDM设计优点: 一是无需线性均衡, 从而避免了噪声的增强, 而且由于它的符号间隔 很长, 对多径效应、脉冲噪声和快速衰落有较强的抵抗能力; 二是由于子载波是相互正交 的, 所以频谱可以交叠使用, 频谱利用率比普通的多载波系统要高得多。为了防止各子信道 之间的串扰, OFDM 要求子载波相互正交。利用这种正交性, 接收机能正确分离开各个子数 据流。为了保证子载波之间的正交性, OFDM 要求各子载波在时间、频率上均保持同步, 而 且要求相邻子载波的频率间隔为 OFDM 的有效符号时间间隔 T的倒数。

OFDM调制解调基本原理

OFDM是一种无线环境下的高速传输技术。无线信道的频率响应曲线大多是非平坦的,而根据OFDM技术的特点,尽管总的信道是非平坦的,具有频率选择性,但每个子信道是相对平坦的,在每个子信上进行的是窄带传输,信号带宽小于信道的相应带宽,因此就可较好地消除信号波形间的干扰。由于在OFDM系统中各子信道的载波相互正交,它们的频谱是相互重叠的,这样不仅减小了子载波间的相互干扰,同时还提高了频谱利用率。

OFDM增强了抗频率选择性衰落和抗窄带干扰的能力。在单载波系统中,单个衰落或者干扰可能导致整个链路不可用,但在多载波的OFDM系统中,只会有一小部分载波受影响。通过合理地挑选子载波位置,可使OFDM的频谱波形保持平坦,同时保证了各载波之间的正交。OFDM的接收机实际上是通过FFT(fast fourier transform,即快速傅里叶变换)实现的一组解调器。它将不同载波搬移至零频,然后在1个码元周期内积分,其它载波信号因其与所积的信号正交,故不会对信息的提取产生影响。OFDM的数据传输速率与子载波数量有关。

OFDM调制解调电路基本构成方框图

matlab实现ofdm调制解调,基于ofdm的调制解调原理,ofdm调制解调fpga代码 - 全文_第1张图片

OFDM调制解调电路的基本构成方框图,输入数据经串,井转换成并行的多路数据,经多路调制后再经并,串转换变成串行数据,再经D/A转换,然后经低通滤波器和调制器调制后经带通滤波器(BPF),然后进行发射传输。在接收端经带通滤波器(BPF)将载波选入,再进行解调和低通取出调制信号,然后经A/D转换器再变成数据信号,数据信号经串,并转换变成多路多载频调制信号,经OFDM解调后经并,串转换恢复成原数据信号输出。

OFDM调制/解调的MATLAB实现

% 文件名:p171ofdm.m

% 2011-3-20 《无线通信的MATLAB和FPGA实现》西瑞克斯 人邮

% p171 例4-9 用MATLAB实现OFDM调制、解调,其中假设OFDM信号包含6个

%子载波。这里只是简单地说明OFDM调制方式,因此略去了交织、加窗等部分。

c=6; %子载波个数

bits=108; %每个信道的比特数

n=c*bits; %总的传送比特数

data=2*round(rand(1,n))-1; %产生信源数据

s=reshape(data,c,bits); %串/并变换

tp=1:0.1:(1+10.8)-0.1;

for i=1:c

carrier(i,:)=cos(2*i*pi*tp); %产生载波信号

bpsk_sig(i,:)=s(i,:).*carrier(i,:); %产生调制信号

fin(i,:)=ifft(bpsk_sig(i,:)); %对信号进行IFFT

end

%并串变换

transmit=reshape(fin,1,648);

%加噪声

snr=10;

rxdata=awgn(transmit,snr,‘measured’);

%并串变换

rec=reshape(rxdata,c,bits);

for i=1:c

rd(i,:)=fft(rec(i,:)); %进行FFT处理

uncarry(i,:)=rd(i,:).*carrier(i,:); %解调

end

rdata=sign(real(uncarry)); %判决输出结果

%并串变换

rdout=reshape(rdata,1,648);

%在MATLAB里运行上述程序后,读者可自行比较rdout和data的数值。

OFDM调制解调的FPGA实现

实现方法:

OFDM 技术对信号进行I/Q 调制,在IQ两路调制时没有幅度上的失真,所以极大的克 服了模拟 I/Q调制的幅度和相位不平衡性, 克服了模拟混频电路非线性的影响。由于FPGA的可编程性,使用 FPGA 实现调制 /解调可以提高系统的可编程性。

在 FPGA 中在使用平方根升余弦滤波器对基带信号滤波,以消除符号间干扰,滤波后的IQ两路信号通过乘法器与NCO中的正弦和余弦中频载波相乘完成 IQ 调制,最后两路信号相加通过DA转换送入信道。接收时将信道来的通过 AD转换后的信号通过与NCO的两路正交载频相乘分解出 IQ 两路信号送至 FPGA进行OFDM 调制在并串转换数据输出。实现框图 分别如图 1、图 2和图 3。

matlab实现ofdm调制解调,基于ofdm的调制解调原理,ofdm调制解调fpga代码 - 全文_第2张图片

matlab实现ofdm调制解调,基于ofdm的调制解调原理,ofdm调制解调fpga代码 - 全文_第3张图片

matlab实现ofdm调制解调,基于ofdm的调制解调原理,ofdm调制解调fpga代码 - 全文_第4张图片

每个 OFDM 符号是多个经过调制的子载波信号之和。如果用N表示子信道的个数, T表 示 OFDM 符号宽度,d i( 0, 1, , N-1) 是分配给每个子信道的数据符号, f c 是载波频率, 则从 t= ts 开始的 OFDM 符号可以表示为

matlab实现ofdm调制解调,基于ofdm的调制解调原理,ofdm调制解调fpga代码 - 全文_第5张图片

其中, 式 ( 2) 的实部和虚部分别对应于 OFDM 符号的同相和正交分量, 在实际工程中 可以分别与相应得子载波的余弦分量和正弦分量相乘, 构成最终的子信道和合成的 OFDM 符号。设计时使用 IDFT来代替 OFDM 调制, 使用 DFT 来完成 OFDM 调制, 也正是由于快速 DFT的引入, 才使 OFDM 技术在调制 /解调方面体现了巨大的优势。

这种正交性还可以从频域角度来理解, 在每一个子载波频率的最大处, 所有其他子信道 的频谱值恰好为零, 因此在理想情况下, 可以从多个相互重叠的子信道符号频谱中提取出各 个子信道符号, 而不会受到其他子信道的干扰。 OFDM 实际上是可以满足无符号间干扰的奈 奎斯特准则, 这种消除子信道间干扰 ( IC I) 的方法是通过在时域中使用矩形脉冲成形, 在 频域中每个子载波的最大处采样来实现。

matlab实现ofdm调制解调,基于ofdm的调制解调原理,ofdm调制解调fpga代码 - 全文_第6张图片

7a561def63e7393f53ba545f5ca6fd39.png

当数据长度较大时, 可以利用 FFT /IFFT来代替 IDFT /DFT 提高算法速度。正交频分复 用采用并行传送的方式, 降低了码速率, 使符号时间大大延长, 相对时延超过符号周期所造 成的符号间串扰就会避免。为了更有效的抗符号间串扰, 在每一帧信号中插入保护间的信 息, 只是加入循环前缀对一小部分信号进行重复。

OFDM FPAG实现

使用 Verilog实现系统的调制解调模块, 假设数据位宽度为 16比特。

IEEE802 16a协议中规定载波数目为 256个,在实现时调用256点FFT模块的IP Core 来实现,将工作频率设置为数据速率的2倍,使 FFT / IFFT来复用一个模块,以节省资源。从时延的角度出发,且考虑到256为4的幂次方,配置基4的模式。

M odu le ofdm _modem ( clk, rese,t w _send, w _rec, q_ou,t mdm, q_index); input c lk;

input rese;t

/ /声明了 32比特, 高 16比特是虚部, 低 16比特是实部

input[ 31: 0]w _send;

input[ 31: 0]w _rec;

output[ 31: 0] q_ou;t

output[ 31: 0] q_index; / /输出数据的下标

outputm dm; / /标志输出是调制信号还是解调信号

/ /1表示调制信号, 0表示解调信号

w ire inv_w e= 1; w ire[ 31: 0] xn; w ire[ 31: 0] xk; reg[ 7: 0] cn;t reg flag; w ire fw d_inv;

/ /产生调制、解调操作的控制信号

a lw ays@ ( posedge clk) beg in

if (!

reset) begin

cnt《 = 0;

flag《 = 0; end

cnt《 = cnt+ 1;

if ( cnt= = 0)

flag《 = ! flag;

e lse

flag《 = flag;

end

assign fw d_inv= rese?t flag: 0;

/ /在标志为 1时做 FFT, 完成 OFDM 信号的调制

你可能感兴趣的:(matlab实现ofdm调制解调,基于ofdm的调制解调原理,ofdm调制解调fpga代码 - 全文)