generate 7.5KHz tables
This commit is contained in:
@@ -1137,6 +1137,7 @@ set(PHY_SRC_RU
|
|||||||
${OPENAIR1_DIR}/PHY/LTE_TRANSPORT/if5_tools.c
|
${OPENAIR1_DIR}/PHY/LTE_TRANSPORT/if5_tools.c
|
||||||
${OPENAIR1_DIR}/PHY/MODULATION/slot_fep_ul.c
|
${OPENAIR1_DIR}/PHY/MODULATION/slot_fep_ul.c
|
||||||
${OPENAIR1_DIR}/PHY/MODULATION/ul_7_5_kHz.c
|
${OPENAIR1_DIR}/PHY/MODULATION/ul_7_5_kHz.c
|
||||||
|
${OPENAIR1_DIR}/PHY/MODULATION/gen_75KHz.cpp
|
||||||
${OPENAIR1_DIR}/PHY/MODULATION/beamforming.c
|
${OPENAIR1_DIR}/PHY/MODULATION/beamforming.c
|
||||||
${OPENAIR1_DIR}/PHY/MODULATION/compute_bf_weights.c
|
${OPENAIR1_DIR}/PHY/MODULATION/compute_bf_weights.c
|
||||||
${OPENAIR1_DIR}/PHY/INIT/lte_init_ru.c
|
${OPENAIR1_DIR}/PHY/INIT/lte_init_ru.c
|
||||||
|
|||||||
@@ -0,0 +1,78 @@
|
|||||||
|
#include <stdio.h>
|
||||||
|
#include <stdint.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <malloc.h>
|
||||||
|
#include <assert.h>
|
||||||
|
#include <complex>
|
||||||
|
#include <cmath>
|
||||||
|
#include <map>
|
||||||
|
#include <PHY/MODULATION/modulation_extern.h>
|
||||||
|
using namespace std;
|
||||||
|
|
||||||
|
void gen_sig(int RB, int len, double ratio, int16_t *table_n, int16_t *table_e ) {
|
||||||
|
double samplerate = 30.72e6*ratio;
|
||||||
|
double ofdm_size = 2048*ratio;
|
||||||
|
double PI = std::acos(-1);
|
||||||
|
std::complex<int> tt;
|
||||||
|
complex<double> t[len];
|
||||||
|
int index=0;
|
||||||
|
|
||||||
|
double cp0 = 160*ratio;
|
||||||
|
double cp = 144*ratio;
|
||||||
|
for (int i=-cp0; i<ofdm_size; i++)
|
||||||
|
t[index++] = polar( 32767.0, -2*PI*i*7.5e3/samplerate);
|
||||||
|
for(int x=0 ; x <6 ; x++)
|
||||||
|
for (int i=-cp; i<ofdm_size; i++)
|
||||||
|
t[index++] = polar( 32767.0, -2*PI*i*7.5e3/samplerate);
|
||||||
|
for (int i=0; i < len ; i++) {
|
||||||
|
table_n[i*2] = floor(real(t[i]));
|
||||||
|
table_n[i*2+1] = floor(imag(t[i]));
|
||||||
|
}
|
||||||
|
|
||||||
|
index=0;
|
||||||
|
double cpe = 512*ratio;
|
||||||
|
for(int x=0 ; x <6 ; x++)
|
||||||
|
for (int i=-cpe; i<ofdm_size; i++)
|
||||||
|
t[index++] = polar( 32767.0, -2*PI*i*7.5e3/samplerate);
|
||||||
|
for (int i=0; i < len ; i++) {
|
||||||
|
table_e[i*2] = floor(real(t[i]));
|
||||||
|
table_e[i*2+1] = floor(imag(t[i]));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int16_t *s6n_kHz_7_5;
|
||||||
|
int16_t *s6e_kHz_7_5;
|
||||||
|
int16_t *s15n_kHz_7_5;
|
||||||
|
int16_t *s15e_kHz_7_5;
|
||||||
|
int16_t *s25n_kHz_7_5;
|
||||||
|
int16_t *s25e_kHz_7_5;
|
||||||
|
int16_t *s50n_kHz_7_5;
|
||||||
|
int16_t *s50e_kHz_7_5;
|
||||||
|
int16_t *s75n_kHz_7_5;
|
||||||
|
int16_t *s75e_kHz_7_5;
|
||||||
|
int16_t *s100n_kHz_7_5;
|
||||||
|
int16_t *s100e_kHz_7_5;
|
||||||
|
int16_t ** tables[12]={&s6n_kHz_7_5,&s6e_kHz_7_5,
|
||||||
|
&s15n_kHz_7_5,&s15e_kHz_7_5,
|
||||||
|
&s25n_kHz_7_5,&s25e_kHz_7_5,
|
||||||
|
&s50n_kHz_7_5,&s50e_kHz_7_5,
|
||||||
|
&s75n_kHz_7_5,&s75e_kHz_7_5,
|
||||||
|
&s100n_kHz_7_5,&s100e_kHz_7_5,};
|
||||||
|
int tables_size_bytes[12];
|
||||||
|
#define MyAssert(x) { if(!(x)) { printf("Error in table intialization: %s:%d\n",__FILE__,__LINE__); exit(1);}}
|
||||||
|
__attribute__((constructor)) static void init_7_5KHz(void) {
|
||||||
|
const map<int,double> tables_7_5KHz={{6,1.0/16},{15,1.0/8},{25,1.0/4},{50,1.0/2},{75,3.0/4},{100,1.0}};
|
||||||
|
|
||||||
|
int tables_idx=0;
|
||||||
|
for (auto it=tables_7_5KHz.begin(); it!=tables_7_5KHz.end(); ++it) {
|
||||||
|
int len=15360*it->second;
|
||||||
|
tables_size_bytes[tables_idx]=sizeof(int16_t)*2*len;
|
||||||
|
tables_size_bytes[tables_idx+1]=sizeof(int16_t)*2*len;
|
||||||
|
MyAssert(0==posix_memalign((void**)tables[tables_idx],
|
||||||
|
16,tables_size_bytes[tables_idx]));
|
||||||
|
MyAssert(0==posix_memalign((void**)tables[tables_idx+1],
|
||||||
|
16,tables_size_bytes[tables_idx+1]));
|
||||||
|
gen_sig(it->first, len, it->second, *tables[tables_idx], *tables[tables_idx+1]);
|
||||||
|
tables_idx+=2;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,107 +0,0 @@
|
|||||||
|
|
||||||
function [] = gen_7_5_kHz()
|
|
||||||
[s6_n2, s6_e2] = gen_sig(6);
|
|
||||||
[s15_n2, s15_e2] = gen_sig(15);
|
|
||||||
[s25_n2, s25_e2] = gen_sig(25);
|
|
||||||
[s50_n2, s50_e2] = gen_sig(50);
|
|
||||||
[s75_n2, s75_e2] = gen_sig(75);
|
|
||||||
[s100_n2, s100_e2] = gen_sig(100);
|
|
||||||
|
|
||||||
|
|
||||||
fd=fopen("kHz_7_5.h","w");
|
|
||||||
fprintf(fd,"s16 s6n_kHz_7_5[%d]__attribute__((aligned(16))) = {",length(s6_n2));
|
|
||||||
fprintf(fd,"%d,",s6_n2(1:(end-1)));
|
|
||||||
fprintf(fd,"%d};\n\n",s6_n2(end));
|
|
||||||
|
|
||||||
fprintf(fd,"s16 s6e_kHz_7_5[%d]__attribute__((aligned(16))) = {",length(s6_e2));
|
|
||||||
fprintf(fd,"%d,",s6_e2(1:(end-1)));
|
|
||||||
fprintf(fd,"%d};\n\n",s6_e2(end));
|
|
||||||
|
|
||||||
fprintf(fd,"s16 s15n_kHz_7_5[%d]__attribute__((aligned(16))) = {",length(s15_n2));
|
|
||||||
fprintf(fd,"%d,",s15_n2(1:(end-1)));
|
|
||||||
fprintf(fd,"%d};\n\n",s15_n2(end));
|
|
||||||
|
|
||||||
fprintf(fd,"s16 s15e_kHz_7_5[%d]__attribute__((aligned(16))) = {",length(s15_e2));
|
|
||||||
fprintf(fd,"%d,",s15_e2(1:(end-1)));
|
|
||||||
fprintf(fd,"%d};\n\n",s15_e2(end));
|
|
||||||
|
|
||||||
fprintf(fd,"s16 s25n_kHz_7_5[%d]__attribute__((aligned(16))) = {",length(s25_n2));
|
|
||||||
fprintf(fd,"%d,",s25_n2(1:(end-1)));
|
|
||||||
fprintf(fd,"%d};\n\n",s25_n2(end));
|
|
||||||
|
|
||||||
fprintf(fd,"s16 s25e_kHz_7_5[%d]__attribute__((aligned(16))) = {",length(s25_e2));
|
|
||||||
fprintf(fd,"%d,",s25_e2(1:(end-1)));
|
|
||||||
fprintf(fd,"%d};\n\n",s25_e2(end));
|
|
||||||
|
|
||||||
fprintf(fd,"s16 s50n_kHz_7_5[%d]__attribute__((aligned(16))) = {",length(s50_n2));
|
|
||||||
fprintf(fd,"%d,",s50_n2(1:(end-1)));
|
|
||||||
fprintf(fd,"%d};\n\n",s50_n2(end));
|
|
||||||
|
|
||||||
fprintf(fd,"s16 s50e_kHz_7_5[%d]__attribute__((aligned(16))) = {",length(s50_e2));
|
|
||||||
fprintf(fd,"%d,",s50_e2(1:(end-1)));
|
|
||||||
fprintf(fd,"%d};\n\n",s50_e2(end));
|
|
||||||
|
|
||||||
fprintf(fd,"s16 s75n_kHz_7_5[%d]__attribute__((aligned(16))) = {",length(s75_n2));
|
|
||||||
fprintf(fd,"%d,",s75_n2(1:(end-1)));
|
|
||||||
fprintf(fd,"%d};\n\n",s75_n2(end));
|
|
||||||
|
|
||||||
fprintf(fd,"s16 s75e_kHz_7_5[%d]__attribute__((aligned(16))) = {",length(s75_e2));
|
|
||||||
fprintf(fd,"%d,",s75_e2(1:(end-1)));
|
|
||||||
fprintf(fd,"%d};\n\n",s75_e2(end));
|
|
||||||
|
|
||||||
fprintf(fd,"s16 s100n_kHz_7_5[%d]__attribute__((aligned(16)))= {",length(s100_n2));
|
|
||||||
fprintf(fd,"%d,",s100_n2(1:(end-1)));
|
|
||||||
fprintf(fd,"%d};\n\n",s100_n2(end));
|
|
||||||
|
|
||||||
fprintf(fd,"s16 s100e_kHz_7_5[%d]__attribute__((aligned(16)))= {",length(s100_n2));
|
|
||||||
fprintf(fd,"%d,",s100_e2(1:(end-1)));
|
|
||||||
fprintf(fd,"%d};\n\n",s100_e2(end));
|
|
||||||
|
|
||||||
fclose(fd);
|
|
||||||
end
|
|
||||||
|
|
||||||
|
|
||||||
function [s_n2, s_e2] = gen_sig(RB)
|
|
||||||
% 20MHz BW
|
|
||||||
cp0 = 160;
|
|
||||||
cp = 144;
|
|
||||||
cpe = 512;
|
|
||||||
samplerate = 30.72e6;
|
|
||||||
ofdm_size = 2048;
|
|
||||||
len = 15360;
|
|
||||||
switch(RB)
|
|
||||||
case 6
|
|
||||||
ratio = 1/16;
|
|
||||||
case 15
|
|
||||||
ratio = 1/8;
|
|
||||||
case 25
|
|
||||||
ratio = 1/4;
|
|
||||||
case 50
|
|
||||||
ratio = 1/2;
|
|
||||||
case 75
|
|
||||||
ratio = 3/4;
|
|
||||||
case 100
|
|
||||||
ratio = 1;
|
|
||||||
otherwise
|
|
||||||
disp("Wrong Number of RB");
|
|
||||||
end
|
|
||||||
cp0 = cp0*ratio;
|
|
||||||
cp = cp*ratio;
|
|
||||||
cpe = cpe*ratio;
|
|
||||||
samplerate = samplerate*ratio;
|
|
||||||
ofdm_size = ofdm_size*ratio;
|
|
||||||
len = len*ratio;
|
|
||||||
|
|
||||||
s_n0 = floor(32767*exp(-sqrt(-1)*2*pi*(-cp0:ofdm_size-1)*7.5e3/samplerate));
|
|
||||||
s_n1 = floor(32767*exp(-sqrt(-1)*2*pi*(-cp:ofdm_size-1)*7.5e3/samplerate));
|
|
||||||
s_n = [s_n0 s_n1 s_n1 s_n1 s_n1 s_n1 s_n1];
|
|
||||||
s_n2 = zeros(1, 2*len);
|
|
||||||
s_n2(1:2:end) = real(s_n);
|
|
||||||
s_n2(2:2:end) = imag(s_n);
|
|
||||||
s_e = floor(32767*exp(-sqrt(-1)*2*pi*(-cpe:ofdm_size-1)*7.5e3/samplerate));
|
|
||||||
s_e = [s_e s_e s_e s_e s_e s_e];
|
|
||||||
s_e2 = zeros(1, 2*len);
|
|
||||||
s_e2(1:2:end) = real(s_e);
|
|
||||||
s_e2(2:2:end) = imag(s_e);
|
|
||||||
end
|
|
||||||
|
|
||||||
File diff suppressed because one or more lines are too long
@@ -19,18 +19,18 @@
|
|||||||
* contact@openairinterface.org
|
* contact@openairinterface.org
|
||||||
*/
|
*/
|
||||||
|
|
||||||
extern int16_t s6n_kHz_7_5[1920];
|
extern int16_t *s6n_kHz_7_5;
|
||||||
extern int16_t s6e_kHz_7_5[1920];
|
extern int16_t *s6e_kHz_7_5;
|
||||||
extern int16_t s15n_kHz_7_5[3840];
|
extern int16_t *s15n_kHz_7_5;
|
||||||
extern int16_t s15e_kHz_7_5[3840];
|
extern int16_t *s15e_kHz_7_5;
|
||||||
extern int16_t s25n_kHz_7_5[7680];
|
extern int16_t *s25n_kHz_7_5;
|
||||||
extern int16_t s25e_kHz_7_5[7680];
|
extern int16_t *s25e_kHz_7_5;
|
||||||
extern int16_t s50n_kHz_7_5[15360];
|
extern int16_t *s50n_kHz_7_5;
|
||||||
extern int16_t s50e_kHz_7_5[15360];
|
extern int16_t *s50e_kHz_7_5;
|
||||||
extern int16_t s75n_kHz_7_5[23040];
|
extern int16_t *s75n_kHz_7_5;
|
||||||
extern int16_t s75e_kHz_7_5[23040];
|
extern int16_t *s75e_kHz_7_5;
|
||||||
extern int16_t s100n_kHz_7_5[30720];
|
extern int16_t *s100n_kHz_7_5;
|
||||||
extern int16_t s100e_kHz_7_5[30720];
|
extern int16_t *s100e_kHz_7_5;
|
||||||
|
|
||||||
|
|
||||||
extern short conjugate75[8];
|
extern short conjugate75[8];
|
||||||
|
|||||||
@@ -19,7 +19,6 @@
|
|||||||
* contact@openairinterface.org
|
* contact@openairinterface.org
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "kHz_7_5.h"
|
|
||||||
|
|
||||||
short conjugate75[8]__attribute__((aligned(16))) = {-1,1,-1,1,-1,1,-1,1} ;
|
short conjugate75[8]__attribute__((aligned(16))) = {-1,1,-1,1,-1,1,-1,1} ;
|
||||||
short conjugate75_2[8]__attribute__((aligned(16))) = {1,-1,1,-1,1,-1,1,-1} ;
|
short conjugate75_2[8]__attribute__((aligned(16))) = {1,-1,1,-1,1,-1,1,-1} ;
|
||||||
|
|||||||
Reference in New Issue
Block a user