IMPROVED REVERSE PATH AUTOGAIN CONTROL

Abstract: In a wireless microcell distribution system, a method is provided for level adjustment of signals from the microcells in which a shortened gain tone is used to minimize interference with a phone call. The gain tones for the primary and diversity receive paths from a microcell, rather than being generated simultaneously, are brought up independently. In one embodiment, each of the gain tones is limited to 120 milliseconds. Gain tone measurement is likewise done on an independent basis so that rather than both of the gain tones being on simultaneously for the entire measurement period, each of the gain tones only needs to be on for that portion of the measurement period corresponding to the measurement of the gain tone for the primary or diversity receive path. Additionally, the absolute amplitude of the gain tones is reduced to minimize the impact of the automatic gain control on the system. Moreover, in one embodiment, rather than being injected at the primary and diversity circulators coupled to the primary and diversity receiving antennas, the shortened gain tones are injected after the first down-conversion stages so that the power level at which the gain tones are injected can be increased, thus to reduce vulnerability to noise.

Description: TITLE OF INVENTION IMPROVED REVERSE PATH AUTOGAIN CONTROL COMPUTER PROGRAM APPENDIX The specification is followed by a Computer Program Appendix appearing before the claims. FIELD OF INVENTION This invention relates to wireless microcell distribution systems and more particularly to a reverse path autogain control system which generates shortened reduced-amplitude gain tones. BACKGROUND OF THE INVENTION In wireless microcell distribution systems involving the receipt of signals from a number of microceUs which are simultaneously transmitted to a summation point in a simulcast mode, there is a requirement that the reverse path signals from the microceUs be level adjusted to the same level so that the area of coverage of the various microceUs is not diminished when an out- of-balance situation occurs. This can occur if signals from one microcell are significantly higher than those from another microcell. What happens in such a case is that a wireless handset at the fringe of the coverage area for a given microcell may have to approach the microcell in order that its signal will be detected. The reason that the coverage area of a microcell having a lower output is diminished is that the system will detect the higher level signals from out-of-adjustment microceUs and concomitantly reject signals from microceUs which are below this level. The net result is that in fringe areas, calls are dropped. It is therefore a requirement that in a wireless microcell signal distribution system all of the signals from the microceUs on the reverse path be at the same level. In a typical wireless microcell distribution system, each microcell has a transceiver and other circuits referred to as a cable microcell integrator. Signals from the cable microcell integrators are summed and coupled to a head end interface converter which, among other things, processes return path signals and forwards them to a base station. In the past, as described in U.S. Patent Application Serial No. 08/998,874, filed December 24, 1997 by John Sabat, Jr., incorporated herein by reference and assigned to the assignee hereof, automatic level adjustment has been accomplished through the generation of a gain tone at the cable microcell integrator and transmitting this gain tone back to the head end interface converter, where its amplitude is measured. After measuring the amplitude for a given gain tone, the head end interface converter sends a message to the cable microcell integrator to adjust attenuators at the cable microcell integrator to bring the signals that arrive at the head end interface converter to a standard level. It will be appreciated that each cable microcell integrator has a primary and diversity antenna, the purpose of which is to compensate for the effects of fading or phase cancellation at the microcell. In the past, gain tone generators were provided to inject gain control signals before the first down-conversion stages of each of the receivers to inject the gain tones along the primary and diversity path back to the head end interface converter. The tones injected before the first down-conversion stage proved difficult to control. While the aforementioned system works quite well, the duration of the gain tones exceeded 800 milliseconds, which had the possibility of interfering with the telephony signals transmitted back to the head end interface converter. In certain instances the duration of the gain tones were such as to compete with the telephony signals. The longer the duration of the gain tone, the higher the probability of interference with the telephony signals. Moreover, the higher the amplitude of the gain tones, the higher the probability of interference with the telephony signals, making it desirable to provide a system in which gain tone amplitude is reduced. Additionally, in the above-mentioned system, each cable microcell integrator is instructed by the head end interface converter to turn on its respective gain tone generators simultaneously. After receipt of a sufficient amount of gain tone, the head end interface converter then instructs the cable microcell integrator to stop the transmission of the gain tones. The result is that all of the timing for the generation of the gain tones is accomplished at the head end interface converter as opposed to at the cable microcell integrator, thus effectively elongating the duration of the gain tones and making the overall system somewhat less efficient. SUMMARY OF THE INVENTION In contradistinction to the above described system, the subject system generates each of the gain tones for the primary and diversity paths independently, such that the gain tone for the primary path is turned on and then turned off, followed by the turning on and off of the gain tone for the diversity path. It has been found that with such a scheme the gain tones need not be on continuously for the entire measurement period. Importantly, it has been found that the duration of the gain tones can be dramatically reduced to decrease interference and still provide a robust system. In one embodiment, rather than being at 400 milliseconds each, the duration of each of the gain tones is reduced to 100 milliseconds each. What this means is that the gain tones rather than being on simultaneously for a total of 800 or more milliseconds, now are on independently for only 120 milliseconds for each path, thus to minimize interference with the telephony signals coming from the microcell back to the head end interface converter. Additionally, the amplitude of the gain tones is pre-set below the cumulative level for the reverse path signals from the cable microcell integrators. This is in contrast to setting the gain tone amplitudes at the maximum allowed cumulative amplitude for the carriers. For six cable microcell integrators, the cumulative permissible level is -93dBm. The level of the gain tones in one embodiment is set lOdB down from this -93dBm level. It will be appreciated that for the subject purposes, while signals from six cable microcell integrators are described, the number of reverse path signals depends on the number of cable microcell integrators summed at a given point. As can be seen, the gain tone amplitudes can be reduced to minimize interference. Moreover, the duration of the gain tones can be reduced to minimize interference. Additionally, each of the cable microcell integrators is provided with a timer which times the start and stop of each gain tone, with the head end interface converter providing a message to the cable microcell integrator as to when to start each of the tones and when to stop them. Thus, the timing for the gain control tones is controlled at the cable microcell integrator upon receipt of a message from the head end interface converter, making for a more efficient automatic gain control system. Additionally, at the head end interface converter an algorithm is provided for setting the window for the measurement of the amplitude of the gain tones such that the measurement window is delayed from the expected onset of the gain tone by an amount sufficient to prevent mis-measurement. As a result, a robust, automatic reverse path gain control system is provided to be able to level adjust the reverse path transmissions from the cable microcell integrators to prevent reduction in the coverage area of a given microcell due to imbalance of the signals at the head end interface converter. Additionally, rather than injecting the gain control tones at the primary and diversity circulators coupled to the primary and diversity receiving antennas, the shortened gain tones are injected after the first down-conversion stage for the primary and diversity paths, thereby permitting greater control over gain tone amplitude. In summary, in a wireless microcell distribution system, a method is provided for level adjustment of signals from the microceUs in which a shortened gain tone is used to minimize interference with a phone call. Moreover, the gain tones for the primary and diversity receive paths from a microcell, rather than being generated simultaneously, are brought up independently to minimize interference with phone calls. In one embodiment, each of the gain tones is limited to 120 milliseconds each, such that the total duration of a gain tone in a primary or diversity path is limited to 120 milliseconds. Gain tone measurement is likewise done on an independent basis so that rather than both of the gain tones being on simultaneously for the entire measurement period, each of the gain tones only need to be on for that portion of the measurement period corresponding to the measurement of the gain tone for the primary or diversity receive path. Additionally, the absolute amplitude of the gain tones is reduced to minimize the impact of the automatic gain control on the system. Moreover, in one embodiment, rather than being injected at the primary and diversity circulators coupled to the primary and diversity receiving antennas, the shortened gain tones are injected after the first down-conversion stages so that the power level at which the gain tones are injected can be increased, thus to reduce vulnerability to noise. BRIEF DESCRIPΗON OF THE DRAWINGS These and other features of the subject invention will be better understood in connection with the Detailed Description in conjunction with the Drawings of which: Figure 1 is a diagrammatic illustration of the coverage area of multiple microceUs and the reduction of the coverage area with an imbalance between the microceUs; Figure 2 is a block diagram of a wireless microcell distribution system in which signals from a number of cable microcell integrators are summed and provided to a head end interface converter coupled to a base station; Figure 3 is a block diagram illustrating the injection of gain tones on the signals from the primary and diversity antennas of a cable microcell integrator which are detected and measured at a head end interface converter, with the head end interface converter providing a message back to the cable microcell integrator to adjust attenuators in the primary and diversity paths such that amplitudes of the reverse path signals from the cable microcell integrators at the summation point of Figure 2 can be level adjusted and made equal; Figure 4 is a waveform diagram showing the generation of gain tones in a prior system in which the duration of the gain tones for the primary and diversity paths total 800 milliseconds; Figure 5 is a waveform diagram in the frequency domain for the carriers and gain tones of the system of Figure 4, indicating the positioning of the gain tones within the band set for each of the reverse path carriers, with the head end interface converter sampling gain tones of a first frequency corresponding to the primary path and a second frequency corresponding to the diversity path; Figure 6 is a waveform diagram of the generation of the gain tones for the subject system indicating that the gain tones are generated independently and sequentially, with the gain tones being of limited duration; Figure 7 is a waveform diagram in the frequency spectrum of the generation of the gain tones for the primary and diversity paths, indicating independent measuring of each of the tones, with the tones having an amplitude which is set at the maximum amplitude allowed for the respective carrier; Figure 8 is a schematic diagram of the combined amplitudes of the carriers from six cable microcell integrators, indicating that the gain tones in the subject invention are to be below the maximum level, in one embodiment by lOdB, to reduce potential interference with the associated telephony signals; Figure 9 is a block diagram of the subject system indicating that it is the head end interface converter which provides a message to a given cable microcell integrator to turn on the gain tones for the respective primary and diversity paths, indicating that timing for the start and stopping of the gain tones is within the cable microcell integrator; Figure 10 is a waveform diagram illustrating the measurement window at the head end interface converter for detecting the shortened gain tones in which a known fixed delay is provided to assure that the cable microcell integrator gain tone has settled down to the point where an accurate amplitude measurement can be made; Figure 11 is a block diagram illustrating the utilization of a temperature sensor at each cable microcell integrator, the output of which is transmitted to the head end interface converter on the reverse path, with the head end interface converter having a temperature compensation table so as to alter the message sent to the attenuators in a cable microcell integrator such that these attenuators can be set taking into account the temperature sensed at the microcell; and, Figure 12 is a block diagram of the circuit utilized in a cable microcell integrator for generating the gain tones and providing them back to the head end interface converter. DETAILED DESCRIPTION Referring now to Figure 1, in a typical wireless microcell distribution system a number of microceUs 10, 12 and 14 functioning as cell sites provide signals back on a reverse path to a summation unit 16 which is coupled to a head end interface converter 18 for providing the telephony signals received from a handset 20 back to a base station. It will be appreciated that the signals from the microceUs are provided, in the instant case, over a network in which the amplitude of the signals from each of the microceUs along paths 22, 24 and 26 vary in amplitude due primarily to temperature differences at the microceUs. As mentioned hereinbefore, each microcell includes a cable microcell integrator. For each cable microcell integrator, solar shading or varying wind conditions can provide significantly different internal equipment temperatures at the various microceUs. The result is that at the summation point signals from some of the cable microcell integrators are considered "hot" in that they may be as much as 10 dB above a preset maximum level. Thus, for instance, if the signals on paths 24 and 26 are 10 dB higher than this level, signals along path 22 will in essence be swamped by these signals. The net result is that the coverage area for microcell 10 is decreased due to this imbalance as illustrated by dotted circles 30, 32 and 34. If the imbalance is allowed to exist, numerous dropped calls can be expected. Referring now to Figure 2, a wireless microcell distribution system is depicted in which a number of cable microcell integrators 40, 42, 44 and 46 each having respective primary and diversity antennas 48 and 50 provide signals back to a summation point 52 along a reverse path. The result of receipt of signals at the primary and diversity antennas from a handset here illustrated at 53 is a carrier from each of these cable microcell integrators. Primary and diversity signals on this carrier are transmitted back through summation point 52 to a head end interface converter 54 and thence to a base station 56. As illustrated in Figure 3, cable microcell integrator 40 is provided with gain tone generators 60 and 62 respectively in the primary and diversity reverse paths. The outputs of each of these gain control generators are provided to respective transceivers 64 and 66, CDMA receivers in one embodiment, and thence through adjustable attenuators 68 and 70 back to head end interface converter 54. This provides gain tones, the amplitudes of which are measured by the head end interface converter. As illustrated by waveform 72, each of the primary and diversity path carriers 74 and 76 carries the appropriate gain tone, here illustrated at 78 and 80. In one embodiment, these gain tones are offset from the center frequency of the primary and diversity channels by 400 KHz and have a duration of 400 milliseconds each. Referring now to Figure 4, the gain tones for the primary and diversity paths are shaded, with the shaded portions 82 and 84 illustrating that the total duration of the gain tones is on the order of 800 milliseconds. This is so that regardless of the time window in which these gain tones are sampled as illustrated by waveforms 86 and 88 respectively, the gain tones are on continuously for the measurement period. What will be appreciated is that in the prior system, regardless of the measurement windows at the head end interface converters, the gain tones were on for the full 800 milliseconds Referring now to Figure 5, as can be seen from waveforms 90 and 92, the amplitude of the associated gain tones in each of the primary and diversity reverse paths is illustrated at 94 and 96. For the primary reverse path, sampling is done at the time illustrated by arrow 98, whereas in the diversity path the sampling is done at the time illustrated by arrow 100. Thus, while the sampling is done in a sequential manner, as illustrated in Figure 4 the generation of the gain tones is such that both are on all the time during the combined sampling window. Referring now to Figure 6, rather than having the gain tones on all the time, in the subject system the gain tone for the primary reverse path, here illustrated at 102, is limited to 100 milliseconds in one embodiment, whereas the gain tone for the diversity path, here illustrated at 104, is likewise 100 milliseconds. What will be apparent is that the two gain tones are not turned on simultaneously but rather sequentially by the subject system. As such, the tones are generated independently. Moreover as illustrated in Figure 7 the corresponding gain tone amplitudes 106 and 108 are designed in amplitude to be less than those associated with envelopes 110 and 112. More specifically, and referring now to Figure 8 assuming signals from six different cable microcell integrators are coupled to a summation point, then the total amplitude as illustrated by carrier level 120 is set to be no more than -93dBm. It has been found by utilizing the subject system that gain tone 122 can be set 10 dB down from carrier level 120 and still be robustly received and measured. The result of a decreased amplitude gain tone plus a decreased duration gain tone virtually eliminates any problem of interference of the gain tones with the telephony signals in the reverse path. More specifically and referring now to Figure 9, in the subject system head end interface converter 54 is provided with message generators 124 and 126 which control the gain tone generators in the cable microcell integrators for the primary and diversity paths. In this case, cable microcell integrator 40 is provided with a decoder for decoding the messages from the head end interface converter such that a decoder 128 decodes the messages for the primary path gain tone and for the diversity path gain tone at 130. The decoded messages are provided to units 132 and 134 to activate the respective gain tones for the required amount of time, with each of these units provided with clock signals from a clock 136. In operation, the head end interface converter sends a message to the cable microcell integrator to turn on its respective gain tones. Thereafter, units 132 and 134 activate the gain tone generators to provide for the start and stop of each gain tone at the appropriate time. In this way, the generation of the gain tones is timed at the cable microcell integrator in response to a message from the head end interface converter. Referring to Figure 10, at the head end interface converter, the windows for the detection and measurement of the amplitude of the gain tones are set as illustrated by waveforms 140 and 142 respectively. It will be noted that in one embodiment the window for receiving a cable microcell integrator generated gain tone is nominally set at 120 milliseconds, with the head end interface converter measurement window being set at a nominal 88 milliseconds. The head end interface converter is provided with a programmable delay 144 which can be set so as not to miss the gain tone. In this way delays associated with the distance of the cable microcell integrator to the head end interface converter can be accommodated. Delays or losses due to the distance as well as temperature variations can be compensated directly at the head end interface converter so as to make the receipt of the gain tones robust. Referring now to Figure 11, in one embodiment, a temperature sensor 150 is provided in cable microcell integrator 40 which senses the temperature on a real time basis and provides it back over a reverse channel 151 to a temperature compensation table 152 within head end interface converter 54. Here the gain tone is illustrated as being transmitted along the reverse path 154 to the measurement unit 155 within the head end interface converter. This measurement unit measures the absolute amplitude and generates a message at 156 which is then sent back to the attenuators 158 within the cable microcell integrator. The message sent is altered from that established by the absolute amplitude measured at 155, with the temperature compensation table utilized to fine tune that point at which attenuators 158 are set. In this manner, exceedingly fine control is exercised over the output from each cable microcell integrator such that fine balancing can be achieved. Referring now to Figure 12, in one embodiment the circuits within the cable microcell integrator are illustrated. Signals from the primary and diversity antennas are coupled to respective circulators 160 and 162 which are connected to appropriate band pass filters and amplifiers 164 and 166. A local oscillator 168 is coupled to a splitter 170 which provides signals to mixers 172 and 174 in the respective channels. The purpose of this mixing operation is to down convert the signals from the primary and diversity antennas. In a preferred embodiment, the outputs of these mixers are connected to couplers 176 and 178 to which are applied gain tones generated at 180 and 182. It is the mixing of the gain tones at this down convert stage as opposed to at the antennas that provides for easily generated gain tones with the approximately high amplitudes. If the gain tones are injected before down-conversion, typically at 2 GHz, then obtaining adequate gain tone amplitude is difficult due to the high frequency involved. Injection after the first down-conversion stage solves this problem. The outputs of couplers 176 and 178 are applied respectively to saw filters and amplifiers 180 and 182 which are then coupled to attenuators 184 and 186 which have their attenuations adjusted in accordance with the messages sent from the head end interface converter. The outputs of the attenuators are then down converted by mixers 190 and 192 which are supplied with the outputs of local oscillators 194 and 196 respectively. The down converted result is applied to a power divider 198, the output of which is then coupled to a band pass filter/amplifier 200 and to a further attenuator 202, through splitter 204, an amplifier and band pass filter 206 and thence to a transformer coupler 208. It will be appreciated that attenuators 184 and 186 for each of the paths control the attenuation and therefore the magnitude of the signals provided to the power divider. Additional attenuation control is provided by attenuator 202. A program listing in C for the generation of the gain tones and the control of the attenuators is presented in the attached Computer Program Appendix: Having now described a few embodiments of the invention, including the following Computer Program Appendix, as well as some modifications and variations thereto, it should be apparent to those skilled in the art that the foregoing is merely illustrative and not limiting, having been presented by the way of example only. Numerous modifications and other embodiments are within the scope of one of ordinary skill in the art and are contemplated as falling within the scope of the invention as limited only by the appended claims and equivalents thereto. Computer Program Appendix Reverse/Upstream AGC Code unsigned int CMI_HIC_GAIN_MSG_Enumerator ; unsigned int index; unsigned int dwell ; dwell = FALSE; /* AG_Debug( ( (MOD_UPSTREAM, LOCATION_01) ; */ /* Fetch the appropriate gain tone co-efficient from the Gain tone */ /* temperature correction table. */ /* The table holds 64 entries covering the temperature range of */ /* -40 oC through +86 oC . Each entry in the table covers 2 degrees. */ /* The CMI reports temperatures as (Actual Temp + 50) to avoid using */ /* negative numbers. To compute the index into the temperature */ /* table, use the following formula: */ /* Table index = (Reported Temp - 10) / 2 */ index = (cmi_db[gain_cmi_num] [gain_cmi_sec] ,us_temp - 10) / 2; /* PCSC-361: Bind index to within table limits */ if (index * > GT_MAX_INDEX) /* calculated index too large ? */ { index = GT_MAX_INDE ; } else if (index < GT_MIN_INDEX) /* calculated index too small ? */ index = GT_MIN_INDEX; } cmi_db[gain_cmi_num] [gain_cmi_sec] .gt_temp_correct = GT_temp_correct [index] ; /* update the CMI calibration factors */ /* the returned value initializes the following while-loop to zero; */ /* or, if the CMI could not be communicated to, US_COU TER_MAX is returned; "/ US_Counter = 0; /* Message Number for remainder of upstream autogain */ lw_msg_out.dat. raw.dat[0] = CMI_HIC_GAIN_MSG; while ( US_Counter < US_COUNTER_MAX ) { /* initialize upstream autogain variables */ Gain_Tone_Searches = 0 ; good_meas = 0 ; /* PCSC-056: gain tones are now sent an offset between -4 and +4 */ gain_chan = 4; /* Gain Tone to be put up at CF + 400kHz */ /* measure upstream power without Gain Tone */ /* NOTE: US_without_Gain_Tone initializes attenuator */ /* settings to their current values. */ UΞ_without_Gain_Tone (gain_cmi_num, gain_cmi_sec) ; if (good_meas != 0) /* communicating with CMI ? */ { /* measure upstream power with gain tone turned on */ US_ ith_Gain_Tone(gain_cmi_num, gain_cmi_sec) ; if (good_meas != 0) /* still communicating with CMI ? */ /* check if good gain tone readings were made at this frequency */ Gain_Tone_Searches += Check_Gain_Tone (gain_cmi_num, gain_cmi_sec) , /* only look at good measurements of enabled, primary and/or diversity, /* channels */ good_meas &= (cmi_db[gain_cmi_num] [gain_cmi_sec] . tx_state & 0x6); /* if (both gain tone measurements are good) */ if (good_meas == 0x6) { /* calculate the amount to change the upstream attenuator settings and * / /* initialize the output buffer with the current attenuator values US_Attn_Settings (gain_cmi_num, gain_cmi_sec) ; /* Check if either gain delta is greater than or equal to 4 dB. */ /* If so, it will be necessary to dwell on this CMI to bring it */ /* back within 2 dB of the setpoint. */ if ( (pri_delta >= 8) || (div_delta >= 8)) { dwell = TRUE; } /* * if (primary and diversity channels' desired power deltas plus the * current values of the primary and diversity attenuators * are within 1.5 dB of primary and diversity attenuators' * extreme limits) * make the adjustments only in the primary and diversity attenuators, Auto_Gain Pri_Div_Attn_Settings; set counter to exit loop since the combined attenuator has not been changed; else include the amount the primary and diversity attenuators' values are away from their nomimal values into the desired gain changes ; set the primary and diversity attenuators to their nominal values ; set the upstream combined attenuator in 2.0 dB steps, Combined_Attn_Setting; set the upstream primary and diversity attenuators in 0.5 dB steps, Pri_Div_Attn_Settings ; if ( ( (primary attn value + primary delta) < (max primary attn value - 1.5 dB) && (primary attn value + primary delta) > (min primary attn value + 1.5 dB) ) && (diversity attn value + diversity delta) < (max diversity attn value - 1.5 dB) && (diversity attn value + diversity delta) > (min diversity attn value + 1.5 dB) * / if ( ( ( ( ( int) cmi_db [gain_cmi_num] [gain_cmi_sec ] . upstr_pri_att + pri_gain_delta) < (PRI_ATN_MAX - 3 ) ) && ( ( ( int) cmi_db [gain_cmi_num] [gain_cmi_sec ] . upstr_pri_att + pri_gain_delta ) > ( PRI_ATN_MIN + 3 ) ) ) && ( ( ( (int) cmi_db[gain_cmi_num] [gain_cmi_sec] .upstr_div_att + div_gain_delta) < (DIV_ATN_MAX - 3) ) && ( (int)cmi_db[gain_cmi_num] [gain_cmi_sec] .upstr_div_att + div_gain_delta) > (DIV_ATN_MIN + 3) ) ) ) /* (we only need to adjust primary and diversity attenuators) */ { Pri_Div_Attn_Settings (gain_cmi_num, gain_cmi_sec) ; US_Counter = US_COUNTER_MAX; /* no second pass necessary */ } /* end if (only adjust primary and diversity attenuators) */ else /* adjust combined, primary, and diversity attenuators */ { /* if (primary attenuator is below nominal) */ if (cmi_db[gain_cmi_num] [gain_cmi_sec] .upstr^pri_att < PRI_NOMINAL) { pri_gain_delta -= (PRI_NOMINAL cmi_db [gain_cmi_num] [gain_cmi_sec ] . upstr_pri_att) ; } /* else if (primary attenuator is above nominal) */ else if (cmi_db[gain_cmi_num] [gain_cmi_sec] .upstr_pri_att > PRI_NOMINAL) { pri_gain_delta += (cmi_db [gain_cmi_num] [gain_cmi_sec ] . upstr_pri_att - PRI_NOMINAL) ; } /* if (diversity attenuator is below nominal) */ if (cmi_db[gain_cmi_num] [gain_cmi_sec] .upstr_div_att < DIV NOMINAL) { div_gain_delta -= (DIV_NOMINAL - cmi_db[gain_cmi_num] [gain_cmi_sec] .upstr_div_att) ; } /* else if (primary attenuator is above nominal) */ else if (cmi_db[gain_cmi_num] [gain_cmi_sec] .upstr_div_att > DIV JOMINAL) { div_gain_delta += (cmi_db[gain_cmi_num] [gain_cmi_sec] .upstr_div_att - DIV_NOMINAL) ; } cmi_db[gain_cmi_num] [gain_cmi_sec] .upstr_pri_att = PRI_NOMINAL; cmi_db[gain_cmi_num] [gain_cmi_sec] .upstr_div_att = DIV_NOMINA ; /* debug */ Initial_Comb = cmi_db[gain_cmi_num] [gain_cmi_sec] .upstr_comb_att; Initial_Pri = cmi_db[gain_cmi_num] [gain_cmi_sec] .upstr_pri_att; Initial_Div = cmi_db [gain_cmi_num] [gain_cmi_sec] . upstr_div_att ; Combined_Attn_Setting (gain_cmi_num, gain_cmi_sec ) Pri_Div_Attn_Settings (gain_cmi_num, gain_cmi_sec) / * debug * / Final_Comb = cmi_dbtgain_cmi_num] [gain_cmi_sec] . upstr_comb_att; Final_Pri = cmi_db [gain_cmi_num] [gain_cmi_sec] . upstr_pri_att ; Final_Div = cmi_db [gain_cmi_num] [gain_cmi_sec ] . pstr_div_att ; US_Counter = US_COUNTER_MAX; /* don't allow second pass */ } /* end else if (adjust combined, primary, and diversity attenuators ) * / /* setup CMI message to update attenuators and turn off gain tone */ CMI_HIC_GAIN_MSG_Enumerator = US_ATTENS_ONLY; /* vl .9 writes only US (rev) attens */ /* update CMI attenuators */ rite_CMI_Attenuators ( gain_cmi_num, gain_cmi_sec, CMI_HIC_GAIN_MSG_Enumerator) ; > /** end if (good_meas != 0) **/ else { /* at least one of the primary or diversity measurements was bad /* no change to the primary and diversity attenuators */ /** no change to combined attenuator **/ /* set rev age failure flag */ US_Counter = US_COUNTER_MAX; /* Don't try again */ rev_agc_fail_flag = 1; • } } /* end while ( US_Counter < US_COUNTER_MAX ) */ return dwell; } /* end Upstream */ / void US_without_Gain_Tone (unsigned int gain_cmi_num, unsigned int gain_cmi_sec) { /* AG_Debug(MOD_US_ ITHOUT_GAIN_TONE, LOCATION_01) ; */ /* send CMI_HIC_GAIN_MSG to the CMI to verify communications */ lw_msg_out.dat .raw. da [2] = 0; /* Gain Enumerator; gain tone off */ lw_msg_out.dat .raw. dat [3] = 0; /* DF# 5 sector / c i number */ lw_msg_out.dat .raw.dat [6] = ( ( (gain_cmi_sec << 6) & OxCO) | gain_cmi_num) ; ag_status = Send_CMI_Data (gain_cmi_num, gain_cmi_sec, 1 , SETTLE_TIME,MAX_RETRY) ; /* if (message successfully sent) */ if (ag_status == 0) /* retrieve US/reverse attenuator settings from the CMI */ cmi_db[gain_cmi_n.um] [gain_cmi_sec] .upstr_pri_att = cmi_msg_in.dat .raw. dat [5] ; cmi_db[gain_cmi_num] [gain_cmi_sec] .upstr_div_att = cmi_msg_in.dat .ra .dat [6] ; cmi_db[gain_cmi_num] [gain_cmi_sec] .upstr_comb_att = cmi_msg_in.dat. raw.dat[7] ; cmi_db[gain_cmi_num] [gain_cmi_sec] .msg_fail_ct = 0; /* Cmi responds - clear fail counter */ good_meas |= 0x1; /* CMI_HIC_GAIN message successfully sent to CMI */ /* measure upstream power with gain tone off */ Pri_Raw_Noise_Floor = Measure_US_Power (gain_cmi_sec, 0x00) ; /* measure upstream power with gain tone off */ Div_Raw_Noise_Floor = Measure_US_Power (gain_cmi_sec, 0x01) ; } /* endif (ag_status == 0) */ else /* message not successfully sent */ { good_meas = 0 ; Gain_Tone_Searches = GAIN_TONE_SEARCHES_MAX; } /* end elseif (ag_status) */ } /* end US_without_Gain_Tone */ / /* PCSC-056: Measure US power with Primary & Diversity Gain Tones up one at a time */ void US_ ith_Gain_Tone (unsigned int gain_cmi_num, unsigned int gain_cmi_sec) { int i ; for(i=0; i<2; i++) /* two iterations: 1st turns PRI GT on, 2nd turns DIV GT on */ { /* send CMI_HIC_GAIN_MSG to the CMI to turn a gain tone ON */ if (i==0) /* 1st pass: Turn PRIMARY gain tone ON */ { lw_msg_out.dat.raw.dat [2] = PULSE_PRIMARY; } else /* 2nd pass: Turn PRIMARY GT OFF & turn DIVERSITY GT ON */ { lw_msg_out.dat. raw. at [2] = PULSE_DIVERSITY; /* Gain Enumerator; turn gain tone on */ } lw_msg_out.dat.raw.da [4] = 0; /* DF# 3 is zeroed */ lw_msg_out.dat.raw.dat [5] = gain_chan; /* DF# 4 is offset from center freq, -4 to +4 */ lw_msg_out.dat. raw.dat[7] = 1; /* DF# 6 is number of pulses */ /* lw_msg_out.dat.raw.dat[8] = 255; /* DF# 7 is Gain Tone ON time = 400ms */ lw_msg_out.dat. raw. at [8] = on_time; /* DF# 7 is Gain Tone ON time = 120, 65, or 45ms */ lw_msg_out.dat.raw.dat [9] = 0; /* DF#8 is Gain Tone OFF time (not used for single pulse) */ /* PCSC-288: Need to send 100ms delay so CMI Gain tone can settle before it */ /* removes the mute. */ lw_msg_out.dat. raw. dat [10]= 100; /* DF# 9 is offset delay before 1st pulse = 100ms */ /* Send_CMI_Data ( CMI, Sector, CMI Count, Settle, Retries ); */ ag_status = Send_CMI_Data (gain_cmi_num,gain_cmi_sec, 1 , SETTLE_TIME, 1) ; /* if (message successfully sent) */ if (ag_status == 0) { /* measure upstream power */ if (i==0) /* 1st pass, measure upstream power with PRIMARY gain tone ON */ { Pri_Raw_Gain_Tone = Measure_US_Power (gain_cmi_sec, 0x00); } else /* 2nd pass, measure upstream power with DIVERSITY gain tone ON */ Div_Raw_Gain_Tone = Measure_US_Power (gain_cmi_sec, 0x01) ; /* set globals indicating both GT messages got sent & received */ cmi_db[gain_cmi_num] [gain_cmi_sec] .msg_fail_ct = 0; /* fail count good_meas |= 0x1; /* CMI_HIC_GAIN message successfully sent to CMI } /* end if ag_status 0 */ else /* message not successfully sent */ { good_meas = 0 ; Gain_Tone_Searches = GAIN_TONE_SEARCHES_MAX; break; } J * end elseif (ag_status) */ } /* end for() ; */ } /* end US_With_Gain_Tone - vl .9 version */ /***** * **** * ******.************.******** * ***************.*, * ****** * . * .***** * * ** ******* / int Check_Gain_Tone (unsigned int gain_cmi_num, unsigned int gain_cmi_sec) { /* Account for case where no gain tones were put up, so noise minus noise might be < zero */ /* This prevents sending a negative number to conv_us_pwr ( ) which works only on non- negative numbers */ if (Pri_Raw_Noise_Floor > Pri_Raw_Gain_Tone) { Pri_Raw_Gain_Tone = Pri_Raw_Noise_Floor; } if (Div_Raw_Noise_Floor > Div_Raw_Gain_Tone) { Div_Raw_Gain_Tone = Div_Raw_Noise_Floor; } /* calculate raw gain tone measurements for primary and diversity */ /* Gain Tone measurement = (raw Gain Tone measurement) - (raw noise measurement) Pri_Pwr_Gain_Tone = Pri_Raw_Gain_Tone - Pri_Raw_Noise_Floor; Div_Pwr_Gain_Tone = Div_Raw_Gain_Tone - Div_Raw_Noise_Floor; Pri_Pwr_from_LUT = conv_us_pwr (Pri_Pwr_Gain_Tone) ; /* Primary pwr from look up table */ Div_Pwr_from_LUT = conv_us_pwr (Div_Pwr_Gain_Tone) ; /* Diversity pwr from look up table */ /* Actual Gain Tone measurement = convert to dBm(Gain Tone measurement) ; */ cmi_db[gain_cmi_num] [gain_cmi_sec] .pri_tone = Pri_Pwr_from_LUT + /* power from Look-Up Table */ hic_db .upstr_gain_of f se [gain_cmi_sec ] + / * + detector calibration offset */ US_GAIN_OFFSET; / * + gain tones correction offset * / /* gain tones lOdB below -93dBm */ cmi_db[gain_cmi_num] [gain_cmi_sec] .div_tone = Div_Pwr_from_LUT + /* power from Look-Up Table */ hic_db.upstr_gain_offset [gain_cmi_sec] + /* + detector calibration offset */ US_GAIN_OFFSET; /* + gain tones correction offset */ /* gain tones lOdB below - 93dBm /* age test variables */ cmi_db[gain_cmi_num] [gain_cmi_sec] .pri_noise_before_offsets = conv_us_pwr (Pri_Raw_Noise_Floor) ; cmi_db[gain_cmi_num] [gain_cmi_sec] .div_noise_before_offsets = conv_us_pwr (Div_Raw_Noise_Floor) ; /* noise measurement = convert to dBm(raw noise measurement) ; X cmi_db[gain_cmi_num] [gain_cmi_sec] .pri_noise = /* see above comments */ conv_us_pwr (Pri_Raw_Noise_Floor) + hic_db.upstr_gain_offset [gain_cmi_sec] + UΞ_GAIN_OFFSET; cmi_db[gain_cmi_num] [gain_cmi_sec] .div_noise = conv_us_pwr(Div_Raw_Noise_Floor) + hic_db.upstr_gain_offset [gain_cmi_sec] + US_GAIN_OFFSET; /** Check that the primary and diversity gain tones are greater than the noise by **/ /** the magnitude of the selected ingress level, vlθ.14 threshold is always 6. * * / /** NOTE: The hic_db. ingress_level_threshold has an LSB = 0.5 dB. **/ /** If either gain tone is greater than the ingress threshold, increment the * */ /** upstream continuity alarm counter. * * if (hic_db. ingress_level_threshold != 0) { /* Check for Primary Gain Tone */ if ( ( (cmi_db[gain_cmi_num] [gain_cmi_sec] .pri_tone - cmi_db[gain_cmi_num] [gain_cmi_sec] .pri_noise) - hic_db.ingress_level_threshold) >= 0) { good_meas |= 0x2; /** primary gain tone was found **/ cmi_db[gain_cmi_num] [gain_cmi_sec] .pri_rev_cont_cntr--; /* dec pri Rev Cont fault cntr */ if (cmi_db[gain_cmi_num] [gain_cmi_sec] .pri_rev_cont_cntr < 0) { cmi_db[gain_cmi_num] [gain_cmi_sec] .pri_rev_cont_cntr = 0; /* keep counter at 0 */ } } /* Check for Diversity Gain Tone */ if ( ( (cmi_db[gain_cmi_num] [gain_cmi_sec] . div_tone - cmi_db[gain_cmi_num] [gain_cmi_sec] . div_noise) - hie db. ingress level threshold) >= 0 ) { ~ good_meas |= 0x4; /** diversity gain tone was found **/ cmi_db[gain_cmi_num] [gain_cmi_sec] .div_rev_cont_cntr--; /* dec div Rev Cont fault cntr */ if (cmi_db[gain_cmi num] [gain_cmi_sec] .div_rev_cont_cntr < 0) { cmi_db [gain_cmi_num] [gain_cmi_sec] .div_rev_cont_cntr = 0 ; / * keep counter at 0 * / } , ' else /* skip upstream continuity alarm checking */ { good_meas |= 0x6; /* good_meas = 0x2 & 0x4 */ } /* can only have a "good_meas" if the channel is enabled */ good_meas &= (cmi_db[gain_cmi_num] [gain_cmi_sec] . tx_state & 0x6) if (good_meas == 0x6) /* both gain tones were found */ { raturn GAIN_TONE_SEARCHES_MAX; } /* At least one gain tone was not found - determine which, and increment */ /* appropriate Reverse Continuity failure counters. */ if ( ( (good_meas & 0x2) != 0x2) && /* if primary gain tone not found */ (cmi_db[gain_cmi_num] [gain_cmi_sec] .alarm_en_0_ 3 & ALARM_2) ) /* and rev cont enabled */ { cmi_db[gain_cmi_num] [gain_cmi_sec] .pri_rev_cont_cntr++; /** If the Primary fault counter reaches its limit, set an Upstream Continuity fault **/ /** for that CMI. **/ if (cmi_db[gain_cmi_num] [gain_cmi_sec] .pri_rev_cont_cntr >= REV_CONT CTR MAX) " -( hic_db.cmi_err [gain_cmi_sec] |= (0x1 << gain_cmi_num) ; /* Set Upstream Continuity Fault */ cmi_db[gain_cmi_num] [gain_cmi_sec] .alarm_num_0_23 |= 0x10; /* bit 4 for primary fault */ cmi_db[gain_cmi_num] [gain_cmi_sec] .pri_rev_cont_cntr = REV_CONT_CTR_MAX; } } if ( ( (good_meas & 0x4) != 0x4) && /* if diversity gain tone not found */ (cmi_db[gain_cmi_num] [gain_cmi_sec] . alarm_en_0_23 & ALARM_2 ) ) /* and rev cont enabled */ { cmi_db[gain_cmi_num] [gain_cmi_sec] .div_rev_cont_cntr++; /** If the Diversity fault counter reaches its limit, set an Upstream Continuity fault **/ /** for that CMI. ** if (cmi_db[gain_cmi_num] [gain_cmi_sec] .div_rev_cont_cntr >= REV_CONT_CTR_MAX) { hic_db. cmi_err [gain_cmi_sec] | = ( Oxl « gain_cmi_num) ; / * Set Upstream Continuity Fault * / cmi_db [gain_cmi_num] [gain_cmi_sec ] . alarm_num_0_23 | = 0x20 ; / * bit 5 for diversity fault * / cmi_db [gain_cmi_num] [gain_cmi_sec] .div_rev_cont_cntr = REV_CONT_CTR_MAX ; ) } return GAIN_TONE_SEARCHES_MAX; } / * end Check_Gain_Tone */ /********** * ** * ***** ** ** * * * ** * **** * ** ** ***** * ******************* * *** * ** * ** * * **** * * * * ** / void US_Attn_Settings (unsigned int gain_cmi_num, unsigned int gain_cmi_sec) { /* ******************* * ** * ****** * * ** Primary Channel ** ********************************/ /* if (Primary Channel reading is good) */ if ( (good_meas & 0x2) != 0x0) « ^ ^ ^ ^ ^ . tt ^^ nM ^ . cmi_db[g^in_cmi_num] [gain_cmi_sec] .pri_tone; /* adjust measured power by gain tone temperature coefficient; */ cmi_db[gain_cmi_num] [gain_cmi_sec] .pri_tone -= cmi_db[gain_cmi_num] [gain_cmi_sec] .gt_temp_correct; /* - gain tone temp coefficient */ /* calculate how far the primary channel's delta is from the desired; */ pri_gain_delta = cmi_db[gain_cmi_num] [gain_cmi_sec] .pri_tone - cmi_db[gain_cmi_num] [gain_cmi_sec] .upstr_pri_setpoint; /** primary actual power = pri measured power + calibration factor **/ hic_db.us_actual_power [PRIMARY] = cmi_db[gain_cmi_num] [gain_cmi_sec] .pri_tone; /* Check to see if measured gain tone has maxed out or bottomed out */ /* based upon the Look-Up-Table . If value returned from LUT is the */ /* max value and we still need to increase power, we can't trust */ /* the accuracy of the measurement. Likewise if the value returned */ /* from the LUT is the min value and we still need to decrease power */ /* we can't trust that measurement either. In both cases set the */ /* gain_delta to zero so that CMI attenuators will be left alone. */ if( ( (Pri_Pwr_from_LUT >= US_P R_MAX) && (pri_gain_delta < 0)) || ( (Pri_Pwr_from_LUT <= US_PWR_MIN) && (pri_gain_delta > 0)) ) { pri_gain_delta = 0; /* set delta to zero to prevent attn change */ } ) /* end else if only the primary is good */ else /* Primary Channel reading is not good */ { pri_gain_delta = 0; /** don't change the primary attenuator **/ } /★★★it**************************** ** Diversity Channel ** /* if (Diversity Channel reading is good) */ if ( (good_meas & 0x4) != 0x0) { cmi_db[gain_cmi_num] [gain_cmi_sec] .div_tone_before_temp_correct = cmi_db[gain_cmi_num] [gain_cmi_sec] .div_tone; /* adjust measured power by gain tone temperature coefficient; */ cmi_db[gain_cmi_num] [gain_cmi_sec] .div_tone -= cmi_db[gain_cmi_num] [gain_cmi_sec] .gt_temp_correct; /* - gain tone temp coefficient */ /* calculate how far the diversity channel's delta is from the desired; */ div_gain_delta = cmi_db[gain_cmi_num] [gain_cmi_sec] .div_tone - cmi_db[gain_cmi_num] [gain_cmi_sec] . upstr_div_setpoint; /** diversity actual power = div measured power + calibration factor **/ hic_db.us_actual_power [DIVERSITY] = cmi_db[gain_cmi_num] [gain_cmi_sec] .div_tone; /* Don't change attenuators if LUT value is maxed or bottomed out */ if( ( (Div_Pwr_from_LUT >= US_PWR_MAX) && (div_gain_delta < 0)) || ( (Div_Pwr_from_LUT <= US_P R_MIN) && (div_gain_delta > 0)) ) { div_gain_delta = 0; /* set delta to zero to prevent attn change */ } /** deleted the primary channel change which maintained the existing **/ /** difference between the diversity and primary channels **/ /** if (both primary and diversity channels are NOT good) and **/ /** (primary channel is enabled) /* end if diversity is good */ else /** diversity channel is not good **/ div_gain_delta = 0; /** don't change the diversity attenuator **/ * take absolute value of gain deltas for dwell determination */ f (pri_gain_delta < 0) pri_delta = 0 - pri_gain_delta; else pri_delta = pri_gain_delta; f (div_gain_delta < 0) div_delta = 0 - div_gain_delta; lse div_delta = div_gain_delta; * limit change to AUTOGAIN_STEP_SIZE */ f (pri_gain_delta > STEP_SIZE_PLUS) pri_gain_delta = STEP_SIZE_PLUS; f (pri_gain_delta < STEP_SIZE_MINUS) pri_gain_delta = STEP_SIZE_MINUS; } if (div_gain_delta > STEP_SIZE_PLUS) { div_gain_delta = STEP_SIZE_PLUS; } if (div_gain_delta < STEP_SIZE_MINUS) { div gain delta = STEP SIZE MINUS; } - - - - } /* end US_Attn_Settings */ / ** * ** ★ **************************************************** ★ / void Pri_Div_Attn_Settings (unsigned int gain_cmi_num, unsigned int gain_cmi_sec) { /* while primary gain is too high by at least 0.5 dB and */ /* the maximum primary attenuation has not been reached */ /* add primary gain attenuation */ while ( (pri_gain_delta > 0) && (cmi_db[gain_cmi_num] [gain_cmi_sec] .upstr_pri_att < PRI_ATN MAX) ) { pςi_gain_delta -= 1; cmi_db[gain_cmi_num] [gain_cmi_sec] .upstr_pri_att += 1 ; if ( cmi_db[gain_cmi_num] [gain_cmi_sec] .upstr_pri_att >= PRI_ATN_MAX ) { cmi_db[gain_cmi_num] [gain_cmi_sec] .upstr_pri_att = PRI_ATN_MAX; } } /* end while primary is too high by at least 0.5 dB */ /* and the maximum primary attenuation has not been reached */ /* while diversity gain is too high by at least 0.5 dB and */ /* the maximum diversity gain has not been reached */ /* add diversity attenuation */ while ( (div_gain_delta > 0) && (cmi_db[gain_cmi_num] [gain_cmi_sec] .upstr_div_att < DIV_ATN_MAX) ) { div_gain_delta -= 1; cmi_db[gain_cmi_num] [gain_cmi_sec] .upstr_div_att += 1; if ( cmi_db[gain_cmi_num] [gain_cmi_sec] .upstr_div_att >= DIV_ATN_MAX ) { cmi_db[gain_cmi_num] [gain_cmi_sec] .upstr_div_att = DIV_ATN_MAX; } } /* end while diversity is too high by at least 0.5 dB */ /* while primary gain is too low by at least 0.5 dB and */ /* the minimum primary attenuation has not been reached */ /* remove primary gain attenuation */ while ( (pri_gain_delta < 0) && (cmi_db[gain_cmi_num) [gain_cmi_sec] .upstr_pri_att > PRI_ATN_MIN) ) pri_gain_delta += 1; cmi_db[gain_cmi_num] [gain_cmi_sec] .upstr_pri_att -= 1; if ( cmi_db[gain_cmi:_num] [gain_cmi_sec] .upstr_pri_att <= PRI_ATN_MIN ) cmi_db[gain_cmi_num] [gain_cmi_sec] .upstr_pri_att = PRI_ATN_MIN; } } /* end while primary is too low by at least 0.5 dB */ /* and the minimum primary attenuation has not been reached */ /* while diversity gain is too low by at least 0.5 dB and */ /* the minimum diversity gain has not been reached */ /* remove diversity attenuation */ while ( (div_gain_delta < 0) && (cmi_db[gain_cmi_num] [gain_cmi_sec] .upstr_div_att > DIV_ATN_MIN ) ) { div_gain_delta += 1; cmi_db[gain_cmi_num] [gain_cmi_sec] .upstr_div_att -= 1; if ( cmi_db[gain_cmi_num] [gain_cmi_sec] .upstr_div_att <= DIV_ATN_MIN ) { cmi_db[gain_cmi_num] [gain_cmi_sec] .upstr_div_att = DIV_ATN_MIN; } } /* end while diversity is too low by at least 0.5 dB */ /* and the minimum diversity attenuation has not been reached */ } /* end Pri_Div_Attn_Settings */ / ************* * ****** * ****** . *********** * ********** * ****** * ****** * ****** * ********* * *** / int rite_CMI_Attenuators (unsigned int gain_cmi_num, unsigned int gain_cmi_sec, unsigned int enumerator ) { /* update CMI attenuators */ lw_msg_out.dat. raw.dat [0] = CMI_HIC_GAIN_MSG; lw_msg_out.dat.raw.dat [2] = enumerator; /* DF# 1 enumerator = write attenuators*/ lw_msg_out.dat.raw.dat [6] = ( ( (gain_cmi_sec « 6) & OxCO) | gain_cmi_num) ; /* DF#5 sector/emit */ lw_msg_out.dat.raw.dat [7] = cmi_db[gain_cmi_num] [gain_cmi_sec] .upstr_pri_att; lw_msg_out.dat .raw.dat [8] = cmi_db[gain_cmi_num] [gain_cmi_sec] .upstr_div_att, • lw_msg_out .dat . raw.dat [9] = cmi_db[gain_cmi_num] [gain_cmi_sec] .upstr_comb_att; lw_msg_out.dat.raw.dat [10]= cmi_db[gain_cmi_num] [gain_cmi_sec] .dnstr_att0; lw_msg_out.dat.raw.dat[11]= cmi_db[gain_cmi_num] [gain_cmi_sec] .dnstr_attl; /* Send_CMI_Data ( CMI, Sector, CMI Count, Settle, Retries ); */ ag_status = Send_CMI_Data (gain_cmi_num,gain_cmi_sec, 1, SETTLE_TIME,MAX_RETRY) ; if (ag_status != 0) /* if CMI did not respond */ { /* AG_Debug( MOD_WRITE_CMI_ATTENUATORS, LOCATION_02) ; */ return INVALID; else if (cmi_msg_in.number == 0) /* if attenuator write was NAC ED by CMI */ { return INVALID; } /* AG_Debug( MOD_RITE_CMI_ATTENUATORS, LOCATION_01) ; */ return IS_VALID; } /* end Write CMI Attenuators */ /************** T *** τ ****************************************************************** ** * ** /***.********* ** ** * *** End VI.90 HIC code segment ****. * ** * ** * ** * ,*,* ** * * / / * ******* * ** * ** * ** * * * ******* * * * ** * *** * ***** * ****** * ***** * * * *** * ** ** *** * ** ** * * ** * * ** *** ***** / / ********** * ******* , ***** , **** * *************************** * *************************** ** , ** / /* * ** ** *» ***** **, ** * ** Begin V l.90 C M I code segment ******* *, ** * *** , ******* / /*********** , ******* , ****************************************** . ********************** ***** / /* The following code has been extracted from the Vl.90 CMI code, files std_if.c */ /* ml_rom.c, and atten.c. These sections are specific to turning on/off the gain */ /* tones as requested by the HIC in support of upstream/reverse AGC and */ /* upstream/reverse continuity. */ /* Begin code section from std_if.c. Switch on incoming message number */ /* ========================================================================== */ case CMI_HIC_GAIN_MSG: /* $$$$$$$$$$ Auto Gain Message Request $$$$$$$$ */ /* ========================================================================== */ /* ========================================================================== */ /* Select the correct Message-Sub-Types (MST_) of an Auto Gain message */ /* * / switch! msg_in.dat .recv_gain. enumerator ) { /* ========================================================================== */ /* These are all related to pulsing the Upstream (Reverse) gain tones*/ / * * / case MST_PULSE_GT_BOTH: case MST_PULSE_GT_PRI : case MST_PULSE_GT_DIV: Return_Message ( ) ; /* prior to processing since we turn on GT */ /* NOTE: there is no response data - just an echo of input ! */ temp_enum = msg_in.dat .recv_gain. enumerator; /* read data prior to corruption */ temp_val = msg_in.dat .recv_gain.gt_val; Pulse_Gain_Tone ( temp_enum, temp_val );/* */ break; /* * / /* Mutes the Upstream (reverse) gain tones */ / * * / case MST_GAIN_MUTE_BOTH: /* Note 1: even though the first thing this procedure does is check to see if the Gain Tones are muted (and mutes them if not) the check is done on s/w flags . This message sub type is the only Forced muting of the Gain Tones and will occur regardless of what the software flags indicate. */ Gain_Mute ( MST_GAIN_MUTE_BOTH,DFLT_GT_OFFSET ) ; /* mutes gain tones AND */ /* for VI.85 offtunes the Pll */ /* for Vl.90 re-tunes to control tone freq */ break; /* ========================================================================== */ /* These are all related to activating the Upstream (Reverse) gain tones*/ / * * / case MST_GAIN_TURN_ON_BOTH: case MST_GAIN_PRI_ON_DIV_MUTE: case MST_GAIN_DIV_ON_PRI_MUTE: temp_enum = msg_in.dat . recv_gain. enumerator; /* read data prior to corruption */ temp_val = msg_in.dat .recv_gain.gt_val; / * * / /* update the Autogain specific response info to send back to the HIC Note 2 : The return message is sent back to the HIC before the gain tones are activated. The Gain tones will be automatically muted by any and all incoming messages at beginning of process_message ( ) . msg_in .dat . send_gain. pa_tx_pwr = intgrtd_pa_pwr; msg_i .dat . send_gain. rev_com_att = rev_com_att_val msg_in .dat . send_gain . rev_pri_att = rev_pri_att_val msg_in . at . send_gain . rev_div_att = rev_div_att_val msg_in.dat . send_gain . fwd_pre_att = fwd_pre_att_val msg_in.dat . send_gain. fwd_pos_att = fwd_pos_att_val Return_Message( ) ; /* acknowledge msg rcvd */ /* Activate the requested gain tone and tune to the proper frequency */ Gain_Mute( temp_enum, /* choice */ temp_val ); /* gain offset value (gain channel: VI.85)*/ break; /* end code section from CMI std_if .c */ /* Begin code section from Vl.90 CMI atten.c. */ / * *********** -kjt ************************************************************* * * Procedure Name: Pulse_Gain_Tone * * Purpose: To pulse the requested gain tones for Reverse AGC Assumptions/Limitations : Revision History: PCSC-218 7/29/98 Pulsed GT needs int not char on on_time ! ********* * * * * * *************** * ******************************** * ************ * / void Pulse_Gain_Tone (unsigned char choice, unsigned char offset ) { unsigned char port_val; /* temporary holders of data */ unsigned char off_bits; unsigned char on_bits; unsigned char n; unsigned char i; unsigned int on_time; unsigned char off_time; unsigned char first delay; /* get data from input message */ n = msg_in.dat.recv_gain.df6; on_time = msg_in.dat .recv_gain.df7 ; if (on_time == 255) on_time = 400; /* allow a 400 s on time, since byte doesn't go that far...*/ off_time = msg_in.dat.recv_gain.df8; first_delay = msg_in.dat .recv_gain.df9 ; /* Upstream Gain tone masks */ #define BTH_MSK 0x9F /* Gain Tone Prim&Div Mute Mask */ #define PRI_BIT 0x20 /* Gain Tone Primary BIT on */ #define DIV_BIT 0x40 /* Gain Tone Diversity BIT on */ tdefine BTH_BITS 0x60 /* Gain Tone Prim&Div BITs on */ tdefine BTH_OFF 0x0 /* a zero in the bit is a mute */ /* ========================================================================== */ /* Tune the Gain Tone PLL */ /* ========================================================================== */ Tune_Gain_Tone ( offset); /* tune the gain tone to directed offset */ off_bits = BTH_OFF; switch) choice )/* */ case MST_PULSE_GT_B0TH: on_bits = BTH_BITS; break; case MST_PULSE_GT_DIV : on_bits = DIV_BIT; break; case MST_PULSE_GT_PRI : onjbits = PRI_BIT; break; ) /* end switch */ /* ========================================================================== */ /* Delay the requested amount of time before asserting any Gain Tone */ /* ========================================================================== */ ms_Delay( (unsigned int) first_delay) ; / * ========================================================================== */ /* For the number of times the GT is to be pulsed */ /* ========================================================================== */ for (i=0; i<n; i++) { /* ========================================================================== */ /* Assert the Gain tone */ / * ========================================================================== */ port_val = (port_B_save & BTH_MSK) | on_bits; '(unsigned char xdata * ) PB_US_GT_MUTE_ADR = port_val; /* ========================================================================== */ / * Keep the Gain tone on or the required delay */ /* ========================================================================== */ ms_Delay( (unsigned int) on_time) ; /* ========================================================================== */ /* Mute the Gain tone */ /* ========================================================================== */ port_val = (port_B_save & BTH_MSK) | off_bits; ♦ (unsigned char xdata * ) PB_US_GT_MUTE_ADR = port_val; /* ========================================================================== */ /* Keep the Gain tone Off for the required delay */ /* ========================================================================== */ FeedWDO; /* Feed the WD timer */ ms_Delay( (unsigned int) off_time) ; }/* next pulse: End for loop /* We are done pulsing the GT - mute the gain tones */ port_B_save = port_val; /* keep the global up-to-date */ / * If all gain tones are off - then re-tune the PLL to Comms */ /* */ Tune_Cntl_Freq(cur_pri_freq, cur_div_freq) ; /* yes - so tune in COMMS */ }/* End of procedure Pulse GT */ /* End code section from Vl.90 CMI atten.c. */ /* Begin code section from Vl.90 CMI ml_rom.c. */ / ******************* * *** » ***************************************** * ************* * TITLE: Tune_gain_tone * * DESCRIPTION: This routine calculates the LO frequency necessary for tunning * the Gain Tone and invokes the necessary routines to set the PLL * * INPUTS: gain_tone_val : * Vl.90 - offset in KHz from the center of the Upstream CDMA signal * * OUTPUTS : None * * ASSUMPTIONS/LIMITATIONS: * Vl.90 Tunes (tune L04 ) * valid range: -4 (252) to +4, (-4KHz to 4KHz offset in 1 Khz*steps) * * * Revision History: * Change Doc. Date Description * 10/28/97 initial release * * PCSC-057 11/13/97 Input arg changed to unsigned int for consistancy * w/ VI.85 equations added and Vl.90 equations were * modified to make them clearer to understand. * * * * ** *, ********* * ********** * * ** ** ., ******** . *** ** ********************* * **** * * / void Tune Gain Tone (unsigned int gain_tone_val) { " ~ unsigned long freq; signed int temp; /* * / /* convert gain_tone_offset into increments of lOOKHz */ / * * / temp = (signed char)gain_tone_val; /* */ /* convert gain_tone_offset into increments of lOOKHz */ / * * / freq = (temp * _100KHZ) ; / * * / /* calculate the PLL frequency in KHz */ /* */ freq = (REV_1ST_IF_FREQ - freq) ; Calc Pll Data(freq, PLL4) ; /* calculate and then set PLL 4*/ " " } / ****** * ******* » ******* *********** * *** * ******************************* ********** * TITLE: Tune_Cntl_Freq * * DESCRIPTION: This routine calculates the LO frequency for the BPSK Control * Frequency and invokes the routines to tune the PLL to that * freqency * * INPUTS: pri_freq_code - Primary Upstream Freq in 250KHz steps * (pri_freq_code = Upstream freq (MHz) / 250KHZ ) * div_freq_code - Diversity Upstream Freq in 250KHZ steps * (div_freq_code = Upstream freq (MHz) / 250KHz ) * * OUTPUTS : None * * ASSUMPTIONS/LIMITATIONS: * Tunes (L04) * The BPSK control frequency must always be maintained at * 1.0MHz above the Primary Upstream frequency. Both the * Upstream Primary and Diversity frequencys must be previously * * set before this procedureis called * Revision History: * Change Doc. Date Description * 10/28/97 initial release * * PCSC-057 11/13/97 VI.85 equations added and Vl.90 equations were * modified to make them clearer to understand. * PCSC-150 3/31/98 Modified the VI.85 specific code for pll4 ********* * ** * ** * ** * *. * ********* * *********.*********.**.*************.*********/ void Tune_Cntl_Freq (unsigned char pri_freq_code, unsigned char div_freq_code) { t define _1MHZ 1000 /* 1 MHz in KHz*/ unsigned long pll3_freq, cntl_freq, pll4_freq; /* * / /* determine the frequency of pll3 */ /* */ pll3_freq = (div_freq_code * _250KHZ) + REV_1ST_IF_FREQ ; /* in KHz */ /* */ /* determine the control tone freq, it is always 1 MHz above the prim freq */ /* */ cntl_freq = (pri_freq_code * _250KHZ) + _1MHZ; /* * / /* determine the freq for pll4 */ /* */ pll4_freq = pll3_freq - cntl_freq; /* in KHz */ Calc_Pll_Data(pll4_freq, PLL4); /'calculate the data and then set the PLL */ } /* End Tune_Cntl_Freq ( ) */ /*********** * * * * * ******* ** ******** * ****** * **. ** ******* * *** * *** * ** * * * ***** * * * TITLE: Gain_Mute * * DESCRIPTION: Mute the Gain Tone * * INPUTS: mute choice - which combination of the GT signals to set * offset - the gain tone offset value * * OUTPUTS : None * * ASSUMPTIONS/LIMITATIONS: * This keeps the switch values for VI.85 the same (primary only) * Revision History: * Original 11/4/97 Vl.90 has an additional switch to allow individual * control of the primary and diversity gain tones. * Input parameters changed, this proc now calls the * tune routines directly. * * PCSC-076 12/17/97 Modified names of include files. * * PCSC-082 12/24/97 The muting control logic was reversed since a * logic 0 sets gain tones to a muted condition. * * PCSC_161 4/20/98 Changed name of constant us_gt_mute_adr 1 *************************************************************************/ / * ========================================================================== * / void Gain_Mute (unsigned char choice, unsigned char offset ) { unsigned char port_val; /* temporary holders of data ' */ unsigned char bits; /* Upstream Gain tone masks */ tdefine BTH_MSK 0x9F /* Gain Tone Pri &Div Mute Mask */ tdefine PRI_BIT 0x20 /* Gain Tone Primary BIT on */ tdefine DIV_BIT 0x40 /* Gain Tone Diversity BIT on */ tdefine BTH_BITS 0x60 /* Gain Tone Prim&Div BITs on */ tdefine BTH_OFF 0x0 /* a zero in the bit is a mute */ /* Tune the desired Gain Tone on if this is not a mute request */ /* ========================================================================== switch( choice )/* look at only the ON choices */ { case MST_GAIN_TURN_ON_BOTH: case MST_GAIN_PRI_ON_DIV_MUTE: case MST_GAIN_DIV_ON_PRI_MUTE: Tune_Gain_Tone ( offset); /* tune the gain tone to directed offset */ break; /* ========================================================================= */ /* Turn the switch on/off appropriatly */ /* ========================================================================= * / switch) choice )/* which combination is being directed ? */ { case MST_GAIN_TURN_ON_BOTH: bits = BTH BITS; break; case MST_GAIN_MUTE_BOTH: bits = BTH_OFF; break; case MST_GAIN_PRI_ON_DIV_MUTE: bits = PRI_BIT; break; case MST_GAIN_DIV_ON_PRI_MUTE: bits = DIV_BIT; break; ) port_val = (port_B_save & BTH_MSK) | bits; /* ========================================================================== */ /* Now write the derived pattern to the port - and save the loaded value */ /* ========================================================================== */ '(unsigned char xdata * ) PB_US_GT_MϋTE_ADR = port_val; port_B_save = port val; / * * / /* If all gain tones are off - then re-tune the PLL to Comms */ /* * / if ( (port_B_save & BTH_BITS) == BTH_OFF )/* both off ? */ Tune_Cnt],_Freq(cur_pri_freq, cur_div_freq) ; /* yes - so tune in COMMS */ } /* End code section from Vl.90 CMI ml_rom.c. */ , ************************************************************************************* ***** / / ********************** En( j vi.90 CM I code segment * * **** . * * *** * *********** / *********** * ********* », ********* , ****** * ********************** * ********************** *****/

Claims: WHAT IS CLAIMED IS: 1. In a wireless microcell distribution system in which gain tones are transmitted back over primary and diversity paths carrying telephony signals in which they are embedded through a summation point from microceUs to a gain tone amplitude measuring unit, means for limiting the duration of said gain tones to a point at which the interference of said gain tones with telephony signals in which they are embedded is minimized. 2. The system of Claim 1 wherein the cumulative amplitude of the telephony signals at said summation point from multiple microceUs is set to a predetermined maximum and wherein the amplitude of a gain tone is set to a predetermined distance down in amplitude from said maximum. 3. The system of Claim 2 wherein said distance is set so as to minimize interference between said gain tones and said telephony signals. 4. The system of Claim 3 wherein the amplitude of said gain tone is at least lOdB down from said maximum. 5. In a wireless microcell distribution system, a system for providing level adjustment for telephony signals from microceUs back to a summation point comprising: a head end interface converter for transmitting a message to each microcell for requesting the generation of gain tones from each microcell; means for establishing primary and diversity paths at each microcell; means at each microcell for independently generating gain tones of a limited duration for injection into the primary and diversity paths therewith, the duration of said gain tones being sufficiently short as to minimize interference with said telephony signals; means for injecting said gain tones into said primary and diversity paths; means at said head end interface converter for measuring the amplitude of said gain tones and for transmitting a message to the corresponding microcell to adjust the level of telephony signals therefrom such that the signals from said microceUs are equal in amplitude at said summation point. 6. The system of Claim 5 wherein the cumulative level of telephony signals from said microceUs to said summation point has a predetermined maximum and wherein the amplitude of said gain tones is set below said maximum by a predetermined amount. 7. The system of Claim 5, and further including a temperature sensor at each of said cable microcell integrators, means at a cable microcell integrator for transmitting the temperature at a microcell to said head end interface converter, a temperature lookup table at said head end interface converter, and means for modifying the level adjustment signal transmitted to a microcell to take into account the temperature at the microcell. 8. The system of Claim 5 wherein said amplitude measuring means includes means for establishing separate measuring windows for the gain tones in said primary and diversity paths. 9. The system of Claim 5, wherein the start of said measuring windows is delayed by a predetermined amount to assure detection of said gain tones. 10. The system of Claim 5, wherein each of said microceUs includes primary and diversity antennas and respective down converters coupled thereto and wherein said injecting means injects said gain tones in said primary and diversity paths after said down-conversion for stable control of the amplitude of the injected gain tones.

Inventors: FLEBOTTE GLENN T, GRAVELINE STEPHEN J, HEBERT THOMAS G, LO VERME CLIFFORD M, RIGAZIO JOSEPH L III, FLEBOTTE, GLENN, T., GRAVELINE, STEPHEN, J., HEBERT, THOMAS, G., LO VERME, CLIFFORD, M., RIGAZIO, JOSEPH, L., III
Applicants: TRANSCEPT INC, TRANSCEPT, INC.
Application year: 2000
Main classification: H04B7
IPC codes: H04B7, H04Q7