zoukankan      html  css  js  c++  java
  • 卷积交织/解交织C++程序

    交织基数为M,交织深度为I的卷积交织/解交织程序,延时为I*(I-1)*M.

      1 #include <iostream>
      2 #include <vector>
      3 #include <list>
      4 #include <cstdint>
      5 
      6 using namespace std;
      7 
      8 vector<uint8_t> interleaving(vector<uint8_t> &sym_din, size_t M, size_t I)
      9 {
     10     list<uint8_t> sym_fifo[I];
     11     vector<uint8_t> sym_itlv;
     12 
     13     // Initialize Data FiFo
     14     for(size_t i = 0; i < I; ++i) {
     15         for(size_t j = 0; j < M*i; ++j)
     16             sym_fifo[i].push_back(uint8_t(0));
     17     }
     18 
     19     // Interleaving
     20     for(size_t i = 0; i < sym_din.size(); ++i) {
     21         sym_fifo[size_t(i%I)].push_back(sym_din[i]);
     22         sym_itlv.push_back(sym_fifo[i%I].front());
     23         sym_fifo[i%I].pop_front();
     24     }
     25 
     26     return sym_itlv;
     27 }
     28 
     29 vector<uint8_t> deinterleaving_fifo(vector<uint8_t> &sym_din, size_t M, size_t I)
     30 {
     31     list<uint8_t> sym_fifo[I];
     32     vector<uint8_t> sym_itlv;
     33 
     34     // Initialize Data FiFo
     35     for(size_t i = 0; i < I; ++i) {
     36         for(size_t j = 0; j < M*(I - 1 - i); ++j)
     37             sym_fifo[i].push_back(uint8_t(0));
     38     }
     39 
     40     // DeInterleaving
     41     for(size_t i = 0; i < sym_din.size(); ++i) {
     42         sym_fifo[size_t(i%I)].push_back(sym_din[i]);
     43         sym_itlv.push_back(sym_fifo[i%I].front());
     44         sym_fifo[i%I].pop_front();
     45     }
     46 
     47     // DeInterleaving Delay Should be I*(I-1)*M
     48     return sym_itlv;
     49 }
     50 
     51 vector<uint8_t> deinterleaving(vector<uint8_t> &sym_din, size_t M, size_t I)
     52 {
     53     size_t branch = 0;
     54     size_t wraddr = 0;
     55     size_t rdaddr = (I - 1) * M;
     56     vector<uint8_t> sym_ram(I*(I-1)*M/2+1);
     57     vector<uint8_t> sym_itlv;
     58 
     59     // Initialize Data RAM
     60     for(size_t i = 0; i < I*(I-1)*M/2 + 1; ++i) {
     61         sym_ram[i] = uint8_t(0);
     62     }
     63 
     64     // DeInterleaving
     65     for(size_t i = 0; i < sym_din.size(); ++i) {
     66         branch = i % I;
     67 
     68         sym_ram[wraddr] = sym_din[i];
     69         wraddr = wraddr + (I-1)*M - branch * M;
     70         wraddr = wraddr >= (I*(I-1)*M/2 + 1) ? wraddr - (I*(I-1)*M/2 + 1) : wraddr;
     71 
     72         sym_itlv.push_back(sym_ram[rdaddr]);
     73         rdaddr = rdaddr + (I-1)*M - ((branch + 1) % I) * M;
     74         rdaddr = rdaddr >= (I*(I-1)*M/2 + 1) ? rdaddr - (I*(I-1)*M/2 + 1) : rdaddr;
     75     }
     76 
     77     // DeInterleaving Delay Should be I*(I-1)*M
     78     return sym_itlv;
     79 }
     80 
     81 int main(int argc, char **argv)
     82 {
     83     size_t deint_delay = 0;
     84     vector<uint8_t> sym_din;
     85     vector<uint8_t> sym_itlv;
     86     vector<uint8_t> sym_deitlv;
     87 
     88     for(size_t i = 0; i < 12*11*17*10; ++i)
     89         sym_din.push_back(i+1);
     90 
     91     sym_itlv = interleaving(sym_din, 17, 12);
     92     sym_deitlv = deinterleaving(sym_itlv, 17, 12);
     93 
     94     cout << "Interleaving:" << endl;
     95     for(vector<uint8_t>::iterator itr = sym_itlv.begin(); itr != sym_itlv.end(); ++itr) {
     96         cout << int(*itr) << ' ' << flush;
     97     }
     98     cout << endl;
     99 
    100     cout << "DeInterleaving:" << endl;
    101 
    102     for(vector<uint8_t>::iterator itr = sym_deitlv.begin(); itr != sym_deitlv.end(); ++itr) {
    103         cout << int(*itr) << ' ' << flush;
    104         if(*itr == 1 && deint_delay == 0)
    105             deint_delay = itr - sym_deitlv.begin();
    106     }
    107     cout << endl;
    108     cout << "Deint Delay is " << deint_delay << endl;
    109 
    110     return 0;
    111 }
  • 相关阅读:
    HashSet源码分析
    Mysql的体系结构和存储引擎
    触发器
    存储过程和函数
    索引
    SpringBoot 中的日志使用
    log4j2
    Logback
    slf4j
    日志门面
  • 原文地址:https://www.cnblogs.com/lyuyangly/p/9781464.html
Copyright © 2011-2022 走看看