Friday, November 9, 2018

5G millimeter wave

5G millimeter wave features:

Millimeter waves have short wavelengths that range from 10 millimeters to 1 millimeter. 

To achieve higher data rate requirement in the order of 10 Gbps, 5G technology has been developed. 

The specifications are published in the 3GPP Release 15 and beyond. 

5G has different frequency ranges sub 6 GHz (5G macro optimized), 3-30 GHz (5G E small cells) and 30-100 GHz (5G Ultra Dense).

The frequency bands which lies between 30 GHz to 300 GHz is known as millimeter wave. 
This is due to the fact that wavelength of electro-magnetic wave will be in millimeter range at these frequencies. 
There are many advantages and disadvantages of mm wave.
Due to growth of large number of mobile data subscribers, need for larger bandwidth arises. 
The fact is bandwidth is limited in the available mobile frequency spectrum which is below the mm wave band. 
Due to this millimeter wave band has been explored as mobile frequency spectrum by operators due to its support for larger bandwidth. 
Though penetration loss is higher at these mm wave frequencies as these frequencies can not penetrate walls and certain objects in the buildings. 
Moreover mm wave frequencies get attenuated due to rain. After careful inclusion of all these factors in the RF link budget calculation, mm wave can be strong future for the mobile data broadband market.

Data rate                           => min 10 gbps
Modulation types                    => CP-OFDMA <40GHz < SC
modulation frequency                => Upto 100GHZ
Bandwidths                          => 500 MHZ to 2 GHZ
Distance coverage                   => upto 250 meters
Frame                               => TDD
MIMO                                => Massive MIMO


c++11

c++11

C++11



Common mistakes : when using new and delete


 it is very difficult to free all dynamically allocated memory. Even if we can do that, it is often not safe from exceptions. Let us look at a simple example:



void FunctionMethod()
{
  ClassA *a = new ClassA;
  SomeOtherMethod();      // it can throw an exception
  delete a; 
} 


If an exception is thrown, the “a” object is never deleted. The following example shows a safer and shorter way to do that. It uses auto_ptr which is deprecated in C++11, but the old standard is still widely used. It can be replaced with C++11 unique_ptr or scoped_ptr from Boost if possible.



void FunctionMethod(){
  std::auto_ptr<ClassA> a(new ClassA); // deprecated, please check the text
  SomeOtherMethod();      // it can throw an exception
}
No matter what happens, after creating the “a” object it will be deleted as soon as the program execution exits from the scope.
However, this was just the simplest example of this C++ problem. There are many examples when deleting should be done at some other place, perhaps in an outer function or another thread. That is why the use of new/delete in pairs should be completely avoided and appropriate smart pointers should be used instead.
Common mistakes : when we forgot Virtual Destructor
This is one of the most common errors that leads to memory leaks inside derived classes if there is dynamic memory allocated inside them. There are some cases when virtual destructor is not desirable, i.e. when a class is not intended for inheritance and its size and performance is crucial. Virtual destructor or any other virtual function introduces additional data inside a class structure, i.e. a pointer to a virtual table which makes the size of any instance of the class bigger.
However, in most cases classes can be inherited even if it is not originally intended. So it is a very good practice to add a virtual destructor when a class is declared. Otherwise, if a class must not contain virtual functions due to performance reasons, it is a good practice to put a comment inside a class declaration file indicating that the class should not be inherited. One of the best options to avoid this issue is to use an IDE that supports virtual destructor creation during a class creation.


One additional point to the subject are classes/templates from the standard library. They are not intended for inheritance and they do not have a virtual destructor. If, for example, we create a new enhanced string class that publicly inherits from std::string there is possibility that somebody will use it incorrectly with a pointer or a reference to std::string and cause a memory leak.
class FunString : public std::string
{
 ~FunString() {
 // ...
}
};

int main()
{
 std::string *s = new FunString();
 delete s; // May not invoke the destructor defined in FunString
}
To avoid such C++ issues, a safer way of reusing of a class/template from the standard library is to use private inheritance or composition.

Common Mistake : When Deleting an Array With “delete” or Using a Smart Pointer

Creating temporary arrays of dynamic size is often necessary. After they are not required anymore, it is important to free the allocated memory. The big problem here is that C++ requires special delete operator with [] brackets, which is forgotten very easily. The delete[] operator will not just delete the memory allocated for an array, but it will first call destructors of all objects from an array. It is also incorrect to use the delete operator without [] brackets for primitive types, even though there is no destructor for these types. There is no guarantee for every compiler that a pointer to an array will point to the first element of the array, so using delete without [] brackets can result in undefined behaviour too.
Using smart pointers, such as auto_ptr, unique_ptr<T>, shared_ptr, with arrays is also incorrect. When such a smart pointer exits from a scope, it will call a delete operator without [] brackets which results in the same issues described above. If using of a smart pointer is required for an array, it is possible to use scoped_array or shared_array from Boost or a unique_ptr<T[]> specialization.
If functionality of reference counting is not required, which is mostly the case for arrays, the most elegant way is to use STL vectors instead. They don’t just take care of releasing memory, but offer additional functionalities as well.

Common Mistake : When Returning a Local Object by Reference

This is mostly a beginner’s mistake, but it is worth mentioning since there is a lot of legacy code that suffers from this issue. Let’s look at the following code where a programmer wanted to do some kind of optimization by avoiding unnecessary copying:
Complex& SumComplex(const Complex& a, const Complex& b)
{
    Complex result;
    …..
    return result;
}

Complex& sum = TotalComplex(a, b);
The object “sum” will now point to the local object “result”. But where is the object “result” located after the TotalComplex function is executed? Nowhere. It was located on the stack, but after the function returned the stack was unwrapped and all local objects from the function were destructed. This will eventually result in an undefined behaviour, even for primitive types. To avoid performance issues, sometimes it is possible to use return value optimization:
Complex TotalComplex(const Complex& a, const Complex& b)
{
     return Complex(a.real + b.real, a.imaginar + b.imaginar);
}

Complex sum = TotalComplex(a, b);
For most of today’s compilers, if a return line contains a constructor of an object the code will be optimized to avoid all unnecessary copying - the constructor will be executed directly on the “sum” object.

Rcom



Reliance Communications Ltd and its unit Reliance Telecom Ltd have only Rs 19.34 crore in their combined 144 bank accounts, the companies said in affidavits submitted to the Delhi High Court. The Anil Ambani-led company, which shut down its wireless operations last year under the weight of Rs 46,000 crore in debt, slumping revenue and widening losses, revealed its bank holdings in a case filed by American Tower Corp.
The Boston-based tower company is said to be seeking dues of almost Rs 230 crore from RCom. 

RCom, which narrowly evaded being dragged into bankruptcy proceedings this year, informed the Delhi High Court that it has Rs 17.86 crore in 119 bank accounts, while its subsidiary RTL revealed it has a shade over Rs 1.48 crore across its 25 bank accounts. ET has reviewed the affidavits. 


Both companies, in affidavits filed in October, sought time from the court to produce their bank statements. The next hearing is on December 13. The tower company’s claims from RCom and RTL “add up to almost Rs 230 crore towards exit fees and service charges”, a person with knowledge of the matter told ET. The payments are for exiting tower lease agreements after RCom stopped wireless services in December. 


Mutual Fund PlatForm - Groww

Mutual Fund PlatForm - Groww

Groww launches direct plan mutual funds 


Rating : ****

There are no charges for investing in direct plans through Groww (Zero commission mutual funds).

In GROWW.in, all transactions to and from AMC is done via BSE.
When you decide to invest in a mutual fund of your choice, you choose that mutual fund on the website and click ‘invest’. 
Following that, you are redirected to the BSE page where you make the payment. BSE then directs your money to the AMC managing your mutual fund.

Is there any fees or charge involved?
Groww does not charge any fees to its customers


Thursday, November 8, 2018

DRX

DRX


Discontinuous Reception (DRX) 

One of the important activities performed by UE during RRC Idle mode is listening to paging message.

The UE should listen to the paging message to know about incoming calls. In LTE, the UE needs to monitor PDCCH continuously (every 1ms) for P-RNTI to listen to paging message and this drains UE battery power heavily. 

Instead, if the UE is allowed to monitor P-RNTI in PDCCH, only at predetermined period say every 60ms or 100ms, it will reduce UE’s power consumption.


The process of monitoring PDCCH discontinuously for P-RNTI to listen to paging message during RRC idle state is known as Discontinuous Reception (DRX) in RRC_Idle. 

This provides method for the UE to micro-sleep even in the active state to reduce power consumption while providing high QOS and connectivity. Meaning that UE is not monitoring the PDCCH in the given sub frame and it is allowed to go UE in a power saving mode.

Discontinuous Reception for Paging:

Paging is a procedure to transmit paging message to the UE in RRC Idle mode or EMM registered state. Paging message may be triggered either by MME in core network or eNB in Radio Access Network.

Paging information for the UE is being carried on the PDSCH in the resource blocks indicated by the PDCCH. 

Paging indication on PDCCH is single fixed indicator (FFFE) called the paging RNTI (P-RNTI)

Different group of UE's monitor different sub frames for their paging messages.

UE's in idle mode monitor the PDCCH channel for P-RNTI used for paging  to receive paging message from eNB.


The UE needs to monitor the PDCCH only at certain UE specific paging occasion, i.e. only at specific subframe in specific radio frame. At other times the UE may go for sleep mode to save battery power.

How UE can find out paging frame and paging occasion for its paging message:


Paging Frame (PF )   : One paging frame (PF) is one Radio 
                       Frame in which the UE is looking for 
                       paging message. One Paging Frame may 
                       contain one or multiple Paging 
                       Occasion(s).

Paging Occassion (PO): It is a sub-frame where there may be 
                       P-RNTI transmitted on PDCCH
                       addressing the paging message for the 
                       UE.There is always only one paging 
                       occasion for each UE in a DRX cycle.

To find out PF (Paging Frame) and PO (Paging Occasion ), the UE uses DRX parameters broadcasted in the system information SIB2.

What are the DRX Parameters ?

RSRP: DRx-and-DTx



1] DRX cycleIndicates the number of radio frames in the paging
            cycle. Larger the value of this parameter, lesser 
            the UE battery power consumption. 
            Whereas smaller the value of DRX cycle, increase in
            the UE battery power consumption

2] nB       : This cell specific parameter indicates number of 
            paging occasions in a cell specific DRX cycle.
            Configuration of nB value depends on paging
            capacity required in a cell. The larger the value 
            of nB is configured to, the larger the paging 
            capacity. Likewise, the smaller the paging capacity
            when the value of nB is smaller.

With this we can infer that a maximum of 1 radio frame is available per DRX cycle of the UE for paging. Also, the minimum
of 1 sub frame per radio frame (nB ≤ 1T) and maximum 
of 4 sub frames (for nB=4T) are available for paging message for the UE.


Calculation of Paging Frame Number:
Both the eNB and the UE calculate the Paging Frame number by the following relation:

Paging Frame Number = SFN mod T = (T/N) * (UE ID MOD N)


The eNB will receive UE_ID from the MME in PAGING S1AP message as "UE Identity Index Value" for MME initiated paging message.

The UE will find out the UE_ID by using the relation IMSI mod 1024

The IMSI is given as sequence of digits of type Integer (0..9). The IMSI shall, in the formulae above, be interpreted as a decimal integer number, where the first digit given in the sequence represents the highest order digit.

For example: IMSI = 12 (digit1=1, digit2=2). In the calculations, this shall be interpreted as the decimal integer "12", not "1x16+2 = 18".

Calculation of Paging Occasion (Paging Sub frame Number in a Paging Frame)

Paging Occasion is a function of i_s, Ns and predefined sub frame pattern i_s => Index pointing to predefined table corresponding subframe.

= Floor (UE_ID/N)MOD Ns

Paging Occasion for the UE is obtained from the predefined subframe pattern (36.304 section 7.2, shown below for quick reference) based on the value of Ns, i_s. For example, if Ns=2 and i_s = 1, UE interprets that sub frames 4 and 9 are configured for paging in the cell and subframe 9 is paging occasion for it.