⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 transmitter.c

📁 此文件用于仿真MIMO-STBC 系统性能程序
💻 C
字号:

#include "STBC_includ.h"
long int  random_seed = -123;       /* initial random seed */

void  generate_binary_info_sequence(int *binary_sequence)
{
   int t;

   for (t = 0; t < K_BIT * (NUM_SIGS_PER_FRAME - 1); t++)
      binary_sequence[t] = ran1(&random_seed) > 0.5 ? 1 : 0;
}

void  unit_memory_STBC_code(int *binary_sequence, t_COMPLEX output_signals[][NUM_TX])
{
   int i;
   int input_block[K_BIT];
   int conv_bit[N_BIT];
   int map_sig[N_SIG];

   for(i = 0 ; i < NUM_SIGS_PER_FRAME; i++)
   {
      memset(input_block, 0, sizeof(int) * K_BIT);
      memset(conv_bit, 0, sizeof(int) * N_BIT);
      memset(map_sig, 0, sizeof(int) * N_SIG);
      /* do the convolution every four bit*/
      memcpy(input_block, &binary_sequence[i*K_BIT], sizeof(int) * K_BIT);
      /* get the block code by multiplying generator matrix 1*/
      mtxmtx(input_block, s_p_context->gen_matrix_1, conv_bit, 1, K_BIT, N_BIT, M_2);
      /* get the natural map*/
      mtxmtx(conv_bit, s_p_context->map_matrix, map_sig, 1, N_BIT, N_SIG, M_8);
      
      /* four antennas are splited into 2 groups*/
      /*encoded into STBC block code for group 1*/
      output_signals[i * 2][0].real = cos(M_2PI / s_p_context->psk_1 * map_sig [0]); 
      output_signals[i * 2][0].imag = sin(M_2PI / s_p_context->psk_1 * map_sig [0]);
      output_signals[i * 2][1].real = cos(M_2PI / s_p_context->psk_2 * map_sig [1]); 
      output_signals[i * 2][1].imag = sin(M_2PI / s_p_context->psk_2 * map_sig [1]);
      output_signals[i * 2 + 1][0].real = -cos(M_2PI / s_p_context->psk_1 * map_sig [1]);
      output_signals[i * 2 + 1][0].imag = sin(M_2PI / s_p_context->psk_1 * map_sig [1]);
      output_signals[i * 2 + 1][1].real = cos(M_2PI / s_p_context->psk_2 * map_sig [0]);
      output_signals[i * 2 + 1][1].imag = -sin(M_2PI / s_p_context->psk_2 * map_sig [0]);
      
      /* group 2 */
      memset(conv_bit, 0, sizeof(int) * N_BIT);
      memset(map_sig, 0, sizeof(int) * N_SIG);
      /* get the block code by multiplying generator matrix 1*/
      mtxmtx(s_p_context->previous_block, s_p_context->gen_matrix_2, conv_bit, 1, K_BIT, N_BIT, M_2);
      /* get the natural map*/
      mtxmtx(conv_bit, s_p_context->map_matrix, map_sig, 1, N_BIT, N_SIG, M_8);

      /*encoded into STBC block code for group 2*/
      output_signals[i * 2][2].real = cos(M_2PI / s_p_context->psk_1 * map_sig [0]); 
      output_signals[i * 2][2].imag = sin(M_2PI / s_p_context->psk_1 * map_sig [0]);
      output_signals[i * 2][3].real = cos(M_2PI / s_p_context->psk_2 * map_sig [1]); 
      output_signals[i * 2][3].imag = sin(M_2PI / s_p_context->psk_2 * map_sig [1]);
      output_signals[i * 2 + 1][2].real = -cos(M_2PI / s_p_context->psk_1 * map_sig [1]);
      output_signals[i * 2 + 1][2].imag = sin(M_2PI / s_p_context->psk_1 * map_sig [1]);
      output_signals[i * 2 + 1][3].real = cos(M_2PI / s_p_context->psk_2 * map_sig [0]);
      output_signals[i * 2 + 1][3].imag = -sin(M_2PI / s_p_context->psk_2 * map_sig [0]);
      
      /* move the current block into the memory*/
      memcpy(s_p_context->previous_block, input_block, sizeof(int) * K_BIT);
   }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -