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

基于DVB-T的COFDM+16QAM+Viterbi编解码图传通信系统matlab仿真,包括载波定

时间:2024/12/19 3:30:44 点击:

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

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

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

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

点击店铺

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

2.部分仿真图预览


3.算法概述

   基于DVB-T的COFDM+16QAM+Viterbi编解码通信链路是一种常用的数字视频广播系统,用于实现高效的传输和接收。该系统结合了正交频分复用(COFDM)、16QAM调制和Viterbi编解码技术。此外,系统中还包括载波同步、定时同步和信道估计模块,用于实现信号的载波频率和定时偏移的同步,以及信道状态的估计。本文将详细介绍基于DVB-T的COFDM+16QAM+Viterbi编解码通信链路的系统原理、数学公式和各个环节的功能。

4.部分源码

--------------------------------------------------------------------------

%加循环前缀保护间隔

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

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

%并串转换reshape按列重排,X6是68x2560,必须先转成为2560x68,再重排

X7                   = reshape(X10.',1,symbols_per_carrier*(IFFT_bin_length+GI));

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

%加入基于DVB-T的瑞利多径衰落信道(固定接受模式) 

%加衰减信道

PathDelays        = 2*[0 0.05 0.4 1.45 2.3 2.8]*1e-6; % 长时延

AvgPathGaindB     = [-3 -4 -5 -6 -7 -8]; 

InputSamplePeriod = 1e-7;  

fadedSig               = X7;

for iii = 2:length(PathDelays)

    dds = floor(PathDelays(iii)/InputSamplePeriod)+1;

    ad  = 10^(AvgPathGaindB(iii)/10);

    fadedSig = fadedSig+ ad*[zeros(1,dds),fadedSig(1:end-dds)];

end

Tx_data                = awgn(fadedSig,EbN0s,'measured');           % Add Gaussian noise.   

%%

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%以下是接收部分

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%Tx_data(2560*2+1:end)]信道参数

Y7                     = [zeros(1,400) Tx_data(2560*3+1:end)]; 

%%

%%%%%%%%%%%%%%%%%%%%%符号同步%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%STEP1:不做大的变动,最大似然法,确定粗定时偏差

r                      = Y7;%任意选取一段数据进行估计

N                      = IFFT_bin_length;

G                      = GI;

T                      = 1:3*N+2*G;

for i=1:length(T)               %FFT窗移动的距离

    data1  = r(i:G+i-1);         %取GI长个数据存data1

    data2  = r(N+i:N+G+i-1);     %取相距IFFT_bin_length的GI长个数据存data2

    sr(i)  = real(data1*data2');       %求互相关值    

    si(i)  = imag(data1*data2');       %求互相关值        

    s(i)   = sr(i)+sqrt(-1)*si(i); 

    cor(i) = sr(i)-si(i); 

end

%Max_i对应一个符号的第一个数据

[Max,Max_i]=max(cor(1:N));    

Max_i=Max_i-1;

 

Lc  = 30;

r   = r(Max_i-Lc:Max_i-Lc+12*2560);

%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);

 

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%STEP2:细定时估计

%找出分散导频位置

P   = 12;

Y_1 = r_Sym(1,1:end);

Y_5 = r_Sym(5,1:end);

%另一种找出导频点的方法,更好且简单,确定四种导频方式其中的一种。

for k1=0:3

    dd=0;

    for p=1:142

        dd=dd + Y_1(12*p+1+3*k1)*conj(Y_5(12*p+1+3*k1));

    end

    d(k1+1)=abs(dd);

end

[cMax,Max_ip]=max(d);

 

%确定细定时偏差,假定定时偏差在(-85,+85)之间。

Y_SP     = r_Sym(1,:); %取第1个OFDM符号。

sum      = 0;

K1       = N/(2*pi*P);

SP_X     = ScPilotX(Max_ip,:);  %取出模式Max_ip指定的分散导频

SP_X     =[SP_X,zeros(1,2*P)];  %补点,防止下标溢出。

SP_start = 3*(Max_ip-1)+1;

--------------------------------------------------------------------------

dat  = Rimages_snr{1};

len  = 3*length(Rbin);

Rbin = dat(1:len/3);

Gbin = dat(1+len/3:2*len/3);

Bbin = dat(1+2*len/3:len);

 

%二进制转化为十进制

Rdec = func_bin2image([Rbin]);

Gdec = func_bin2image([Gbin]);

Bdec = func_bin2image([Bbin]);

%十进制转化为矩阵

RIimages = [reshape(Rdec,[256,256])]';

GIimages = [reshape(Gdec,[256,256])]';

BIimages = [reshape(Bdec,[256,256])]';

Images_snr_5(:,:,1) = RIimages;

Images_snr_5(:,:,2) = GIimages;

Images_snr_5(:,:,3) = BIimages;

%RGB合并

figure;

imshow(uint8(Images_snr_5));

dat = Rimages_snr{2};

len  = 3*length(Rbin);

Rbin = dat(1:len/3);

Gbin = dat(1+len/3:2*len/3);

Bbin = dat(1+2*len/3:len);

%二进制转化为十进制

Rdec = func_bin2image(Rbin);

Gdec = func_bin2image(Gbin);

Bdec = func_bin2image(Bbin);

%十进制转化为矩阵

RIimages = [reshape(Rdec,[256,256])]';

GIimages = [reshape(Gdec,[256,256])]';

BIimages = [reshape(Bdec,[256,256])]';

 

Images_snr0(:,:,1) = RIimages;

Images_snr0(:,:,2) = GIimages;

Images_snr0(:,:,3) = BIimages;

%RGB合并

figure;

imshow(uint8(Images_snr0));

 

 

dat = Rimages_snr{3};

len  = 3*length(Rbin);

Rbin = dat(1:len/3);

Gbin = dat(1+len/3:2*len/3);

Bbin = dat(1+2*len/3:len);

 

%二进制转化为十进制

Rdec = func_bin2image(Rbin);

Gdec = func_bin2image(Gbin);

Bdec = func_bin2image(Bbin);

%十进制转化为矩阵

RIimages = [reshape(Rdec,[256,256])]';

GIimages = [reshape(Gdec,[256,256])]';

BIimages = [reshape(Bdec,[256,256])]';

Images_snr5(:,:,1) = RIimages;

Images_snr5(:,:,2) = GIimages;

Images_snr5(:,:,3) = BIimages;

%RGB合并

figure;

imshow(uint8(Images_snr5));

save R_1_iamge.mat Images_snr_5 Images_snr0 Images_snr5

0sj_043m

---

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