파형 생성하기
구성 객체 또는 System object 만들기에서 설명하는 필요한 객체를 만든 후 해당 객체를 사용하여 원하는 파형을 생성할 수 있습니다. 객체 파라미터를 변경하고 파형을 플로팅합니다.
이 예제의 각 섹션에서는 다음을 수행합니다.
- 형식별 구성 객체나 System object™를 만듭니다. 
- 파형 생성을 위해 정보 비트로 구성된 열 벡터 또는 그러한 열 벡터의 셀형 배열을 만듭니다. 
- 형식별 파형을 생성하고 플로팅합니다. 
DVB-S2 파형 생성하기
이 예제에서는 LDPC 패리티 행렬이 포함된 MAT 파일을 사용합니다. 경로에 MAT 파일이 없는 경우 MATLAB 명령 프롬프트에 다음 코드를 입력하여 MAT 파일을 다운로드하고 압축을 풉니다.
if ~exist('dvbs2xLDPCParityMatrices.mat','file') if ~exist('s2xLDPCParityMatrices.zip','file') url = 'https://ssd.mathworks.com/supportfiles/spc/satcom/DVB/s2xLDPCParityMatrices.zip'; websave('s2xLDPCParityMatrices.zip',url); unzip('s2xLDPCParityMatrices.zip'); end addpath('s2xLDPCParityMatrices'); end
DVB-S2(Digital Video Broadcasting Satellite Second Generation) System object와 파형을 만듭니다. Name,Value 쌍을 사용하여 송신 파라미터를 지정합니다.
s2WaveGen = dvbs2WaveformGenerator("NumInputStreams",2,"MODCOD",[6 19],"RolloffFactor",0.25 ); disp(s2WaveGen)
  dvbs2WaveformGenerator with properties:
           StreamFormat: "TS"
        NumInputStreams: 2
               FECFrame: "normal"
                 MODCOD: [6 19]
                    DFL: 15928
          ScalingMethod: "outer radius as 1"
              HasPilots: 0
          RolloffFactor: 0.2500
    FilterSpanInSymbols: 10
       SamplesPerSymbol: 4
                  ISSYI: false
  Show all properties
시뮬레이션 파라미터를 초기화합니다.
numFramesPerStream = 1; % Number of PL frames generated per stream syncBits = [0 1 0 0 0 1 1 1]'; % Sync byte of TS packet (47 HEX) pktLen = 1496; % User packet (UP) length without sync bits is 1496 numPktsPerStream = s2WaveGen.MinNumPackets*numFramesPerStream; % Number of packets required to fill data field per stream
스트림당 전송 스트림(TS) 패킷을 생성합니다.
data = cell(s2WaveGen.NumInputStreams,1); for i = 1:s2WaveGen.NumInputStreams txRawPkts = randi([0 1],pktLen,numPktsPerStream(i)); txPkts = [repmat(syncBits,1,numPktsPerStream(i)); txRawPkts]; data{i} = txPkts(:); end
정보 비트 data를 사용하여 DVB-S2 시간 영역 파형을 생성합니다.
txWaveform = s2WaveGen(data);
생성된 DVB-S2 시간 영역 파형의 신호 스펙트럼을 표시하는 스펙트럼 분석기 System object를 만듭니다.
BW = 36e6; % Typical satellite channel bandwidth Fsym = BW/(1+s2WaveGen.RolloffFactor); Fsamp = Fsym*s2WaveGen.SamplesPerSymbol; spectrum = spectrumAnalyzer('SampleRate',Fsamp); spectrum(txWaveform); release(spectrum);

DVB-S2X 파형 생성하기
이 예제에서는 LDPC 패리티 행렬이 포함된 MAT 파일을 사용합니다. 경로에 MAT 파일이 없는 경우 MATLAB 명령 프롬프트에 다음 코드를 입력하여 MAT 파일을 다운로드하고 압축을 풉니다.
if ~exist('dvbs2xLDPCParityMatrices.mat','file') if ~exist('s2xLDPCParityMatrices.zip','file') url = 'https://ssd.mathworks.com/supportfiles/spc/satcom/DVB/s2xLDPCParityMatrices.zip'; websave('s2xLDPCParityMatrices.zip',url); unzip('s2xLDPCParityMatrices.zip'); end addpath('s2xLDPCParityMatrices'); end
DVB-S2X(Digital Video Broadcasting Satellite Second Generation extended) System object와 파형을 만듭니다.
s2xWaveGen = dvbs2xWaveformGenerator % DVB-S2X object with default propertiess2xWaveGen = 
  dvbs2xWaveformGenerator with properties:
           StreamFormat: "TS"
         HasTimeSlicing: false
        NumInputStreams: 1
         PLSDecimalCode: 132
                    DFL: 18448
      PLScramblingIndex: 0
          RolloffFactor: 0.3500
    FilterSpanInSymbols: 10
       SamplesPerSymbol: 4
  Show all properties
시뮬레이션 파라미터를 초기화합니다.
numFrames = 3; % Number of PL frames generated per stream syncBits = [0 1 0 0 0 1 1 1]'; % Sync byte of TS packet (47 HEX) pktLen = 1496; % User packet (UP) length without sync bits is 1496 numPkts = s2xWaveGen.MinNumPackets*numFrames; % Number of packets required to fill data field per stream
스트림당 전송 스트림(TS) 패킷을 생성합니다.
txRawPkts = randi([0 1], pktLen, numPkts); txPkts = [repmat(syncBits, 1, numPkts);txRawPkts]; data = txPkts(:);
정보 비트 data를 사용하여 DVB-S2X 시간 영역 파형을 생성합니다.
txWaveform = s2xWaveGen(data);
DVB-RCS2 파형 생성하기
DVB-RCS2(Digital Video Broadcasting Second Generation Return Channel over Satellite) System object와 파형을 만듭니다. Name,Value 쌍을 사용하여 송신 파라미터를 지정합니다.
wg = dvbrcs2WaveformGenerator("WaveformID",2,"PreBurstGuardLength",6,"SamplesPerSymbol",6); disp(wg)
  dvbrcs2WaveformGenerator with properties:
      TransmissionFormat: "TC-LM"
             ContentType: "traffic"
        IsCustomWaveform: false
              WaveformID: 2
     PreBurstGuardLength: 6
    PostBurstGuardLength: 0
     FilterSpanInSymbols: 10
        SamplesPerSymbol: 6
   Read-only:
          FramePDULength: 80
프레임 프로토콜 데이터 단위(PDU)를 생성합니다.
framePDU = randi([0 1],wg.FramePDULength,1);
DVB-RCS2 버스트 샘플을 생성합니다.
txWaveform = wg(framePDU);
CCSDS HPE TM 파형 생성하기
길이가 각각 1024바이트인 10개의 전송 프레임에 대한 CCSDS HPE TM 파형을 생성합니다.
rng("default")
numTF = 10;
numBytesInTF = 1024;
dataTF = randi([0 1],numBytesInTF*8*numTF,1);CCSDS HPE 파형 생성기 System object를 만들고 속성을 설정합니다.
hpeWaveform = ccsdsHPEWaveformGenerator;
hpeWaveform.TransmissionType = "telemetry";
hpeWaveform.PPMOrder = 4;
hpeWaveform.NumRows = 36;
hpeWaveform.NumBytesInTransferFrame = numBytesInTF;TM 파형을 생성합니다.
txOut = hpeWaveform(dataTF);
CCSDS TM 파형 생성하기
CCSDS(Consultative Committee for Space Data Systems) TM(Telemetry) System object와 파형을 만듭니다.
객체 ccsdsTMWaveformGenerator는 WaveformSource 속성에 대한 입력 유형에 따라 다음 두 가지 CCSDS TM 표준을 지원합니다.
- CCSDS TM synchronization and channel coding standard (CCSDS 131.0-B-3) 
- CCSDS flexible advanced coding and modulation scheme for high rate telemetry standard (CCSDS 131.2-B-1) 
이 객체의 디폴트 표준은 CCSDS TM 동기화 및 채널 코딩입니다.
System object를 만들고 CCSDS TM 동기화 및 채널 코딩 방식에 대한 파형 생성하기
tmWaveGen = ccsdsTMWaveformGenerator % CCSDS TM object with default propertiestmWaveGen = 
  ccsdsTMWaveformGenerator with properties:
          WaveformSource: "synchronization and channel coding"
           HasRandomizer: true
                  HasASM: true
               PCMFormat: "NRZ-L"
   Channel coding
           ChannelCoding: "RS"
         RSMessageLength: 223
     RSInterleavingDepth: 1
    IsRSMessageShortened: false
   Digital modulation and filter
              Modulation: "QPSK"
      PulseShapingFilter: "root raised cosine"
           RolloffFactor: 0.3500
     FilterSpanInSymbols: 10
        SamplesPerSymbol: 10
  Show all properties
bits = randi([0 1], tmWaveGen.NumInputBits,1); % Input information bits
waveform = tmWaveGen(bits);생성된 CCSDS TM 시간 영역 파형의 주파수 스펙트럼을 표시하는 스펙트럼 분석기 System object를 만듭니다.
BW = 36e6; % Typical satellite channel bandwidth Fsamp = tmWaveGen.SamplesPerSymbol*BW; scope = spectrumAnalyzer('SampleRate',Fsamp,'AveragingMethod','Exponential'); scope(waveform)

System object를 만들고 CCSDS TM Flexible Advanced Coding and Modulation Scheme을 따르는 파형 생성하기
이 예제에서는 점 표기법을 사용하여 송신 파라미터를 지정합니다.
tmWaveGen = ccsdsTMWaveformGenerator; tmWaveGen.WaveformSource = "flexible advanced coding and modulation"; tmWaveGen.ACMFormat = 14; % 16APSK
한 물리 계층 프레임 내에 있는 전송 프레임 수를 계산합니다. 정보 비트 data를 사용하여 파형을 생성합니다.
NumTFInOnePLFrame = tmWaveGen.MinNumTransferFrames*16  % One PL frame consists of 16 codewords, as specified in the standardNumTFInOnePLFrame = 192
waveform = []; % Initialize waveform as null % Generate waveform for iTF = 1:NumTFInOnePLFrame bits = randi([0 1], tmWaveGen.NumInputBits, 1); waveform = [waveform;tmWaveGen(bits)]; end
CCSDS TC 파형 생성하기
CCSDS(Consultative Committee for Space Data Systems) TC(Telecommand) 구성 객체와 파형을 만듭니다. Name,Value 쌍을 사용하여 송신 파라미터를 지정합니다.
cfg = ccsdsTCConfig ('ChannelCoding', "LDPC", 'LDPCCodewordLength', 512); TFLength = 12; % Transfer frame length bits = randi([0 1],8*TFLength,1); % Bits in TC transfer frame waveform = ccsdsTCWaveform(bits,cfg);
생성된 CCSDS TC 파형의 신호 스펙트럼을 표시하는 스펙트럼 분석기 System object를 만듭니다.
scope = spectrumAnalyzer; scope.SampleRate = cfg.SamplesPerSymbol*cfg.SymbolRate; scope(waveform)

참고 문헌
[1] TM Synchronization and Channel Coding. Recommendation for Space Data System Standards. CCSDS 131.0-B-3. Blue Book. Issue 3. Washington, D.C.: CCSDS, September 2017.
[2] Flexible Advanced Coding and Modulation Scheme for High Rate Telemetry Applications. Recommendation for Space Data System Standards. CCSDS 131.2-B-1. Blue Book. Issue 1. Washington, D.C.: CCSDS, March 2012.
참고 항목
객체
- dvbs2WaveformGenerator|- dvbs2xWaveformGenerator|- dvbrcs2WaveformGenerator|- ccsdsHPEWaveformGenerator|- ccsdsTMWaveformGenerator|- ccsdsTCConfig