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
---