📄 transmitter.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 + -