"ืžื ื™ืคืกื˜ ืœืžืชื›ื ืชื™ื ืžืชื—ื™ืœื™ื ืžื”ืชืžื—ื•ื™ื•ืช ืงืฉื•ืจื•ืช" ืื• ืื™ืš ื”ื’ืขืชื™ ืœื ืงื•ื“ื” ื”ื–ื• ื‘ื—ื™ื™ื

ื”ืžืืžืจ ืฉืœื™ ื”ื™ื•ื ื”ื•ื ืžื—ืฉื‘ื•ืช ื‘ืงื•ืœ ืจื ืฉืœ ืื“ื ืฉืขืฉื” ืืช ื“ืจืš ื”ืชื›ื ื•ืช ื›ืžืขื˜ ื‘ืžืงืจื” (ืื ื›ื™ ื‘ืื•ืคืŸ ื˜ื‘ืขื™).

ื›ืŸ, ืื ื™ ืžื‘ื™ืŸ ืฉื”ื ื™ืกื™ื•ืŸ ืฉืœื™ ื”ื•ื ืจืง ื”ื—ื•ื•ื™ื” ืฉืœื™, ืื‘ืœ ื ืจืื” ืœื™ ืฉื”ื•ื ืžืฉืชืœื‘ ื”ื™ื˜ื‘ ื‘ืžื’ืžื” ื”ื›ืœืœื™ืช. ื™ืชืจื” ืžื›ืš, ื”ื ื™ืกื™ื•ืŸ ื”ืžืชื•ืืจ ืœื”ืœืŸ ืžืชื™ื™ื—ืก ื™ื•ืชืจ ืœืชื—ื•ื ื”ืคืขื™ืœื•ืช ื”ืžื“ืขื™ืช, ืื‘ืœ ืžื” ืœืขื–ืื–ืœ ืœื ืฆื•ื—ืง - ื–ื” ื™ื›ื•ืœ ืœื”ื™ื•ืช ืฉื™ืžื•ืฉื™ ื‘ื—ื•ืฅ.

"ืžื ื™ืคืกื˜ ืœืžืชื›ื ืชื™ื ืžืชื—ื™ืœื™ื ืžื”ืชืžื—ื•ื™ื•ืช ืงืฉื•ืจื•ืช" ืื• ืื™ืš ื”ื’ืขืชื™ ืœื ืงื•ื“ื” ื”ื–ื• ื‘ื—ื™ื™ื
ืžืงื•ืจ: https://xkcd.com/664/

ื‘ืื•ืคืŸ ื›ืœืœื™, ืžื•ืงื“ืฉ ืœื›ืœ ื”ืชืœืžื™ื“ื™ื ื‘ื”ื•ื•ื” ืžืชืœืžื™ื“ ืœืฉืขื‘ืจ!

ืฆื™ืคื™ื•ืช

ื›ืฉืกื™ื™ืžืชื™ ืืช ื”ืชื•ืืจ ื”ืจืืฉื•ืŸ ืฉืœื™ ื‘ื˜ื›ื ื•ืœื•ื’ื™ื•ืช ืžื™ื“ืข ื•ืžืขืจื›ื•ืช ืชืงืฉื•ืจืช ื‘-2014, ืœื ื™ื“ืขืชื™ ื›ืžืขื˜ ื›ืœื•ื ืขืœ ืขื•ืœื ื”ืชื›ื ื•ืช. ื›ืŸ, ื›ืžื• ืจื‘ื™ื ืื—ืจื™ื, ืœืงื—ืชื™ ืืช ื”ื ื•ืฉื "ืžื“ืขื™ ื”ืžื—ืฉื‘" ื‘ืฉื ื” ื”ืจืืฉื•ื ื” ืฉืœื™ - ืื‘ืœ, ืืœื•ื”ื™ื, ื–ื” ื”ื™ื” ื‘ืฉื ื” ื”ืจืืฉื•ื ื” ืฉืœื™! ื–ื” ื”ื™ื” ื ืฆื—!

ื‘ืื•ืคืŸ ื›ืœืœื™, ืœื ืฆื™ืคื™ืชื™ ืœืžืฉื”ื• ืฉื•ื ื” ื‘ืžื™ื•ื—ื“ ืžืชื•ืืจ ืจืืฉื•ืŸ, ื•ื›ืฉื ื›ื ืกืชื™ ืœืชื›ื ื™ืช ืœืชื•ืืจ ืฉื ื™ "ืชืงืฉื•ืจืช ื•ืขื™ื‘ื•ื“ ืื•ืชื•ืช" ื”ืžื›ื•ืŸ ื”ื’ืจืžื ื™-ืจื•ืกื™ ืœื˜ื›ื ื•ืœื•ื’ื™ื•ืช ื—ื“ืฉื•ืช.

ืืš ืœืฉื•ื•ื...

ื”ื™ื™ื ื• ืจืง ื”ืงืœื™ื˜ื” ื”ืฉื ื™ื™ื”, ื•ื”ื—ื‘ืจ'ื” ืžื”ืจืืฉื•ืŸ ืขื“ื™ื™ืŸ ืืจื–ื• ืžื–ื•ื•ื“ื•ืช ืœื’ืจืžื ื™ื” ื”ืจื—ื•ืงื” (ื”ื”ืชืžื—ื•ืช ื ืžืฉื›ืช ืฉื™ืฉื” ื—ื•ื“ืฉื™ื ื‘ืฉื ื” ื”ืฉื ื™ื™ื” ืœืชื•ืืจ ืฉื ื™). ื‘ืžื™ืœื™ื ืื—ืจื•ืช, ืื™ืฉ ืžื”ืžืขื’ืœ ื”ืงืจื•ื‘ ืขื•ื“ ืœื ื ืชืงืœ ื‘ืจืฆื™ื ื•ืช ื‘ืฉื™ื˜ื•ืช ื”ื—ื™ื ื•ืš ื”ืื™ืจื•ืคื™, ื•ืœื ื”ื™ื” ืžื™ ืœืฉืื•ืœ ืขืœ ื”ืคืจื˜ื™ื.

ื‘ืฉื ื” ื”ืจืืฉื•ื ื” ืฉืœื ื•, ื›ืžื•ื‘ืŸ, ื”ื™ื• ืœื ื• ืกื•ื’ื™ื ืฉื•ื ื™ื ืฉืœ ืคืจืงื˜ื™ืงื•ืช, ืฉื‘ื”ืŸ ื‘ื“ืจืš ื›ืœืœ ื”ืฆื™ืขื• ืœื ื• ื‘ืื•ืคืŸ ื“ืžื•ืงืจื˜ื™ ื‘ื—ื™ืจื” ื‘ื™ืŸ ื›ืชื™ื‘ืช ืกืงืจื™ืคื˜ื™ื (ื‘ืขื™ืงืจ ื‘ืฉืคืช MATLAB) ืœื‘ื™ืŸ ืฉื™ืžื•ืฉ ื‘ืžืžืฉืงื™ GUI ืฉื•ื ื™ื ืžืื•ื“ ืžื™ื•ื—ื“ื™ื (ื‘ืžื•ื‘ืŸ ืฉืœืœื ื›ืชื™ื‘ืช ืกืงืจื™ืคื˜ื™ื - ืกื™ืžื•ืœืฆื™ื” ืกื‘ื™ื‘ื•ืช ื“ื•ื’ืžื ื•ืช).

"ืžื ื™ืคืกื˜ ืœืžืชื›ื ืชื™ื ืžืชื—ื™ืœื™ื ืžื”ืชืžื—ื•ื™ื•ืช ืงืฉื•ืจื•ืช" ืื• ืื™ืš ื”ื’ืขืชื™ ืœื ืงื•ื“ื” ื”ื–ื• ื‘ื—ื™ื™ื

ืžื™ื•ืชืจ ืœืฆื™ื™ืŸ ืฉืื ื—ื ื•, ื”ืžืืกื˜ืจื™ื ื”ืขืชื™ื“ื™ื™ื ื‘ืžื“ืขื™ื, ืžืชื•ืš ื˜ื™ืคืฉื•ืช ื”ื ืขื•ืจื™ื ืฉืœื ื•, ื ืžื ืขื ื• ืžืœื›ืชื•ื‘ ืงื•ื“ ื›ืžื• ืืฉ. ื”ื ื”, ืœืžืฉืœ, Simulink ืž- MathWorks: ื”ื ื” ื”ื‘ืœื•ืงื™ื, ื”ื ื” ื”ื—ื™ื‘ื•ืจื™ื, ื”ื ื” ื›ืœ ืžื™ื ื™ ื”ื’ื“ืจื•ืช ื•ืžืชื’ื™ื.

ื”ืฉืงืคื” ืžืงื•ืจื™ืช ื•ืžื•ื‘ื ืช ืœืื“ื ืฉืขื‘ื“ ื‘ืขื‘ืจ ื‘ืชื›ื ื•ืŸ ืžืขื’ืœื™ื ื•ื”ื ื“ืกืช ืžืขืจื›ื•ืช!

"ืžื ื™ืคืกื˜ ืœืžืชื›ื ืชื™ื ืžืชื—ื™ืœื™ื ืžื”ืชืžื—ื•ื™ื•ืช ืงืฉื•ืจื•ืช" ืื• ืื™ืš ื”ื’ืขืชื™ ืœื ืงื•ื“ื” ื”ื–ื• ื‘ื—ื™ื™ื
ืžืงื•ืจ: https://ch.mathworks.com/help/comm/examples/parallel-concatenated-convolutional-coding-turbo-codes.html

ืื– ื–ื” ื ืจืื” ืœื ื•...

ื”ืžืฆื™ืื•ืช

ืื—ืช ื”ืขื‘ื•ื“ื•ืช ื”ืžืขืฉื™ื•ืช ืฉืœ ื”ืกืžืกื˜ืจ ื”ืจืืฉื•ืŸ ื”ื™ื™ืชื” ืคื™ืชื•ื— ืžืฉื“ืจ ืื•ืชื•ืช OFDM ื‘ืžืกื’ืจืช ื”ื ื•ืฉื "ืฉื™ื˜ื•ืช ืžื™ื“ื•ืœ ื•ืื•ืคื˜ื™ืžื™ื–ืฆื™ื”". ื”ืจืขื™ื•ืŸ ืžื•ืฆืœื— ืžืื•ื“: ื”ื˜ื›ื ื•ืœื•ื’ื™ื” ืขื“ื™ื™ืŸ ืจืœื•ื•ื ื˜ื™ืช ื•ื“ื™ ืคื•ืคื•ืœืจื™ืช ื‘ืฉืœ ื”ืฉื™ืžื•ืฉ ื‘ื”, ืœืžืฉืœ, ื‘ืจืฉืชื•ืช Wi-Fi ื•-LTE/LTE-A (ื‘ืฆื•ืจืช OFDMA). ื–ื” ื”ื“ื‘ืจ ื”ื˜ื•ื‘ ื‘ื™ื•ืชืจ ืขื‘ื•ืจ ืžืืกื˜ืจื™ื ืœืชืจื’ืœ ืืช ื›ื™ืฉื•ืจื™ื”ื ื‘ืขื™ืฆื•ื‘ ืžืขืจื›ื•ืช ื˜ืœืงื•ื.

"ืžื ื™ืคืกื˜ ืœืžืชื›ื ืชื™ื ืžืชื—ื™ืœื™ื ืžื”ืชืžื—ื•ื™ื•ืช ืงืฉื•ืจื•ืช" ืื• ืื™ืš ื”ื’ืขืชื™ ืœื ืงื•ื“ื” ื”ื–ื• ื‘ื—ื™ื™ื

ื•ืขื›ืฉื™ื• ื ื™ืชื ื•ืช ืœื ื• ื›ืžื” ืืคืฉืจื•ื™ื•ืช ืฉืœ ืžืคืจื˜ ื˜ื›ื ื™ ืขื ืคืจืžื˜ืจื™ ืžืกื’ืจืช ื‘ืœืชื™ ืžืขืฉื™ื™ื ื‘ืขืœื™ืœ (ื›ื“ื™ ืœื ืœื—ืคืฉ ืคืชืจื•ืŸ ื‘ืื™ื ื˜ืจื ื˜), ื•ืื ื—ื ื• ืžืชื ืคืœื™ื ืขืœ ื”ืกื™ืžื•ืœื ืง ืฉื›ื‘ืจ ื”ื•ื–ื›ืจ... ื•ืื ื—ื ื• ืžืงื‘ืœื™ื ืžื›ื” ื‘ืจืืฉ ืขื ืงื•ืžืงื•ื ืชื” ืฉืœ ื”ืžืฆื™ืื•ืช:

  • ื›ืœ ื‘ืœื•ืง ืจืฆื•ืฃ ื‘ื”ืจื‘ื” ืคืจืžื˜ืจื™ื ืœื ื™ื“ื•ืขื™ื, ืฉืžืคื—ื™ื“ ืœืฉื ื•ืช ืื•ืชื ื‘ื›ืฃ ืจื’ืœ.
  • ื”ืžื ื™ืคื•ืœืฆื™ื•ืช ืขื ื”ืžืกืคืจื™ื ืฆืจื™ื›ื•ืช ืœื”ื™ืขืฉื•ืช, ื›ืš ื ืจืื”, ืคืฉื•ื˜ื•ืช, ืื‘ืœ ืขื“ื™ื™ืŸ ืฆืจื™ืš ืœื”ืชืขืกืง ื—ืœื™ืœื”.
  • ืžื›ื•ื ื•ืช ืงืชื“ืจืœื” ืžืื˜ื•ืช ื‘ืื•ืคืŸ ื ื™ื›ืจ ืžื”ืฉื™ืžื•ืฉ ื”ืชื–ื–ื™ืชื™ ื‘-GUI, ืืคื™ืœื• ื‘ืฉืœื‘ ื”ื’ืœื™ืฉื” ื‘ืกืคืจื™ื•ืช ืฉืœ ื‘ืœื•ืงื™ื ื–ืžื™ื ื™ื.
  • ื›ื“ื™ ืœืกื™ื™ื ืžืฉื”ื• ื‘ื‘ื™ืช, ืืชื” ืฆืจื™ืš ืืช ืื•ืชื• Simulink. ื•ืœืžืขืฉื”, ืื™ืŸ ื—ืœื•ืคื•ืช.

ื›ืŸ, ื‘ืกื•ืคื• ืฉืœ ื“ื‘ืจ, ื›ืžื•ื‘ืŸ, ืกื™ื™ืžื ื• ืืช ื”ืคืจื•ื™ืงื˜, ืื‘ืœ ื”ืฉืœืžื ื• ืื•ืชื• ื‘ื ืฉื™ืคื” ืจื•ืขืฉืช ืฉืœ ื”ืงืœื”.

ืขื‘ืจ ื–ืžืŸ ืžื”, ื•ื”ื’ืขื ื• ืœืกื•ืฃ ื”ืฉื ื” ื”ืจืืฉื•ื ื” ืฉืœ ื”ืชื•ืืจ ื”ืฉื ื™. ื›ืžื•ืช ืฉื™ืขื•ืจื™ ื”ื‘ื™ืช ื‘ืืžืฆืขื•ืช GUI ื”ื—ืœื” ืœืจื“ืช ื‘ืื•ืคืŸ ื™ื—ืกื™ ืขื ื”ืขืœื™ื™ื” ื‘ืฉื™ืขื•ืจ ื”ืžืงืฆื•ืขื•ืช ื”ื’ืจืžื ื™ื™ื, ืœืžืจื•ืช ืฉืขื“ื™ื™ืŸ ืœื ื”ื’ื™ืขื” ืœื ืงื•ื“ืช ืฉื™ื ื•ื™ ืคืจื“ื™ื’ืžื”. ืจื‘ื™ื ืžืื™ืชื ื•, ื›ื•ืœืœ ืื ื™, ืฉื”ืชื’ื‘ืจื• ืขืœ ื”ืžืฉืจืขืช ื”ื ื™ื›ืจืช ืฉืœื ื• ืœื‘ื ื•ืช, ื”ืฉืชืžืฉื• ื™ื•ืชืจ ื•ื™ื•ืชืจ ื‘-Matlab ื‘ืคืจื•ื™ืงื˜ื™ื ื”ืžื“ืขื™ื™ื ืฉืœื ื• (ืื ื›ื™ ื‘ืฆื•ืจื” ืฉืœ ื›ืœื™ื), ื•ืœื ื‘-Simulink ื”ืžื•ื›ืจ ืœื›ืื•ืจื”.

ื”ื ืงื•ื“ื” ื‘ืกืคืงื•ืช ืฉืœื ื• ื”ื™ื™ืชื” ื”ืžืฉืคื˜ ืฉืœ ืื—ื“ ืžืชืœืžื™ื“ื™ ืฉื ื” ื‘' (ื”ื ื‘ื“ื™ื•ืง ื—ื–ืจื• ืœืจื•ืกื™ื” ืขื“ ืื–):

  • ืชืฉื›ื—ื•, ืœืคื—ื•ืช ืœืžืฉืš ื”ื”ืชืžื—ื•ืช, ืž-Similink, MathCad ื•ืขื•ื“ LabView - ืžืขืœ ื”ื’ื‘ืขื” ื”ื›ืœ ื›ืชื•ื‘ ื‘-MATLAB, ืชื•ืš ืฉื™ืžื•ืฉ ื‘-MatLab ืขืฆืžื• ืื• ื‘"ื’ืจืกืช" ื”-Octave ื”ื—ื™ื ืžื™ืช ืฉืœื•.

ื”ืืžื™ืจื” ื”ืชื‘ืจืจื” ื›ื ื›ื•ื ื” ื‘ื—ืœืงื”: ื‘ืื™ืœืžื ืื• ื’ื ื”ืžื—ืœื•ืงืช ืขืœ ื‘ื—ื™ืจืช ื”ื›ืœื™ื ืœื ื ืคืชืจื” ืœื—ืœื•ื˜ื™ืŸ. ื ื›ื•ืŸ, ื”ื‘ื—ื™ืจื” ื”ื™ื™ืชื” ื‘ืขื™ืงืจ ื‘ื™ืŸ MATLAB, Python ื•-C.

ื‘ืื•ืชื• ื™ื•ื ื”ืชืจื’ืฉืชื™ ืžื”ืชืจื’ืฉื•ืช ื˜ื‘ืขื™ืช: ื”ืื ืœื ื›ื“ืื™ ืœื™ ืœื”ืขื‘ื™ืจ ืืช ื”ื—ืœืง ืฉืœื™ ื‘ืžื•ื“ืœ ืžืฉื“ืจ ื”-OFDM ืœืฆื•ืจืช ืกืงืจื™ืคื˜? ืกืชื ื‘ืฉื‘ื™ืœ ื”ื›ื™ืฃ.

ื•ื”ืชื—ืœืชื™ ืœืขื‘ื•ื“.

ืฆืขื“ ืื—ืจ ืฆืขื“

ื‘ืžืงื•ื ื—ื™ืฉื•ื‘ื™ื ืชื™ืื•ืจื˜ื™ื™ื, ืื ื™ ืคืฉื•ื˜ ืืชืŸ ืงื™ืฉื•ืจ ืœื–ื” ืžืืžืจ ืžืฆื•ื™ืŸ 2011 ืž tgx ื•ืขืœ ื”ืžื’ืœืฉื•ืช ืฉื›ื‘ื” ืคื™ื–ื™ืช LTE ืคืจื•ืคืกื•ืจื™ื ืžื™ืฉืœ-ื˜ื™ืœื” (TU Ilmenau). ืื ื™ ื—ื•ืฉื‘ ืฉื–ื” ื™ืกืคื™ืง.

"ืื–," ื—ืฉื‘ืชื™, "ื‘ื•ื ื ื—ื–ื•ืจ, ืžื” ืื ื—ื ื• ื”ื•ืœื›ื™ื ืœื“ื’ืžืŸ?"
ืื ื—ื ื• ื ื“ื’ืžืŸ ืžื—ื•ืœืœ ืžืกื’ืจื•ืช OFDM (ืžื—ื•ืœืœ ืžืกื’ืจื•ืช OFDM).

ืžื” ื–ื” ื™ื›ืœื•ืœ:

  • ืกืžืœื™ ืžื™ื“ืข
  • ืื•ืชื•ืช ื˜ื™ื™ืก
  • ืืคืกื™ื (DC)

ืžืžื” (ืœืžืขืŸ ื”ืคืฉื˜ื•ืช) ืื ื• ืžื•ืคืฉื˜ื™ื:

  • ืžืžื•ื“ืœื™ื ืฉืœ ืงื™ื“ื•ืžืช ืžื—ื–ื•ืจื™ืช (ืื ืืชื” ื™ื•ื“ืข ืืช ื”ื™ืกื•ื“ื•ืช, ื”ื•ืกืคื” ืœื ืชื”ื™ื” ืงืฉื”)

"ืžื ื™ืคืกื˜ ืœืžืชื›ื ืชื™ื ืžืชื—ื™ืœื™ื ืžื”ืชืžื—ื•ื™ื•ืช ืงืฉื•ืจื•ืช" ืื• ืื™ืš ื”ื’ืขืชื™ ืœื ืงื•ื“ื” ื”ื–ื• ื‘ื—ื™ื™ื

ื“ื™ืื’ืจืžืช ื‘ืœื•ืงื™ื ืฉืœ ื”ืžื•ื“ืœ ื”ื ื‘ื“ืง. ื ืขืฆื•ืจ ื‘ื‘ืœื•ืง FFT (IFFT) ื”ืคื•ืš. ืœื”ืฉืœืžืช ื”ืชืžื•ื ื” ื›ืœ ืื—ื“ ื™ื›ื•ืœ ืœื”ืžืฉื™ืš ืืช ื”ืฉืืจ ื‘ืขืฆืžื• - ื”ื‘ื˜ื—ืชื™ ืœืžื•ืจื™ื ืžื”ืžื—ืœืงื” ืœื”ืฉืื™ืจ ืžืฉื”ื• ืœืชืœืžื™ื“ื™ื.

ื‘ื•ืื• ื ื’ื“ื™ืจ ืื•ืชื ืœืขืฆืžื ื•. ืชืจื’ื™ืœ:

  • ืžืกืคืจ ืงื‘ื•ืข ืฉืœ ืกืคืงื™ ืžืฉื ื”;
  • ืื•ืจืš ืžืกื’ืจืช ืงื‘ื•ืข;
  • ืขืœื™ื ื• ืœื”ื•ืกื™ืฃ ืืคืก ืื—ื“ ื‘ืืžืฆืข ื•ื–ื•ื’ ืืคืกื™ื ื‘ืชื—ื™ืœืช ื•ื‘ืกื•ืฃ ื”ืคืจื™ื™ื (ืกื”"ื›, 5 ื—ืœืงื™ื);
  • ืกืžืœื™ ืžื™ื“ืข ืžืื•ืคื ื™ื ื‘ืืžืฆืขื•ืช M-PSK ืื• M-QAM, ื›ืืฉืจ M ื”ื•ื ืกื“ืจ ื”ืืคื ื•ืŸ.

ื ืชื—ื™ืœ ืขื ื”ืงื•ื“.

ืืช ื”ืชืกืจื™ื˜ ื›ื•ืœื• ื ื™ืชืŸ ืœื”ื•ืจื™ื“ ืž ืงืฉืจ.

ื‘ื•ืื• ื ื’ื“ื™ืจ ืืช ืคืจืžื˜ืจื™ ื”ืงืœื˜:

clear all; close all; clc

M = 4; % e.g. QPSK 
N_inf = 16; % number of subcarriers (information symbols, actually) in the frame
fr_len = 32; % the length of our OFDM frame
N_pil = fr_len - N_inf - 5; % number of pilots in the frame
pilots = [1; j; -1; -j]; % pilots (QPSK, in fact)

nulls_idx = [1, 2, fr_len/2, fr_len-1, fr_len]; % indexes of nulls

ื›ืขืช ืื ื• ืงื•ื‘ืขื™ื ืืช ื”ืžื“ื“ื™ื ืฉืœ ืกืžืœื™ ืžื™ื“ืข, ื•ืžืงื‘ืœื™ื ืืช ื”ื”ื ื—ื” ืฉืื•ืชื•ืช ื˜ื™ื™ืก ื—ื™ื™ื‘ื™ื ื‘ื”ื›ืจื— ืœืœื›ืช ืœืคื ื™ ื•/ืื• ืื—ืจื™ ืืคืกื™ื:

idx_1_start = 4;
idx_1_end = fr_len/2 - 2;

idx_2_start = fr_len/2 + 2;
idx_2_end =  fr_len - 3;

ืœืื—ืจ ืžื›ืŸ ื ื™ืชืŸ ืœืงื‘ื•ืข ืืช ื”ืžื™ืงื•ืžื™ื ื‘ืืžืฆืขื•ืช ื”ืคื•ื ืงืฆื™ื” linspace, ื”ืคื—ืชืช ื”ืขืจื›ื™ื ืœืงื˜ืŸ ืžื‘ื™ืŸ ื”ืžืกืคืจื™ื ื”ืฉืœืžื™ื ื”ืงืจื•ื‘ื™ื ื‘ื™ื•ืชืจ:

inf_idx_1 = (floor(linspace(idx_1_start, idx_1_end, N_inf/2))).'; 
inf_idx_2 = (floor(linspace(idx_2_start, idx_2_end, N_inf/2))).';

inf_ind = [inf_idx_1; inf_idx_2]; % simple concatenation

ื‘ื•ืื• ื ื•ืกื™ืฃ ืœื–ื” ืื™ื ื“ืงืกื™ื ืฉืœ ืืคืกื™ื ื•ื ืžื™ื™ืŸ:

%concatenation and ascending sorting
inf_and_nulls_idx = union(inf_ind, nulls_idx); 

ื‘ื”ืชืื ืœื›ืš, ืžื“ื“ื™ ืื•ืชื•ืช ื”ื˜ื™ื™ืก ื”ื ื›ืœ ื”ืฉืืจ:

%numbers in range from 1 to frame length 
% that don't overlape with inf_and_nulls_idx vector
pilot_idx = setdiff(1:fr_len, inf_and_nulls_idx); 

ืขื›ืฉื™ื• ื‘ื•ืื• ื ื‘ื™ืŸ ืืช ืื•ืชื•ืช ื”ื˜ื™ื™ืก.

ื™ืฉ ืœื ื• ืชื‘ื ื™ืช (ืžืฉืชื ื” ื˜ื™ื™ืกื™ื), ื•ื ื ื™ื— ืฉืื ื—ื ื• ืจื•ืฆื™ื ืคื™ื™ืœื•ื˜ื™ื ืžื”ืชื‘ื ื™ืช ื”ื–ื• ื™ื•ื›ื ืกื• ืœืžืกื’ืจืช ืฉืœื ื• ื‘ืจืฆืฃ. ื›ืžื•ื‘ืŸ ืฉื ื™ืชืŸ ืœืขืฉื•ืช ื–ืืช ื‘ืœื•ืœืื”. ืื• ืฉืืชื” ื™ื›ื•ืœ ืœืฉื—ืง ืงืฆืช ืžืกื•ื‘ืš ืขื ืžื˜ืจื™ืฆื•ืช - ืœืžืจื‘ื” ื”ืžื–ืœ MATLAB ืžืืคืฉืจ ืœืš ืœืขืฉื•ืช ื–ืืช ื‘ื ื•ื—ื•ืช ืžืกืคืงืช.

ืจืืฉื™ืช, ื‘ื•ืื• ื ืงื‘ืข ื›ืžื” ืžื”ืชื‘ื ื™ื•ืช ื”ืœืœื• ืžืชืื™ืžื™ื ืœื—ืœื•ื˜ื™ืŸ ืœืžืกื’ืจืช:

pilots_len_psudo = floor(N_pil/length(pilots));

ืœืื—ืจ ืžื›ืŸ, ืื ื• ื™ื•ืฆืจื™ื ื•ืงื˜ื•ืจ ื”ืžื•ืจื›ื‘ ืžื”ืชื‘ื ื™ื•ืช ืฉืœื ื•:

% linear algebra tricks:
mat_1 = pilots*ones(1, pilots_len_psudo); % rank-one matrix
resh = reshape(mat_1, pilots_len_psudo*length(pilots),1); % vectorization

ื•ืื ื—ื ื• ืžื’ื“ื™ืจื™ื ื•ืงื˜ื•ืจ ืงื˜ืŸ ืฉืžื›ื™ืœ ืจืง ื—ืœืง ืžื”ืชื‘ื ื™ืช - ื”"ื–ื ื‘", ืฉืื™ื ื• ืžืชืื™ื ืœื—ืœื•ื˜ื™ืŸ ืœืžืกื’ืจืช:

tail_len = fr_len  - N_inf - length(nulls_idx) ...
                - length(pilots)*pilots_len_psudo; 
tail = pilots(1:tail_len); % "tail" of pilots vector

ืื ื—ื ื• ืžืงื‘ืœื™ื ื“ืžื•ื™ื•ืช ืคื™ื™ืœื•ื˜:

vec_pilots = [resh; tail]; % completed pilots vector that frame consists

ื”ื‘ื” ื ืขื‘ื•ืจ ืœืกืžืœื™ ืžื™ื“ืข, ื›ืœื•ืžืจ, ื ื™ืฆื•ืจ ืžืกืจ ื•ื ืฉื ื” ืื•ืชื•:

message = randi([0 M-1], N_inf, 1); % decimal information symbols

if M >= 16
    info_symbols = qammod(message, M, pi/4);
else
    info_symbols = pskmod(message, M, pi/4);
end 

ื”ื›ืœ ืžื•ื›ืŸ! ื”ืจื›ื‘ืช ื”ืžืกื’ืจืช:

%% Frame construction
frame = zeros(fr_len,1);
frame(pilot_idx) = vec_pilots;
frame(inf_ind) = info_symbols

ืืชื” ืืžื•ืจ ืœืงื‘ืœ ืžืฉื”ื• ื›ื–ื”:

frame =

   0.00000 + 0.00000i
   0.00000 + 0.00000i
   1.00000 + 0.00000i
  -0.70711 - 0.70711i
  -0.70711 - 0.70711i
   0.70711 + 0.70711i
   0.00000 + 1.00000i
  -0.70711 + 0.70711i
  -0.70711 + 0.70711i
  -1.00000 + 0.00000i
  -0.70711 + 0.70711i
  -0.70711 - 0.70711i
   0.00000 - 1.00000i
   0.70711 + 0.70711i
   1.00000 + 0.00000i
   0.00000 + 0.00000i
   0.00000 + 1.00000i
   0.70711 - 0.70711i
  -0.70711 + 0.70711i
  -1.00000 + 0.00000i
  -0.70711 + 0.70711i
   0.70711 + 0.70711i
   0.00000 - 1.00000i
  -0.70711 - 0.70711i
   0.70711 + 0.70711i
   1.00000 + 0.00000i
   0.70711 - 0.70711i
   0.00000 + 1.00000i
   0.70711 - 0.70711i
  -1.00000 + 0.00000i
   0.00000 + 0.00000i
   0.00000 + 0.00000i

"ืื•ืฉืจ!" โ€” ื—ืฉื‘ืชื™ ื‘ืฉื‘ื™ืขื•ืช ืจืฆื•ืŸ ื•ืกื’ืจืชื™ ืืช ื”ืžื—ืฉื‘ ื”ื ื™ื™ื“. ืœืงื— ืœื™ ื›ืžื” ืฉืขื•ืช ืœืขืฉื•ืช ื”ื›ืœ: ื›ื•ืœืœ ื›ืชื™ื‘ืช ืงื•ื“, ืœื™ืžื•ื“ ื›ืžื” ืคื•ื ืงืฆื™ื•ืช ืฉืœ Matlab ื•ื—ืฉื™ื‘ื” ื“ืจืš ื˜ืจื™ืงื™ื ืžืชืžื˜ื™ื™ื.

ืื™ืœื• ืžืกืงื ื•ืช ื”ืกืงืชื™ ืื–?

ืกื•ื‘ื™ื™ืงื˜ื™ื‘ื™:

  • ื›ืชื™ื‘ืช ืงื•ื“ ื ืขื™ืžื” ื•ื“ื•ืžื” ืœืฉื™ืจื”!
  • Scripting ื”ื™ื ืฉื™ื˜ืช ื”ืžื—ืงืจ ื”ื ื•ื—ื” ื‘ื™ื•ืชืจ ืœืชื—ื•ื ื”ืชืงืฉื•ืจืช ื•ืขื™ื‘ื•ื“ ืื•ืชื•ืช.

ืžึทื˜ึธืจึธื”:

  • ืื™ืŸ ืฆื•ืจืš ืœื™ืจื•ืช ื“ืจื•ืจื™ื ืžืชื•ืชื— (ืืœื ืื ื›ืŸ ืžื˜ืจื” ื—ื™ื ื•ื›ื™ืช ื›ื–ื• ื”ื™ื, ื›ืžื•ื‘ืŸ, ืฉื•ื•ื” ืืช ื–ื”): ื‘ืืžืฆืขื•ืช Simulink, ืœืงื—ื ื• ืขืœ ืขืฆืžื ื• ืœืคืชื•ืจ ื‘ืขื™ื” ืคืฉื•ื˜ื” ืขื ื›ืœื™ ืžืชื•ื—ื›ื.
  • ืžืžืฉืง ื”ืžืฉืชืžืฉ ื”ื•ื ื˜ื•ื‘, ืื‘ืœ ื˜ื•ื‘ ื™ื•ืชืจ ืœื”ื‘ื™ืŸ ืžื” ื›ืœื•ืœ "ืžืชื—ืช ืœืžื›ืกื” ื”ืžื ื•ืข".

ื•ืขื›ืฉื™ื•, ื‘ื”ื™ื•ืชื™ ืจื—ื•ืง ืžืœื”ื™ื•ืช ืกื˜ื•ื“ื ื˜, ืื ื™ ืจื•ืฆื” ืœื•ืžืจ ืืช ื”ื“ื‘ืจื™ื ื”ื‘ืื™ื ืœืื—ื•ื•ืช ื”ืกื˜ื•ื“ื ื˜ื™ื:

  • ืœืš ืขืœ ื–ื”!

ื ืกื” ืœื›ืชื•ื‘ ืงื•ื“, ื’ื ืื ื”ื•ื ื’ืจื•ืข ื‘ื”ืชื—ืœื”. ื‘ืชื›ื ื•ืช, ื›ืžื• ื‘ื›ืœ ืคืขื™ืœื•ืช ืื—ืจืช, ื”ื—ืœืง ื”ืงืฉื” ื‘ื™ื•ืชืจ ื”ื•ื ื”ื”ืชื—ืœื”. ื•ืขื“ื™ืฃ ืœื”ืชื—ื™ืœ ืžื•ืงื“ื ื™ื•ืชืจ: ืื ืืชื” ืžื“ืขืŸ ืื• ืืคื™ืœื• ืจืง ื˜ื›ื ืื™, ื‘ืžื•ืงื“ื ืื• ื‘ืžืื•ื—ืจ ืชืฆื˜ืจืš ืืช ื”ืžื™ื•ืžื ื•ืช ื”ื–ื•.

  • ื“ืจืฉ!

ื“ืจืฉื• ืžื”ืžื•ืจื™ื ื•ื”ืžืคืงื—ื™ื ื’ื™ืฉื•ืช ื•ื›ืœื™ื ืžืชืงื“ืžื™ื. ืื ื–ื” ืืคืฉืจื™ ื›ืžื•ื‘ืŸ...

  • ืœึดื™ืฆื•ึนืจ!

ืื™ืคื” ืขื•ื“ ืขื“ื™ืฃ ืœื”ืชื’ื‘ืจ ืขืœ ื›ืœ ื”ืคืฆืขื™ื ืฉืœ ืžืชื—ื™ืœ, ืื ืœื ื‘ืžืกื’ืจืช ืชื›ื ื™ืช ื—ื™ื ื•ื›ื™ืช? ืฆื•ืจ ื•ืฉื›ืœืœ ืืช ื”ื›ื™ืฉื•ืจื™ื ืฉืœืš - ืฉื•ื‘, ื›ื›ืœ ืฉืชืชื—ื™ืœ ืžื•ืงื“ื ื™ื•ืชืจ, ื›ืš ื™ื™ื˜ื‘.

ืžืชื›ื ืชื™ื ืฉื•ืืคื™ื ืžื›ืœ ื”ืžื“ื™ื ื•ืช, ื”ืชืื—ื“ื•!

ื .ื‘.

ืขืœ ืžื ืช ืœืชืขื“ ืืช ื”ืงืฉืจ ื”ื™ืฉื™ืจ ืฉืœื™ ืขื ื”ืชืœืžื™ื“ื™ื, ืื ื™ ืžืฆืจืฃ ืชืžื•ื ื” ื‘ืœืชื™ ื ืฉื›ื—ืช ืžืฉื ืช 2017 ืขื ืฉื ื™ ืจืงื˜ื•ืจื™ื: ืคื™ื˜ืจ ืฉืจืฃ (ืžื™ืžื™ืŸ) ื•ืืœื‘ืจื˜ ื—ืจื™ืกื•ื‘ื™ืฅ' ื’ื™ืœืžื•ื“ื™ื ื•ื‘ (ืžืฉืžืืœ).

"ืžื ื™ืคืกื˜ ืœืžืชื›ื ืชื™ื ืžืชื—ื™ืœื™ื ืžื”ืชืžื—ื•ื™ื•ืช ืงืฉื•ืจื•ืช" ืื• ืื™ืš ื”ื’ืขืชื™ ืœื ืงื•ื“ื” ื”ื–ื• ื‘ื—ื™ื™ื

ื”ื™ื” ืฉื•ื•ื” ืœืกื™ื™ื ืืช ื”ืชื•ื›ื ื™ืช ืœืคื—ื•ืช ื‘ืฉื‘ื™ืœ ื”ืชื—ืคื•ืฉื•ืช ื”ืืœื”! (ืฆื•ื—ืง)

ืžืงื•ืจ: www.habr.com

ื”ื•ืกืคืช ืชื’ื•ื‘ื”