目录
💥1 概述
📚2 运行结果
🎉3 参考文献
👨💻4 Matlab代码
💥1 概述
数字视频广播(DVB)在卫星通信数字多媒体业务领域应用广泛,其一般采用MPEG-2编码、数字传输和纠错处理等通用技术,然而,当第三方(非合作方)通过卫星天线截获信号时,由于卫星信号种类繁多、接收信号信噪比低、分析出的音视频和网络数据业务质量差等因素,准确识别分析处理卫星DVB-S信号存在较大的困难。因此,本文针对性地设计了一套卫星通信DVB-S信号识别系统,该系统处理的信号规格全、集成度高,能在有效时间内完成对DVB-S信号的搜索确定、自动采集、精确分析和控守处理。
本代码包含DVB-S中卫星通信系统的基带仿真,并探索了调制方案和编码速率的性能。 代码模拟的无线信道主要是AWGN信道、瑞利衰落信道。
📚2 运行结果







主函数部分代码:
%
clear all;
puncturepattern12=[1;1];%puncture pattern when the code rate=1/2
puncturepattern23=[1;1;0;1]; %2/3
puncturepattern56=[1;1;0;1;1;0;0;1;1;0];
puncturepatternSelect=[puncturepattern12;puncturepattern23;puncturepattern56];
PC=[1,2;3,6;7,16];
tracebackdepthSelect=[60,75,120];
coderateSelect=[1/2,2/3,5/6];
M=4;
EbN0=-4:0.1:16;
BER_QPSK=zeros(3,length(EbN0));
EsNo=EbN0+10*log10(log2(M));
for b=1:3
EbNoratesemilogy=zeros(1,length(EbN0));
hConvEnc = comm.ConvolutionalEncoder(poly2trellis(7,[133 171])); %maybe need to change the 133 171
hConvEnc.PuncturePatternSource = 'Property';
hConvEnc.PuncturePattern =puncturepatternSelect(PC(b,1):PC(b,2),1);
hMod = comm.PSKModulator(M, 'BitInput',true);
hDemod = comm.PSKDemodulator(M, 'BitOutput',true);
hVitDec = comm.ViterbiDecoder(poly2trellis(7,[133 171]),...
'InputFormat','Hard');
hVitDec.PuncturePatternSource = 'Property'; %property not sure
hVitDec.PuncturePattern = hConvEnc.PuncturePattern;
hVitDec.TracebackDepth = tracebackdepthSelect(b);
hErrorCalc = comm.ErrorRate('ReceiveDelay',hVitDec.TracebackDepth);
EbNoEncoderOutput = EbN0 +10*log10(coderateSelect(b));
frameLength =45000; %framelength/maxnumtransmissions
targetErrors = 100; %100 errors max
maxNumTransmissions =10000000;
BERVec = zeros(3,length(EbNoEncoderOutput));
%BERp=zeros(3,length(EbNoEncoderOutput));
for n=1:length(EbNoEncoderOutput)
reset(hErrorCalc);
reset(hConvEnc);
reset(hVitDec);
[EbNoEncoderOutput(n),coderateSelect(b)]
hChan = comm.AWGNChannel('NoiseMethod','Signal to noise ratio (Es/No)','EsNo',EsNo(n)); %signalpower not sure
while(BERVec(2,n) < targetErrors)&&(BERVec(3,n)<maxNumTransmissions)
data = randi([0 1],frameLength,1); %use framelength to create random number?
encData = step(hConvEnc, data);
modData = step(hMod,encData);
channelOutput = step(hChan,modData);
DemodData = step(hDemod, channelOutput);
decData = step(hVitDec, (DemodData));
%d = tracebackdepthSelect;
BERVec(:,n) = step(hErrorCalc, data, decData);
end
if BERVec(1,n)<2e-6
BER_QPSK(b,:) = BERVec(1,:);
%BERp(b,:)=BERVec(1,:);
save('BPSK_sim_3.mat','EbN0','BER_QPSK');
load('BPSK_sim_3.mat');
figure(1)
semilogy(EbN0,BER_QPSK(b,:),'-');
hold on;
grid on;
title('Part2 question1 BER verus Eb/N0 curve without RS outer code ');
ylabel('BER');
xlabel('EbN0 Ratio');
break
end
end
%BERp(b,:)=BERVec(1,:);
save('BPSK_sim_3.mat','EbN0','BER_QPSK');
load('BPSK_sim_3.mat');
end
🎉3 参考文献
[1]冯志霞. 卫星通信DVB-S/S2信号识别系统设计[D].国防科技大学,2018.
部分理论引用网络文献,若有侵权联系博主删除。



















