2 Questions (IDE and LScorrelation)

Asked by Chiu

Dear Jan,

I have two separate questions.

1. Can I know what IDE you were using when develop the IMTAphy? I'd like to trace the procedure of the codes, but don't know what IDE I should use.

2. About correlation of Large Scale Parameters, in particular, auto-correlation.

In chapter 13 of the book "LTE-Advanced and Next...", page.362, you mentioned that you use FIR filter g(d) = exp(-d/d_corr)

In Matlab implementation of WINNERII, they further normalize the impulse response so that \sum h[n] = 1

     (I couldn't find the location of LS parameter correlation in your code, did you also do this normalization?)

However,

Neither exp(-d/d_corr) nor the normalization one appears correct to me.

    As I understood, put a random sequence into a LTI system with impulse response h[n], the auto correlation would become

(Let X be input, Y be output)

R_Y [n] = R_X[n] (*) h[n] * h[-n]

where X is the input. (R_X[n] = delta[n] in this case)

Hence the generated auto correlation

1) normalized h

   h = [0.7135 0.2044 0.0586 0.0168 0.0048 0.0014 0.0004 0.0001]

      R_Y = [0.5547 0.1589 0.0455 0.0130 0.0037 0.0011 0.0003 0.0001]

where R_Y[0] = 0.5547

2) Original h

    h = [1.0000 0.2865 0.0821 0.0235 0.0067 0.0019 0.0006 0.0002]

      R_Y = [1.0894 0.3121 0.0894 0.0256 0.0073 0.0021 0.0006 0.0002]

where R_Y[0] =1.0894

In both case, the R_Y would't be the desired one

(We actually want R_Y = [1.0000 0.2865 0.0821 0.0235 0.0067 0.0019 0.0006 0.0002])

Even the variance (R_Y[0]) would be altered

Furthermore, even if we can generate correct x-dim correlation and y-dim correlation by separate filtering along each dimension, there is no guarantee that such separate filtering would generate correct correlation in the whole 2D map. For instance, position (0,0) (0,1) is guaranteed by y-dim filtering and (0,0) (1,0) is also guaranteed by x-dim filtering, but then, there is no guarantee for the pair (0,1) (1,0)

Therefore, I am confused by this strange method of generating auto correlation.

Did I misunderstand anything?

Question information

Language:
English Edit question
Status:
Solved
For:
IMTAphy Edit question
Assignee:
No assignee Edit question
Solved by:
Chiu
Solved:
Last query:
Last reply:
Revision history for this message
Jan (jan-ellenbeck) said :
#1

Hi Chiu,

1) We used kdevelop because that is what is supported by openWNS. When you go to the openwns-sdk, you can create a kdevelop project by running ./bin/setupKDevelop.py

2) You can find the implementation of the LS correlation in modules/phy/imtaphy/src/lsParams/LSCorrelation.cpp That code is 2 years old, so I don't remember every detail at the moment. But I can tell you this: The implementation is done in a way to produce exactly the same results as the WINNER/IMT-A Matlab implementation, which we considered to be a standard reference. This is confirmed by a set of unit tests implemented in modules/phy/imtaphy/src/spatialChannel/m2135/tests/LSCorrelationTest.cpp where we reproduce a setup we had configured in the Matlab implementation and check whether IMTAphy delivers exactly the same LS parameters. With respect to your normalization question: In lines 390 to 411 of LSCorrelation.cpp we normalize the resulting grid. Without having checked that again, I guess that's what is done in the Matlab code as well.

Hope that helps. Best regards
Jan

Revision history for this message
Chiu (qoocoolqoo) said :
#2

Jan,

Thanks, I will try to use kdevelop

Regard the second question:

1) So in the book, we should add a description of normalization. And indeed, the Matlab code I download also did this.

2) But that still confuses me. Especially as I mentioned, R_Y[0] = 0.5547 means the variance is altered.

     Have you tested that whether your generated, say, shadow fading, has the correct standard deviation as you set?

I mean, if you set standard deviation as 6dB, but sadly, the generated r.v. will have standard deviation only sqrt(0.5547)*6 dB due to the process of the wrongly added correlation?

Revision history for this message
Jan (jan-ellenbeck) said :
#3

Hi,

I mention the normalization in the book (first line after equation 13.10), but OK, that might not be detailed enough to reproduce it. But that's why we provide source code and that's also what the ITU M.2135 document does, which refers to the WINNER implementation for LS correlation details.

I think we checked the distribution of the resulting LS parameters back then. And, again, it matches 1:1 the Matlab implementation, which we consider to be the reference anyway.

But you can check that the distribution is fine by running a small simulation. Compile for "opt" and modify the config.py to set the numberOfCircles to 2 and the params.numMSperBS to 25, for example. That should give you a big 57*57*25= 81225 users UMa scenario. When you run that (you'll need a few GB due to the size), you will find an output/shadowing_BS_Serving0_PDF.dat file that contains the statistics for the non-serving links in the scenario. There are 79800 such links and almost all are NLOS (see table 13.3 in the book). These should have a shadow fading std. dev. of 6 dB (see table 13.4) and the statistics probe (see output below) shows you that that's what you get.

Best regards
Jan

# Name: Shadowing dB
# Description: Shadowing in dB
# ---------------------------------------------------------------------------
# Evaluation terminated successfully!
# ---------------------------------------------------------------------------
# Common Statistics
# Minimum: -24.8919741
# Maximum: 24.2993956
# Trials: 79800
# Mean: -0.0237252
#
# Variance: 36.6902218
# Relative variance: 65182.6575447
# Coefficient of variation: 255.3089453
# Standard deviation: 6.0572454
# Relative standard deviation: -255.3089453
#
# Skewness: 0.0074681

Revision history for this message
Chiu (qoocoolqoo) said :
#4

Jan,

OK. I now see another normalization

            for(unsigned int j =0 ; j < linksToCorrelate.size(); j++)
            {
                ksi(i, j) =
                    grid[linksToCorrelate[j]->getWrappedMSposition().getY() - Ymin + D]
                        [linksToCorrelate[j]->getWrappedMSposition().getX() - Xmin + D] / stdDev;

            }

which corresponds to

 grida = grida/std(grida(:)); in Matlab code

I think the sentence (first line after equation 13.10) is more like describing this one.

And, of course, if we do this normalization, we will have correct variance (var = 1 right after normalization, add 6dB later) no matter what filter coefficient we are using.

Still, the R_Y in my previous case would become

 [ 1.0000 0.2865 0.0821 0.0235 0.0067 0.0019 0.0005 0.0001]

And amazingly, though not completely equal to

  h = [1.0000 0.2865 0.0821 0.0235 0.0067 0.0019 0.0006 0.0002]

it's already quiet close to.

Yet I don't know why this similarity would happen and also I don't know how to further analyze the correlation along different direction other than x-axis and y-axis.

Anyway, this might be the result that I can accept, thanks!

Revision history for this message
Chiu (qoocoolqoo) said :
#5

BTW, the previous normalization I mentioned on the filter coefficient would be futile if we do the std normalization on filter output.

That means

            for (unsigned int n = 0; n < FilterLength; n++)
                filter[n] = filter[n] / sum;

I think the result would be the same without above

Anyway, not a big deal.

Revision history for this message
Chiu (qoocoolqoo) said :
#6

Or simply use h = h/sqrt(sum(h.^2)) and remove the second normalization