第7章:OFDM 信道估计与均衡(5)

本已打算更新OFDM同步方面的内容了,但在这之前仍有许多问题浮现在脑海,比如

(1)保护间隔(GI)和循环前缀(CP)、补零(zero padding,ZP)的区别

(2)OFDM与IFFT、FFT的关系

(3)子载波(ICI)和符号间干扰(ISI)的区别

解决以上的问题,明晰一些概念,也是为OFDM同步的内容做知识储备。

我一直提到的《MIMO-OFDM无线通信技术及MATLAB实现》下载地址是:https://github.com/LyricYang/MIMO_OFDM,该书有的代码版本可能老旧,因此需要偶尔改改代码适应新的MATLAB版本才可以正常运行。

因此,本文先讨论以上提到的问题,然后集中在OFDM采用ZP或者CP,经过多径衰落信道的误码率分析,并附上完整可运行的代码,代码下载地址:123kevin456/OFDM-5

若出现代码缺少子函数,可在《MIMO-OFDM无线通信技术及MATLAB实现》的下载地址中https://github.com/LyricYang/MIMO_OFDM 找到相应函数。

一、参考资料

1、《MIMO-OFDM的无线通信技术及其MATLAB实现》

2、孙宇彤《LTE教程:原理和实现》

此书对于刚开始接触LTE协议的我来说,有一定的帮助。该书没有复杂的计算公式,也没有代码的相关验证,用大量的例子和图示来通俗讲明白LTE协议的许多概念,不错

3、CSDN的《OFDM专题之子载波间干扰问题(一)》和《OFDM专题之子载波间干扰问题(二)》、《给“小白”图示讲解OFDM的原理》,这几篇文章均不错,值得多次反复学习,我时不时会翻出来阅读,认真消化

二、OFDM相关问题继续探讨

1、子载波干扰(ICI)和符号间干扰(ISI)是什么?出现这两种干扰后,各自的应对方法是什么?保护间隔(GI)和补零(ZP)、循环前缀(CP)的区别?

每次用到保护间隔时都是以CP的形式吗?用了CP后会有子载波干扰(ICI)和符号间干扰(ISI)吗?

2、IFFT与FFT等技术与OFDM实现的关系?OFDM是不是就一定要用到IFFT和FFT技术?或者更本质的讲,IFFT与FFT等技术在OFDM实现中,到底起到什么样的作用?

3、下图(a)中,为什么是不同子载波信号是加到一起再进行发送呢?而不是各自发送?这是受到什么约束了呢?

img

接下来对各个问题依次回答。

1、子载波干扰(ICI)和符号间干扰(ISI)是什么?出现这两种干扰后,各自的应对方法是什么?

在OFDM系统,最基本的传输单位是OFDM符号。由于同一信号的不同分量经过不同路径到达接收端的时间不一样。

img

如图4.14所示,如果保护间隔长度小于最大多径时延扩展,对于前一个OFDM符号的尾部已经影响到下一个OFDM符号的前端,这样就造成ISI。

有了符号间干扰怎么来解决呢?

当出现这个问题的时候,有的书籍便就立马引出来CP的概念了,但不解释清为什么。

其实有了符号间干扰后,我们的目的依然是让不同的OFDM符号区分开来,只需要加入保护间隔(GI)即可。

而保护间隔有两种插入方法,一种是补零(ZP),即在保护间隔中补充0。这便可以使得第n个符号经过最长路径后也不会影响到第n+1个符号,但这会给系统带来ICI

思考下为什么带来ICI?可以看《OFDM专题之子载波间干扰问题(一)》和《OFDM专题之子载波间干扰问题(二)》,这两篇文章解释得非常好)。

另一种便是CP。这个在《第7章:OFDM 信道估计与均衡(1)》中也已经讲到过其作用。

CP是既起到了保护间隔作用,避免了ISI,同时又使得循环扩展(为了某种连续性,可以说是为了循环卷积)消除了ICI,真是非常巧妙。

加CP和加ZP,对应在下面的代码中,是信号在接收端的处理方式有所不同。

function y=remove_GI(Ng,Lsym,NgType,ofdmSym)

if Ng~=0
  if NgType==1  % cyclic prefix
    y=ofdmSym(Ng+1:Lsym);
   elseif NgType==2 % zp
    y=ofdmSym(1:Lsym-Ng)+[ofdmSym(Lsym-Ng+1:Lsym) zeros(1,Lsym-2*Ng)];
  end
 else
  y=ofdmSym;
end

2、IFFT与FFT等技术与OFDM实现的关系?OFDM是不是就一定要用到IFFT和FFT技术?或者更本质地讲,IFFT与FFT等技术在OFDM实现中,到底起到什么样的作用?

在实现OFDM时,IFFT和FFT不是唯一的方法,但是一种比较好的方法。

img

img

img

孙宇彤《LTE教程:原理和实现》还介绍了OFDM信号的其他生成算法,比如反向离散哈特利变换(IDHT)、离散余弦变换等等。

img

img

接下来再举孙宇彤《LTE教程:原理和实现》中讲到IFFT作用,这与我在别的地方看到的不一样,可做参考。

img

img

三、CP和ZP对OFDM系统的影响(完整可运行MATLAB代码及其注意点)

%%%%%%%%%%%%%%%%%%%%%       检查正弦信号间的相交性    %%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%        OFDM_basic_myself3.m            %%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%      data:2020年12月11日  author:飞蓬大将军 %%%%%%%%%%

%%%%%%%%%%%%%%%%%程序说明
%%%(1)CP和ZP作用   (2)子载波干扰与符号间干扰的区别及其消除方法

%%%%%%    仿真环境
%软件版本:MATLAB R2019a

%**************************** 程序主体 **************************%
clear all;

%%%%%%%%%%%%%%%%%%%%参数设定%%%%%%%%%%%%%


%%%%选择CP或ZP
NgType = 1;  %对于ZP或CP NgType = 1或2
if NgType == 1
    nt = 'CP';
elseif NgType == 2
    nt = 'ZP';
end

%%%%选择信道类型
Ch = 0;
if Ch == 0
    chType ='AWGN'; %高斯白噪声信道 
    Target_neb = 100;
else
    chType ='CH';
    Target_neb = 500;
end
figure(Ch+1);
clf;

PowerdB = [0 -8 -17 -21 -25]; %信道抽头功率特性'dB'
Delay = [0 3 5 6 8]; %信道时延 
Power = 10.^(PowerdB/10); %信道抽头功率特性 '线性'
Ntap = length(PowerdB);
Lch = Delay(end)+1;
Nbps = 2;   %调制阶数 2/4/6
M = 2^Nbps; %QPSK、16-QAM、64-QAM
Nfft = 64; %FFT大小

%Ng = 3;

Ng = Nfft/4; %保护间隔(GI)长度,若没有保护间隔,Ng = 0
Nsym = Nfft + Ng; %符号周期

%%%调整Nvc
Nvc = Nfft/4; %Nvc若等于0,则没有VC(虚拟子载波)
% Nvc = 0; %Nvc若等于0,则没有VC(虚拟子载波)

Nused = Nfft - Nvc; %Nused为用于传输数据的子载波数

EbN0 = [0:2:20];  %Eb/N0
% EbN0 = 50;  %Eb/N0
N_iter = 1e5;  %对于每一次EbN0的迭代次数
Nframe = 3; %每一帧的符号数
sigPow = 0; %初始信号功率
file_name = ['OFDM_BER_' chType '_' nt '_' 'GL' num2str(Ng) '.dat'];
fid = fopen(file_name,'w+');
norms = [1 sqrt(2) 0 sqrt(10) 0 sqrt(42)];  %BPSK 4-QAM 16-QAM


for i = 0:length(EbN0)
    randn('state',0);
    rand('state',0);
    Ber2=ber(); %初始化BER
    Neb = 0; %初始化误比特数
    Ntb = 0; %初始化总比特数
    for m = 1:N_iter
        X = randi([0 M-1],1,Nused*Nframe);
        Xmod = qammod(X,M,'gray')/norms(Nbps);
        if NgType~=2
            x_GI = zeros(1,Nframe*Nsym);
        elseif  NgType == 2
            x_GI = zeros(1,Nframe*Nsym+Ng);
        end
%         kk1 = 1:Nused/2;
%         kk2 = Nused/2+1:Nused;
        kk1 = [1:Nused/2];
        kk2 = [Nused/2+1:Nused];
        kk3 = 1:Nfft;
        kk4 = 1:Nsym;
        for k = 1:Nframe
            if Nvc~= 0
                X_shift = [0 Xmod(kk2) zeros(1,Nvc-1) Xmod(kk1)];
            else
                X_shift = [Xmod(kk2) Xmod(kk1)];
            end
            x = ifft(X_shift);
            x_GI(kk4) = guard_interval(Ng,Nfft,NgType,x);
            kk1 = kk1 + Nused;
            kk2 = kk2 + Nused;
            kk3 = kk3 + Nfft;
            kk4 = kk4 + Nsym;
        end
        
        %%%%%能量检测
        if i == 0   %只测量信号功率
            sigPow_temp = x_GI*x_GI';;
        end
        
        
        
        if Ch==0
            y = x_GI;  %没有信道
        else      %多径衰落信道
            channel =(randn(1,Ntap)+1j*randn(1,Ntap)).*sqrt(Power/2);
            h = zeros(1,Lch);
            h(Delay+1) = channel;
            y = conv(x_GI,h);
        end
        
        if i == 0   %只测量信号功率
            y1 = y(1:Nframe*Nsym);
            sigPow = sigPow + y1*y1';
            continue;
        end

        %******************** 信道 ***********************%
        snr = EbN0(i) + 10*log10(Nbps*(Nused/Nfft));  %%方便fig标号,(1),原书公式
%         snr = EbN0(i) + 10*log10(Nbps);
%         snr = EbN0(i) + 10*log10(Nbps*(Nfft/Nsym));  %%方便fig标号,(3)CP消耗能量
        noise_msg = sqrt((10.^(-snr/10))*sigPow/2);
        y_GI = y + noise_msg*(randn(size(y)) + 1j*randn(size(y)));
        
        %%%%%%%%%%%接收端
        kk1 = (NgType==2)*Ng + [1:Nsym];
        kk2 = 1:Nfft;
        kk3 = 1:Nused;
        kk4 = Nused/2 + Nvc + 1:Nfft;
        kk5 = (Nvc~=0)+[1:Nused/2];
        if Ch ==1
            H = fft([h zeros(1,Nfft-Lch)]);  %信道频率响应
            H_shift(kk3) = [H(kk4) H(kk5)];
        end
        
        for k =1:Nframe
            Y(kk2) = fft(remove_GI(Ng,Nsym,NgType,y_GI(kk1)));
            Y_shift = [Y(kk4) Y(kk5)];
            if Ch ==0
                Xmod_r(kk3) = Y_shift;
            else
                Xmod_r(kk3) = Y_shift./H_shift;  %均衡器
            end
            kk1 = kk1 + Nsym;
            kk2 = kk2 + Nfft;
            kk3 = kk3 + Nused;
            kk4 = kk4 + Nfft;
            kk5 = kk5 + Nfft;
        end
        X_r = qamdemod(Xmod_r*norms(Nbps),M,'gray');
        Neb = Neb + sum(sum(de2bi(X_r,Nbps)~=de2bi(X,Nbps)));
        Ntb = Ntb + Nused*Nframe*Nbps;
%         if Neb>Target_neb
%             break
%         end
    end
    if i == 0
        sigPow = sigPow/Nsym/Nframe/N_iter;
        fprintf('Signal power= %11.3e\n', sigPow);
        fprintf(fid,'%%Signal power= %11.3e\n%%EbN0[dB]       BER\n', sigPow);
    else
        Ber = Neb/Ntb;
        fprintf('EbN0=%3d[dB], BER=%4d/%8d=%11.3e\n', EbN0(i), Neb,Ntb,Ber)
        fprintf(fid, '%d\t%11.3e\n', EbN0(i), Ber);
        if Ber<1e-6
            break;
        end
    end
end %end for i
if(fid~=0)
     fclose(fid);
end
disp('sumualtion is finished');
plot_ber(file_name,Nbps);

%%%%选择CP或ZP
if Ch == 1
    if NgType == 1
        a = load(file_name);
        save('ofdm_basic_myself3_cp16_rayleigh','a');
    elseif NgType == 2
        b = load(file_name);
        save('ofdm_basic_myself3_zp16_rayleigh','b');
    end
else
    

%%%%%%%%%%%%%%实验记录
%%%%2020年12月11日
%%%%CP和ZP都能起到保护间隔的作用,消除了子载波干扰和符号间干扰
%%%%在AWGN和瑞利信道下均能画出正确误码率曲线

    

  
         

在上面的代码中,有以下几点值得注意:

(1)SNR其实是ES/N0

原书公式snr = EbN0(i) + 10log10(Nbps)+10log10*(Nused/Nfft)),其实是EsN0(i) = EbN0(i) + 10log10(Nbps)+10log10*(Nused/Nfft)) 有10*log10(Nbps)这一项是很好理解的,因为一个调制后的符号能量是Nbps个比特的能量。后面的10*log10*(Nused/Nfft))让我想了非常久

E b R b = E s R s {E_b}{R_b} = {E_s}{R_s} EbRb=EsRs ,得到 E s N 0 = E b N 0 R b R s \frac{{{E_s}}}{{{N_0}}} = \frac{{{E_b}}}{{{N_0}}}\frac{{{R_b}}}{{{R_s}}} N0Es=N0EbRsRb

R b = N u s e d N b p s T s y m + T G I {R_b} = \frac{{{N_{used}}Nbps}}{{{T_{sym}} + {T_{GI}}}} Rb=Tsym+TGINusedNbps ,而 R s = N f f t T s y m + T G I {R_s} = \frac{{{N_{fft}}}}{{{T_{sym}} + {T_{GI}}}} Rs=Tsym+TGINfft ,有了这两个公式,便可以理解上面EsN0与 EbN0的换算关系了。

而书中给出了时域信噪比和频域信噪比的概念,这是我第一次听说这两名词。

img

在这里没有考虑我之前的通信有效性与可靠性的衡量,即将保护间隔当做冗余处理。

(2)以上的代码是基带仿真!基带仿真!基带仿真!

有的同学可能觉得经过IFFT之后,信号便被“调制”了。调制的目的是“搬移频谱”,做IFFT变换只是在基带上搬移了

经过IFFT后的信号当做一个整体,再去乘以coswt,进行上载波,整体的搬移,信号才搬移到带通信号了。

img

图1 CP和ZP对AWGN下OFDM的误码率影响

(3)调整NgType、CH的值、不同的调制方式、Ng的长度便可以得到相应的实验结果。

下面的图中,AWGN analytic是AWGN信道下的理论误码率曲线、Rayleigh fading analytic是多径瑞利信道下的理论误码率曲线,下同。

simulation是根据实验条件的仿真曲线,比如是加入CP还是ZP、在AWGN信道还是多径瑞利信道、CP或ZP的长度对实验的影响等等。

img

图2 多径瑞利信道,CP长为16的误码率曲线图

img

图3 多径瑞利信道,ZP长为16的误码率曲线图

从图2和图3,可以看出CP和ZP长度大于最长路径时延时,且接收端完美知道信道状态信息,并能对有信道进行补偿后,都可使得两者的误码率曲线接近理论误码率曲线,实验正确。

改变CP和ZP的长度为3:

img

图4 多径瑞利信道,ZP、CP长为3的误码率曲线图

img

图5 多径瑞利信道,ZP或CP为0的误码率曲线图

(4)代码中还未对基带信号进行加窗处理,或者升余弦滚降处理,后续再考虑。

四、总结

OFDM系统中概念确实较多,然通过死记硬背不能充分理解各个知识点的前因后果,便常在脑海中有许多为什么?

《MIMO-OFDM的无线通信技术及其MATLAB实现》中大量的数学公式和代码,但较枯燥;

而CSDN的《OFDM专题之子载波间干扰问题(一)》和《OFDM专题之子载波间干扰问题(二)》、《给“小白”图示讲解OFDM的原理》,作者会结合图例与自己的理解,以更加通俗的方式讲出来。

以上两类材料,相得益彰,一起阅读,效果更好。因此,同一个知识点,看不同的人讲,交叉验证,能帮助学习更扎实。

欢迎你双击屏幕、点赞、收藏、转发和分享,关注我的知乎号、CSDN号,也欢迎读者朋友就相关技术问题与我交流,一起学习,共同进步。请你也别忘了把这篇文章分享给你身边正在学习通信专业的同学们,也许能够帮到Ta。

这是《陈老湿·通信MATLAB》仿真的第7章,期待下次更新见!

<think>好的,我现在需要回答用户关于FFT、信道均衡以及线性卷积循环卷积区别的问题。用户之前已经了解了多径时延和循环前缀的关系,现在的问题是基于CP如何将线性卷积转化为循环卷积,进而利用FFT进行信道均衡。让我一步步分析这个问题。 首先,用户询问FFT是什么。FFT即快速傅里叶变换,我需要解释清楚它的基本概念和作用。应该提到它是DFT的高效算法,用于时频域转换,适用于信号处理中的频谱分析和快速计算。 接下来,用户想知道FFT如何进行信道均衡。这里需要联系OFDM系统的工作流程。当CP被添加后,接收端去除CP,剩下的信号可以视为循环卷积的结果。由于FFT可以将时域的循环卷积转换为频域的乘法,因此对接收信号做FFT后,每个子载波上的信号等于发送信号乘以信道响应,再加上噪声。均衡就是在频域对每个子载波进行简单的除法操作,即用接收信号除以估计信道响应,从而恢复原始信号。需要强调FFT在这里的关键作用,将复杂的时域卷积转化为简单的频域操作。 然后,用户问线性卷积和循环卷积的区别。我需要明确两者的数学定义和应用场景。线性卷积是信号通过线性时不变系统的自然结果,而循环卷积是在离散傅里叶变换框架下定义的,要求信号周期化。两者的主要区别在于边界效应:线性卷积会导致信号长度增加,而循环卷积在周期延拓后不会。此外,当信号长度足够时,循环卷积可以模拟线性卷积,但需要满足一定条件,比如通过填充零来扩展信号。 接下来,要确保各部分内容之间的逻辑连贯。可能需要先介绍FFT,再解释信道均衡的过程,接着对比两种卷积的区别,最后总结CP如何促进这种转换,从而简化均衡过程。同时,需要注意使用用户已经了解的CP的作用,即如何将线性卷积转化为循环卷积,以便引入FFT的应用。 需要检查是否有技术细节错误,例如FFT在信道均衡中的具体步骤是否正确,循环卷积线性卷积的区别是否准确,特别是关于填充和周期延拓的部分。同时,要使用用户容易理解的语言,避免过于专业的术语,必要时通过比喻或例子来说明。 可能存在的疑问点:用户可能不太理解为什么循环卷积可以通过FFT转换为频域乘法。这时候需要更详细地解释卷积定理,即时域中的循环卷积对应于频域中的点乘。而线性卷积在一般情况下并不满足这一点,但通过添加CP,人为地让信道效应变成循环卷积,从而可以利用卷积定理,简化均衡过程。 另外,用户可能对信道均衡的具体操作有疑问,比如为什么要用除法。需要说明在频域中,每个子载波上的接收信号是发送信号乘以信道频率响应,因此逆运算就是除以信道响应,以抵消其影响。这就是所谓的零强制均衡,当然还有其他均衡方法,但基本原理类似。 最后,总结部分需要回顾整个流程,强调FFT和CP在OFDM系统中的协同作用,使得复杂的时域均衡问题转化为简单的频域操作,提高系统效率。</think>### FFT(快速傅里叶变换)信道均衡 #### **一、FFT是什么?** FFT(Fast Fourier Transform)是**离散傅里叶变换(DFT)的高效算法**,用于将时域信号转换为频域信号(或反向转换)。其核心价值在于: - **复杂度降低**:直接计算DFT的时间复杂度为$O(N^2)$,而FFT优化至$O(N \log N)$。 - **物理意义**:揭示信号的频率成分(如OFDM中子载波的幅值/相位)。 - **应用场景**:频谱分析、信号滤波、正交频分复用(OFDM)等。 --- #### **二、FFT如何实现信道均衡?** 在OFDM系统中,FFT的信道均衡流程如下(结合多径信道循环前缀CP): 1. **发射端**: - 数据经过IFFT变换为时域信号:$s(t) = \text{IFFT}(X_k)$ - 添加CP:将符号尾部复制到头部,形成抗多径保护间隔。 2. **信道传输**: - 信号经过多径信道:$r(t) = s(t) * h(t) + n(t)$ (*表示线性卷积,$h(t)$为信道冲激响应,$n(t)$为噪声) 3. **接收端处理**: - **去除CP**:将信号截断为原始符号长度。 (当多径时延≤CP长度时,线性卷积转化为循环卷积) - **FFT解调**:$Y_k = \text{FFT}(r(t))$ 由卷积定理得:$Y_k = X_k \cdot H_k + N_k$ ($H_k$为信道频域响应,$N_k$为噪声频域分量) - **频域均衡**:对每个子载波进行补偿: $\hat{X}_k = Y_k / \hat{H}_k$ ($\hat{H}_k$为估计信道响应,除法即最简单的零强制均衡) --- #### **三、线性卷积 vs 循环卷积** | **特性** | **线性卷积** | **循环卷积** | |-------------------------|---------------------------------------|---------------------------------------| | **数学定义** | $y[n] = x[n] * h[n] = \sum_{m} x[m]h[n-m]$ | $y[n] = x[n] \circledast h[n] = \sum_{m} x[m]h[(n-m) \mod N]$ | | **信号长度** | 结果长度$L = M+N-1$(输入长度$M$,滤波器长度$N$) | 结果长度$N$(要求输入滤波器补零至相同长度$N$) | | **物理意义** | 自然物理过程(如信号通过LTI系统) | 人为定义的周期化运算(需信号周期延拓) | | **FFT关系** | 无法直接通过FFT计算 | 满足:$\text{FFT}(x \circledast h) = \text{FFT}(x) \cdot \text{FFT}(h)$ | --- #### **四、CP如何促成循环卷积?** 通过CP的**周期延拓作用**: 1. **添加CP**:将符号尾部复制到头部,使信号在时间上呈现伪周期性。 2. **多径约束**:要求多径时延不超过CP长度,确保所有延迟信号在符号周期内完成叠加。 3. **数学等效**:在接收端去除CP后,信道的影响等效为**循环卷积**而非线性卷积,从而满足FFT的频域相乘特性。 --- #### **五、实例说明** 假设发送符号为$[x_0, x_1, x_2, x_3]$,CP长度为1(添加$x_3$到头部): - **发射信号**:$[x_3, x_0, x_1, x_2, x_3]$ - **信道响应**:$h = [h_0, h_1]$(两径信道) - **接收信号**:线性卷积结果为$[h_0x_3, h_0x_0+h_1x_3, ..., h_1x_3]$ - **去除CP**后:剩余$[x_0, x_1, x_2, x_3]$的循环卷积结果,可通过FFT直接解调。 --- #### **总结** FFTCP的协作本质是:**通过牺牲部分时间资源(CP)将复杂的时域均衡问题,转化为频域简单的标量除法运算**。这种设计使得OFDM系统在高速移动、多径丰富的场景中仍能保持高效可靠,成为4G/5G等无线通信系统的核心技术。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值