LTE channel correlation analysis python tool based on RSSI trace from Huawei U2000 equipment

LTE channel correlation analysis python tool based on RSSI trace from Huawei U2000 equipment

2019, Nov 08    

In the radiofrequency optimization field, lots of engineers have to deal with channel unbalanced (maybe you can remember a typical problem on 3G regarding RTWP unbalanced) between the antenna signal channels. On LTE, for sure we dont have the RTWP issue like 3G since the spectrum is not fully shared by all users (each user is scheduled with some specific RB during a small period of time) but another problems arise. As you know, one of the main advantages of LTE is the implementation of MIMO (Multiple Inputs - Multiple Outputs) which is basically more than 1 antenna transmitting and receiving.

In order to accomplish the best performance, the correlation of the Tx antennas should not be close to “1” (in correlation analysis, “1” means that the data of 2 variables are related in a linear way, so basically they pretty similar). Nowdays in typical antenna systems, we find 2,4,8… ports to send cell signals, they come in pairs because each port has one polarization (+45/-45). In the transmission channels, this polarization helps to reduce the correlation between the tx channels bby offesting the signal.

Lets see an example

In the below picture we have a typical antenna bottom diagram, totally there are 5 antennas inside, each antenna has 2-ports with different polarization (+45/-45). For this example, lets use the 2 antennas Y1 and Y2 (Yellow diagram) because it is basically 2 antennas with the same characteristics (band, azimuth). Lets supposed that you have a 2T2R LTE system, so logic said you should use only one of the 2 antennas, which is correct. However lets say you have a 2T4R system. In this case, you need to use both antennas, and here is where everything gets trickier. Since you have 2Tx, the jumpers for those Tx channels must go with different polarization and for best performance (lower correlation) it is highly recommended to connect each jumper in a different antenna, so for this case you should connect 1Tx in the port 7 (+45) and the 2nd Tx in port 10 (-45)

antenna_ports

How to check correlation without visiting every site

As you may noticed, the best way to find this kind of issues is by visiting every site with low Rank Indicator 2/3/4 rate, nevertheless this is an expensive task which it is not usually possible. So for this case, we have an alternative way more cheaper.

  1. In the Huawei U2000 OSS system, perform an RSSI trace on the required cells for about 1-2 hours.
  2. Download the trace results on csv format
  3. Download the tool for channel correlation analysis on my github repo
  4. Execute the task and get the results for each cell, the higher correlation between ports means that those ports are probably using the same polarization port

About the tool

Basically, the tool gets the correlation value between each pair of ports on the antenna array so you as RF engineer can analyze it.

    for i in range(len(files)):
        df = pd.read_csv(files[i],skiprows=9)
        Results['Cell'].append(os.path.splitext(os.path.basename(files[i]))[0])
        Results['Ant0 vs Ant1'].append(pearsonr(df.iloc[:,104],df.iloc[:,105])[0])
        if math.isnan(Results['Ant0 vs Ant1'][i]):
            Results['Ant0 vs Ant1'][i] = -1
        Results['Ant0 vs Ant2'].append(pearsonr(df.iloc[:,104],df.iloc[:,106])[0])
        if math.isnan(Results['Ant0 vs Ant2'][i]):
            Results['Ant0 vs Ant2'][i] = -1
        Results['Ant0 vs Ant3'].append(pearsonr(df.iloc[:,104],df.iloc[:,107])[0])
        if math.isnan(Results['Ant0 vs Ant3'][i]):
            Results['Ant0 vs Ant3'][i] = -1
        Results['Ant1 vs Ant2'].append(pearsonr(df.iloc[:,105],df.iloc[:,106])[0])
        if math.isnan(Results['Ant1 vs Ant2'][i]):
            Results['Ant1 vs Ant2'][i] = -1
        Results['Ant1 vs Ant3'].append(pearsonr(df.iloc[:,105],df.iloc[:,107])[0])
        if math.isnan(Results['Ant1 vs Ant3'][i]):
            Results['Ant1 vs Ant3'][i] = -1
        Results['Ant2 vs Ant3'].append(pearsonr(df.iloc[:,106],df.iloc[:,107])[0])
        if math.isnan(Results['Ant2 vs Ant3'][i]):
            Results['Ant2 vs Ant3'][i] = -1
    dataF = pd.DataFrame(data=Results)

As you can see, the tool works only for the data arrangement generated by Huawei U2000 tool, however you can modify it based on the file arrangement your vendor provides.