Embodiment
Below in conjunction with accompanying drawing and example, the invention will be further described.
As shown in Figure 1.Leading scrambler generation module number generates leading scrambler according to scrambler, as the foundation of demultiplexing descrambling code, outputs to leading despreading module.Antenna data is at first sent into the lead data separation module, after handling through leading separation module, delivers to leading despreading module.Leading despreading module output multipath parameter merges module to leading PDP, and the symbol of leading in addition despreading module after by time delay order output despreading is to the FHT module.The PDP result that leading PDP merges on 2 antennas of module merges, and the PDP after the merging will serve the path detection module.Leading path detection module detects the multipath that is higher than threshold value.The result is outputed to the FHT module.The FHT module is exported multiple delay parameter on the one hand to seeking preferably footpath module, export FHT result on the other hand to signature energy computing module, on the multi-path location that the path detection module provides, the signature coherent integration result who utilizes the FHT module to provide calculates the PDP energy of a signature, pass through Threshold detection and judgement then, judge whether this footpath needs to continue to handle, if energy is higher than thresholding, then carry out the floating-point conversion, enter then to seek in N energy maximum diameter module and handle.Utilize N energy maximum diameter to carry out signature detection, export detected signature.Detected signature and multiple delay parameter estimate to detect the time shift and the frequency deviation of multipath in seeking best footpath module.
The present invention 16 the signature P0, P1, P2 ... P15, be divided into 4 groups, the 0th group comprises P0, P1, P2, P3, the 1st group comprises P4, P5, P6, P7, by that analogy.When carrying out signature detection, which group is known signature belong to, and that is to say that signature detection is that 4 signatures at certain signature group carry out.Detection of preamble must cover whole sub-district, considers round-trip delay, and detection window is 2 times of radius of society.The operand of detection of preamble is very big, is adopting software mode to carry out under the situation of detection of preamble, and above-mentioned hypothesis can reduce operand, thereby is a kind of measures necessary.Simultaneously, this hypothesis has proposed prerequisite to upper strata RRM algorithm.
Based on the consideration of operand, detection of preamble adopts the FHT algorithm equally.
Serve the FHT algorithm, before carrying out leading despreading, the scrambler generation module has carried out extracting the operation that separates to the scrambler that generates, concrete operations are the matrixes that scrambler write 4 row * 1024 row by row, make scrambler be separated into 4 scrambler fragments (1 scrambler fragment of every behavior), every scrambler fragment all is to extract every 4.Also will carry out same extraction lock out operation to antenna data, this operation is finished by the data separating module.After scrambler and antenna data had been carried out above-mentioned extraction lock out operation, leading despreading module can directly be carried out associative operation.
The functions of modules that needs concrete function to describe among Fig. 1 is described below:
1. leading scrambler generation module
This modularity function prototype is:
void?prach_generate_descram_code_c(const?prach_descrambling_params_t?*params)
The input parameter structure is as follows
typedef?struct?{
uint32 scram_code_number;
int32* scratch_buffer;
cbit16×2* descram_code;
uint32 signature_group;
}?prach_descrambling_params_t;
Functional description:
This module generates leading scrambler, and it is extracted separating treatment, to make things convenient for the processing of FHT module.The leading scrambler here is actually " lead code " in the 3gpp agreement TS25.213, and variable has partly been carried out gripping altogether processing.The structure of the leading scrambler that produces as shown in the formula:
Sr-pre, n and Csig, s are " leading scrambler " and " preamble signature " in the 3gpp agreement TS25.213.
The leading scrambler that generates has carried out the extraction lock out operation, it is 4096 scrambler writes 4 row * 1024 row by row matrixes that concrete operations are equivalent to length, making scrambler be separated into 4 length is 1024 scrambler fragment, and scrambler fragment of every behavior, each scrambler fragment all are to extract rules every 4.
Input parameter:
Params points to the pointer of input parameter structure prach_descrambling_params_t;
The leading scrambler of scram_code_number number 0 ~ 8191;
Scratch_buffer points to the pointer of scratch buffer.Scratch buffer size is 128 * 32bits, is used for depositing scrambler (4096bits) temporarily;
Descram_code deposits the memory address of scrambler, begins to deposit the scrambler of generation from this address.This memory headroom size is 256 * 32bits.The scrambler that generates is the multiple scrambler form of binary system;
The signature_group group number of signing, 0~3.The signature group that indication will detect.
Output parameter:
Leading scrambler.Leave in 256 32bits words that address descram_code begins.This scrambler is the multiple scrambler form (cbit16 * 2) of binary system, has passed through the extraction lock out operation, and 4 scrambler fragment cascades are deposited.The signature that is used to construct this scrambler is the 1st signature in the signature_group signature group.
2. lead data separation module:
This modularity function prototype is
void?prach_data_demux_c(const?prach_data_demux_params_t?*params)
The input parameter structure is
typedef?struct?{
cint2×16*?antenna_0_input;
cint2×16*?antenna_0_demux;
cint2×16*?antenna_1_input;
cint2×16*?antenna_1_demux;
uint32 num_chips;
}?prach_data_demux_params_t;
Functional description:
This module extracts separation to antenna data, for the FHT algorithm is prepared.Concrete rule is consistent to the extraction lock out operation of scrambler with the scrambler generation module.The antenna data number of chips (plural number) that need handle altogether is num_chips, then extract the matrix that lock out operation is equivalent to these chip data are write by row 4 row * num_chips/4 row, each row is an antenna data fragment, and each antenna data fragment all is to extract rule every 4.
Extracting lock out operation carries out respectively on two antennas.
Input parameter:
The pointer of antenna_0_input directional antenna 0 data.The antenna data here is the 1x spreading rate, and depositing form is cint2 * 16,2 plural chips of each 32 word storage, and low 16 is chip 0, high 16 is chip 1.Each chip data, least-significant byte is represented the I road, most-significant byte is represented the Q road;
The pointer of antenna_0_demux directional antenna 0 output buffer.This buffering area is deposited the result after antenna 0 data pick-up separates;
The pointer of antenna_1_input directional antenna 1 data;
The pointer of antenna_1_demux directional antenna 1 output buffer;
Num_chips chip number to be processed.
Output parameter:
Result after antenna 0 data pick-up separates leaves the buffering area that antenna_0_demux points in, and buffer size is num_chips/2 * 32bits, and depositing form is that cint2 * 16,4 a data slot cascade leaves this buffering area in; Result after antenna 1 data pick-up separates leaves the buffering area that antenna_1_demux points in, and buffer size is num_chips/2 * 32bits, and depositing form is that cint2 * 16,4 a data slot cascade leaves this buffering area in.
3. leading despreading module:
The function prototype of this module is
void?prach_despread_c(const?prach_despread_params_t?*params)
The input parameter structure is
typedef?struct?{
cint2×16*?antenna0_data;
cint2×16*?antennal_data;
cbit16×2*?descrambling_code;
uint32 data_offset;
uint32 num_chips;
uint32 num?all_chips;
cint1×32*?coherent_output0;
uint32* PDP_output0;
cint1×32*?coherent_output1;
uint32* PDP_output1;
}?prach_despread_params_t;
Functional description:
This module is finished the despreading of lead code.Here so-called " despreading " comprises the calculating of " coherent integration " and " PDP ".Coherent integration is the result that 4 scrambler fragments generating of scrambler generation module and 4 data fragments of data separating module generation are carried out coherent accumulation respectively, so each the window's position provides 4 " coherent integration " results.PDP is the mould value square result who adds up to 4 coherent integration results, owing to be the PDP that provided before signature detection, it is the PDP of whole signature group.
To calling of this module at every turn, carry out the detection of 64 continuous the window's positions (chip), provide 64 PDP values and 256 coherent integration values.
Leading de-spreading operation carries out respectively on two antennas.
Covering bigger window can repeatedly call this module.
Input parameter:
The pointer of antenna0_data directional antenna 0 data.These data are that depositing form is cint2 * 16 through the result after the data separating resume module;
The pointer of antenna1_data directional antenna 1 data.These data are that depositing form is cint2 * 16 through the result after the data separating resume module;
Descrambling_code points to the pointer of leading scrambler.This scrambler is the output result of leading scrambler generation module, and depositing form is cbit16 * 2;
Data_offset is to the extraction starting point of the antenna data side-play amount with respect to each data slot (4 data fragment stage connect deposit).This module is called the detection of carrying out 64 continuous the window's positions at every turn, and 16 sampling points promptly advance on each data slot.So the representative value of data_offset is got 16 multiples;
The length of each data slot of num_chips---number of chips;
Total length---the number of chips of 4 data fragments of num_all_chips (cascade is deposited);
The pointer of coherent_output0 directional antenna 0 coherent integration output buffer.This buffering area is deposited the coherent integration result of antenna 0, and size is 256 * 32bits, and depositing form is cint1 * 32.
The pointer of PDP_output0 directional antenna 0PDP output buffer.This buffering area is deposited the PDP result of antenna 0, and size is 64 * 32bits.
The pointer of coherent_output1 directional antenna 1 coherent integration output buffer.This buffering area is deposited the coherent integration result of antenna 1, and size is 256 * 32bits, and depositing form is cint1 * 32.
The pointer of PDP_output1 directional antenna 1PDP output buffer.This buffering area is deposited the PDP result of antenna 1, and size is 64 * 32bits.
Output parameter:
The coherent integration result of antenna 0 leaves the buffering area that coherent_output0 points in;
The PDP result of antenna 0 is left the buffering area that PDP_output0 points in;
The coherent integration result of antenna 1 leaves the buffering area that coherent_output1 points in;
The PDP result of antenna 1 is left the buffering area that PDP_output1 points in;
4. leading PDP merges module
The function prototype of this module is
uint32?prach_combine_pdp_c(const?prach_combine_pdp_params_t?*params)
The input parameter structure is:
typedef?struct?{
uint32* PDP0;
uint32* PDP1;
uint32 length;
uint32* PDP_output;
}?prach_combine_pdp_params_t;
Functional description:
This module merges the PDP result on 2 antennas.The PDP of two antennas is from leading despreading module.Union operation is that the PDP to two antennas simply adds up.PDP after the merging will serve the path detection module.
When carrying out the PDP merging, this module provides the maximum PDP energy value after the merging.
Input parameter:
The pointer of PDP0 directional antenna 0 PDP.Antenna 0 PDP is provided by leading despreading module.
The pointer of PDP1 directional antenna 1 PDP.Antenna 1 PDP is provided by leading despreading module.
The length of length antenna 0 and antenna 1 PDP.
PDP_output points to the pointer of PDP output buffer.This buffering area is deposited the PDP after the merging.
Output parameter:
PDP after the merging.Leave the buffering area that PDP_output points in.
Maximum PDP energy (return value) after the merging.
5. leading path detection module
The function prototype of this module is
uint32?prach_path_detection_c(const?prach_path_detection_params_t*?params)
The input parameter structure is
typedef?struct?{
uint32* power_delay_profile;
uint32 input_size;
uint32 threshold;
uint32* offset_indices;
}prach_path_detection_params_t;
Functional description:
The PDP that this module utilizes PDP merging module to provide carries out multipath and detects.
Detection threshold also is an input parameter.
The PDP energy that is higher than threshold value has been considered to indicate the existence of multipath.
Input parameter:
Power_delay_profile points to the pointer of PDP.This PDP is the result after two PDP on the antenna merge, and merges module by PDP and provides.
The input_size indication needs the PDP energy number of processing.
Threshold multipath detection threshold.The PDP energy that is higher than this thresholding has been considered to indicate the existence of multipath.
Offset_indices points to the pointer of multi-path location buffering area.This buffering area is used for depositing the position of the multipath that finds, and multi-path location is to represent with the corresponding subscript of PDP energy in the PDP array.
Output parameter:
Multi-path location leaves the buffering area that offset_indices points in.Multi-path location is represented with the corresponding subscript of PDP energy in the PDP array.
Multipath number (return value).
6.FHT module
The function prototype of this module is
void?prach_fht_c(const?prach_fht_params_t*params)
The input parameter structure is
typedef?struct {
cint1x32* input_antenna0;
cint1x32* input_antenna1;
uint32 num_fht;
uint32* ignored_OffsetArray;
cint1x32* complex_profile0_sig0;
cint?1x32* complex_profile0_sig1;
cint1x32* complex_profile0_sig2;
cint1x32* complex_profile0_sig3;
cint1x32* complex_profile1_sig0;
cint1x32* complex_profile1_sig1;
cint1x32* complex_profile1_sig2;
cint1x32* complex_profile1_sig3;
}prach_fht_params_t;
Functional description:
This module is carried out the FHT algorithm.Complete FHT algorithm is actually that leading scrambler generation module, data separating module, leading despreading module and this module finish jointly.
Call leading despreading module at every turn, provide the testing result of continuous 64 the window's positions, wherein each the window's position provides 4 coherent integration results.The FHT module utilizes 4 coherent integration results of each the window's position to calculate this window's position place, the coherent integration result of 4 signatures in the signature group.
The FHT module is finished the computing shown in the following formula,
The formula left side is the coherent integration result of each signature in the signature group that provides.The 1st on formula right side is 2 rank hadamard matrixes, and the 2nd is 4 coherent integration results on a window's position.
The FHT computing is carried out respectively on two antennas.
Input parameter:
The pointer of input_antenna0 directional antenna 0 data.Antenna 0 data here are the coherent integration results that leading despreading module provides.The deposit data form is cint1 * 32.
The pointer of input_antennal directional antenna 1 data.Antenna 1 data here are the coherent integration results that leading despreading module provides.The deposit data form is cint1 * 32.
Num_fht carries out the number of times of FHT computing.A FHT computing calculates the coherent integration result of 4 signatures an of the window's position, so num_fht equals to carry out the window width of FHT computing.
This parameter of ignored_OffsetArray is not used at present.
Complex_profile0_sig0 points to the pointer of the coherent integration output buffer of (antenna 0, signature 0)." signature 0 " refers to No. 0 signature in the signature group.This buffering area is deposited the coherent integration result of No. 0 signature in the signature group, and buffer size is num_fht * 32bits, and depositing form is cint1 * 32.
Complex_profile0_sig1 points to the pointer of the coherent integration output buffer of (antenna 0, signature 1)." signature 1 " refers to No. 1 signature in the signature group.This buffering area is deposited the coherent integration result of No. 1 signature in the signature group, and buffer size is num_fht * 32bits, and depositing form is cint1 * 32.
Complex_profile0_sig2 points to the pointer of the coherent integration output buffer of (antenna 0, signature 2)." signature 2 " refers to No. 2 signature in the signature group.This buffering area is deposited the coherent integration result of No. 2 signature in the signature group, and buffer size is num_fht * 32bits, and depositing form is cint1 * 32.
Complex_profile0_sig3 points to the pointer of the coherent integration output buffer of (antenna 0, signature 3)." signature 3 " refers to No. 3 signature in the signature group.This buffering area is deposited the coherent integration result of No. 3 signature in the signature group, and buffer size is num_fht * 32bits, and depositing form is cint1 * 32.
Complex_profile1_sig0 points to the pointer of the coherent integration output buffer of (antenna 1, signature 0)." signature 0 " refers to No. 0 signature in the signature group.This buffering area is deposited the coherent integration result of No. 0 signature in the signature group, and buffer size is num_fht * 32bits, and depositing form is cint1 * 32.
Complex_profile1_sig1 points to the pointer of the coherent integration output buffer of (antenna 1, signature 1)." signature 1 " refers to No. 1 signature in the signature group.This buffering area is deposited the coherent integration result of No. 1 signature in the signature group, and buffer size is num_fht * 32bits, and depositing form is cint1 * 32.
Complex_profile1_sig2 points to the pointer of the coherent integration output buffer of (antenna 1, signature 2)." signature 2 " refers to No. 2 signature in the signature group.This buffering area is deposited the coherent integration result of No. 2 signature in the signature group, and buffer size is num_fht * 32bits, and depositing form is cint1 * 32.
Complex_profile1_sig3 points to the pointer of the coherent integration output buffer of (antenna 1, signature 3)." signature 3 " refers to No. 3 signature in the signature group.This buffering area is deposited the coherent integration result of No. 3 signature in the signature group, and buffer size is num_fht * 32bits, and depositing form is cint1 * 32.
Output parameter:
The coherent integration result of (antenna 0, signature 0) leaves the buffering area that complex_profile0_sig0 points in;
The coherent integration result of (antenna 0, signature 1) leaves the buffering area that complex_profile0_sig1 points in;
The coherent integration result of (antenna 0, signature 2) leaves the buffering area that complex_profile0_sig2 points in;
The coherent integration result of (antenna 0, signature 3) leaves the buffering area that complex_profile0_sig3 points in;
The coherent integration result of (antenna 1, signature 0) leaves the buffering area that complex_profile1_sig0 points in;
The coherent integration result of (antenna 1, signature 1) leaves the buffering area that complex_profile1_sig1 points in;
The coherent integration result of (antenna 1, signature 2) leaves the buffering area that complex_profile1_sig2 points in;
The coherent integration result of (antenna 1, signature 3) leaves the buffering area that complex_profile1_sig3 points in.
7. signature energy computing module
The function prototype of this module is
void?prach_energy_calc_c(prach_energy_calc_params_t?*params)
The input parameter structure is
typedef?struct?{
cint1×32* complex_profile0;
cint1×32* complex_profile1;
uint32 num_inputs;
uint32* offset_indices;
uint32* energy_profile;
uint32 max_energy;
int32 reserved0;
int32 reserved1;
}prach_energy_calc_params_t;
Functional description:
This module is on the multi-path location that the path detection module provides, and the signature coherent integration result who utilizes the FHT module to provide calculates the PDP energy of a signature.
What calculate here is the PDP energy of each signature, and the PDP (PDP of signature group) that merges resume module with PDP is different.Each PDP that only calculates 1 signature, the PDP of 4 signatures need call this module respectively and calculate.
Input parameter:
The signature coherent integration result's of complex_profile0 directional antenna 0 pointer.This coherent integration is the result provided by the FHT module, and storage format is cint1 * 32.
The signature coherent integration result's of complex_profile1 directional antenna 1 pointer.This coherent integration is the result provided by the FHT module, and storage format is cint1 * 32.
Num_inputs indication multipath number.This parameter is provided by the path detection module.
Offset_indices points to the pointer of multi-path location information.Multi-path location is provided by the path detection module.Multi-path location is the corresponding subscript of PDP energy in the PDP array.
Energy_profile points to the pointer of the buffering area of output signature PDP.This buffering area is used to deposit the signature PDP that calculates.Buffer size is num_inputs * 32bits.
Output parameter:
Signature leaves the buffering area that energy_profile points at the energy of multi-path location.
The max_energy signature is at the ceiling capacity of multi-path location.Be used for the floating-point modular converter and carry out energy normalized.
8. floating-point modular converter
The function prototype of this module is
void?prach_block_fp_convert_c(const?prach_block_fp_params_t?*params)
The input parameter structure is
typedef?struct?{
uint32* energy_profile;
uint2×16* block_fp_profile;
uint32 profile_length;
uint32 max_energy;
}?prach_block_fp_params_t
Functional description:
The ceiling capacity of this module utilization signature carries out normalization (so-called " floating-point conversion ") to the PDP of signature, and the subscript of signature PDP energy is encoded in the normalized energy, after making things convenient for sorting operation, find the position of energy in original signature PDP easily.
The highest non-0 that supposes maximum signature energy max_energy is N (LSB is the 1st), following the carrying out of normalization operation of energy value energy:
energy_norm=
energy/(2
N-8)
Expression rounds downwards.Energy energy_norm after the normalization is the signless integer of 16bits width, and actual significance bit is a least-significant byte.
Following the carrying out of target coding at first, moves to left 8 with the energy energy_norm after the normalization under the energy, makes the available energy value move on to most-significant byte, and least-significant byte is used for depositing energy subscript coding, i (i=0,1,2 ..., i≤255) the bar multipath be encoded to 255-i.This coding can find the home position of energy on the one hand easily behind energy ordering, can not change the energy ordering result on the one hand.
Input parameter:
Energy_profile points to the pointer of signature energy.The signature energy is provided by signature energy computing module.
Block_fp_profile points to the pointer of floating-point energy output buffer.This buffering area is deposited normalization and has been carried out the signature energy of the pseudo-relocatable of energy subscript coding.Depositing form is uint2 * 16, and just 2 16 potential energies deposited in each 32bit word, and low 16 is energy 0, and high 16 is energy 1.
This value of profile_length is taken as 1/8 of energy number.
The ceiling capacity of max_energy signature.This parameter is provided by signature energy computing module, is used for the signature energy is carried out normalization.
Output parameter:
The signature energy of pseudo-relocatable leaves the buffering area that block_fp_profile points in.
9. seek N ability maximum diameter module
The function prototype of this module is
void?prach_search_max_c(const?prach_search_max_params_t?*params)
The input parameter structure is
typedef?struct?{
uint2×16* block_fp_profile;
uint32* output_buffer;
uint32 input_length;
uint32 N_max;
}prach_search_max_params_t;
Functional description:
This module finds N_max ceiling capacity on the pseudo-floating-point signature energy that the floating-point modular converter provides.
Input parameter:
Block_fp_profile points to the pointer of pseudo-relocatable signature energy.Pseudo-floating-point signature energy is provided by the floating-point modular converter.
Output_buffer points to the pointer of output ceiling capacity buffering area.This buffering area is used to deposit the maximum energy value that finds.
This value of input_length is set to 1/32 of pseudo-floating-point energy number.
The number of the ceiling capacity that N_max will search.
Output parameter:
Maximum signature energy leaves the buffering area that output_buffer points in.
Should be noted that all any improved methods that does not break away from inventive concept all belong to protection scope of the present invention, the concrete protection range of the present invention is defined by the claims.