您现在的位置:首页 >> 通信 >> 内容

m基于DVB-T的COFDM+16QAM+Viterbi码通信链路matlab性能仿真,包括载波和定

时间:2023/7/18 20:55:01 点击:

  核心提示:0X_009m,包括程序操作录像...

1.完整项目描述和程序获取

>面包多安全交易平台:https://mbd.pub/o/bread/ZJuakptr

>如果链接失效,可以直接打开本站店铺搜索相关店铺:

点击店铺

>如果链接失效,程序调试报错或者项目合作可以加微信或者QQ联系。

2.部分仿真图预览



3.算法概述

  基于DVB-T的COFDM+16QAM+Viterbi码通信链路是一种常用的数字视频广播系统,用于实现高效的传输和接收。该系统结合了正交频分复用(COFDM)、16QAM调制和Viterbi编码与解码技术。此外,系统中还包括载波同步、定时同步和信道估计模块,用于实现信号的载波频率和定时偏移的同步,以及信道状态的估计。本文将详细介绍基于DVB-T的COFDM+16QAM+Viterbi码通信链路的系统原理、数学公式和各个环节的功能。基于DVB-T的COFDM+16QAM+Viterbi码通信链路通过COFDM技术将数据分成多个子载波,在频域上并行传输,提高了系统的抗多径衰落和频偏的能力。16QAM调制将每四个比特映射到一个复数点上,实现了16种相位和振幅的调制。Viterbi编码是一种误码控制编码技术,通过状态转移图构建编码器和解码器。载波同步、定时同步和信道估计模块用于实现信号的载波频率和定时偏移的同步,以及信道状态的估计。

4.部分源码

..................................................................................

for i=1:length(TPS)

    train_sym(:,TPS(i))=randint;

    train_sym(:,TPS(i))=A_avg*2*(1/2-train_sym(:,TPS(i))); %传数参数信令值 

end

for i=1:length(TPS)

    X3(:,TPS(i))=train_sym(:,TPS(i));                %插入传数参数信令     

end

%--------------------------------------------------------------------------

%% 插入数据

Data_index=zeros(4,1705);

X_data=X2;

X_out=X3(1:4,:);

for i=1:4

    m=1;

    for j1=1:1705

        if abs(X_out(i,j1))<0.1

            X_out(i,j1)=X_data(i,m);

            Data_index(i,j1)=3;  % 记忆有效数据点处为3,导频和TPS为0,为接收端提取数据用。

            m=m+1;  %只有1512个数据,最后一个m多加了1.

        end

    end

    M(i)=m;    

end

Data_index=[Data_index;Data_index;Data_index;Data_index];

  %组成68个OFDM符号,4个FODM符号为一循环

    X41=[X_out;X_out;X_out;X_out;X_out;X_out;X_out;X_out];

    X42=[X41;X41;X_out];

    CP_pilot=X42(1:6,:);

 % ------------------------------------------------------------------------

%% IFFT变换 %%

IFFT_modulation=zeros(symbols_per_carrier,IFFT_bin_length);

IFFT_modulation(:,signal)=X42; 

X4=ifft(IFFT_modulation,IFFT_bin_length,2); %2为行运算,1为列运算。

% 下面的方法与前一行运算等同。复数矩阵行列调换按如下方式进行,不能用reshape

%ifft_x=(IFFT_modulation).';

%X41=ifft(ifft_x,2048);

%X4=(X41).';

 

%--------------------------------------------------------------------------

%% 加循环前缀保护间隔 %%

X10=zeros(68,2560);

for j1=1:68

    X10(j1,1:GI)=X4(j1,2048-512+1:end);

    X10(j1,GI+1:end)=X4(j1,1:end);

end

..................................................................

% ---------------极大似然作图----------------------------------------------

figure(1)

subplot(211);

plot(T,cor);

xlabel('载波数');

ylabel('相关值');

grid on;

%% -------------------------- FFT变换 ---------------------------

N=IFFT_bin_length;

Ng=GI;

Y8=r;  % 加延时,使截取点落入循环前缀之内。

r=Y8;

r_ofdmin=reshape(r(1:12*2560),2560,12).';

r_nocp=r_ofdmin(:,GI+1:end);

r_Sym=fft(r_nocp,2048,2);

%figure(2)

scatterplot(r_Sym(1:1705));

title('存在定时误差的FFT窗口取样符号');

%% ------------------细定时估计------------------------------------

........................................................................

%% -------------------- 信道估计  --------------------------

% 简化方式,只能对第一个OFDM符号做估计,且认为是分散导频模式0.

% 只保留分散导频和连续导频  

r_chestimation=X_modify1(:,1:1705);

r_chestimation=X_modify1(First_ip:First_ip+8-1,:);

X_modify2=r_chestimation;

r_chestimation(:,TPS)=0;

for m=1:8

    for k=1:1705

        if (abs(Data_index(m,k))>0.5)

            r_chestimation(m,k)=0;

        end

    end

end

r_chestimation_sum=zeros(1,1705);  % *****************************************************************

% 连续导频用第一个符号的连续导频置换。修改为Max_ip置换。

%CP_pilot

for i=1:8

    for k=1:1705;

        if(abs(X3_SPCP12(i,k))>0.001)

            Hp(i,k)=r_chestimation(i,k)./X3_SPCP12(i,k);

        end

    end

end

Hp_CP(:,CP)=Hp(:,CP); %保留连续导频的信道估计待用

% 第一列连续导频再替换回去。

Hp1=Hp;

Hp1(:,CP)=Hp_CP(:,CP);

% 行方向(频率)插值,对第5个OFDM符号的信道估计

for n=0:568-1

    Hp1(5,3*n+2)=2*Hp1(5,3*n+1)/3+Hp1(5,3*n+4)/3;

     Hp1(5,3*n+3)=Hp1(5,3*n+1)/3+2*Hp1(5,3*n+4)/3;

end

% Hp1=Hp; 

................................................................................

%% -------------解调和viterbi解码 --------------------------------

hDemod = modem.qamdemod('M', ModulateIndex, 'PhaseOffset', 0, ...

    'SymbolOrder', 'Gray', 'OutputType', 'Bit');

% scatterplot(msg_rx_int);

msg_demod = demodulate(hDemod, S_data.');

msg_dec = vitdec(msg_demod, trellis, tblen, 'cont', 'hard');

[nChnlErrs BERChnl] = biterr(msg_enc(1:end/4), msg_demod);

[nCodErrs BERCoded] = biterr(msg_orig(1:end/4-tblen), msg_dec(1+tblen:end));

Time_err

Max_ip

Max_i

nChnlErrs

nCodErrs

0X_009m

作者:我爱C编程 来源:我爱C编程
本站最新成功开发工程项目案例
相关评论
发表我的评论
  • 大名:
  • 内容:
本类固顶
  • 没有
  • FPGA/MATLAB商业/科研类项目合作(www.store718.com) © 2025 版权所有 All Rights Reserved.
  • Email:1480526168@qq.com 站长QQ: 1480526168