text:
An apparatus and method for adaptively producing transmitted signals and processing received signals in a communication system which includes smart antenna array of antenna elements. When processing received signals, the invention modifies an existing processing scheme by incorporating information about a second set of signals for which training or other characteristic information such as a reference is unknown to information about a first set of signals for which characteristic information such as a reference is known, prior to executing the processing scheme. This approach can be used to modify the receive weights which determine the relative weight assigned to the signals received from each of a plurality of antenna elements to take into account the presence of a changing interference environment. This permits an adaptive updating of the receive weights based on the additional information provided by the second set of data, and may be accomplished faster and with less computational resources than required to determine the weights based on applying the entire processing scheme to the second set of data. In addition, assuming a relationship between the transmit and receive environment, the invention can also be used to modify the transmit weights used by the base station.
1. A method comprising:
receiving primary data for which a reference signal is available;
receiving secondary data for which a reference signal is not available;
developing a signal processing strategy based on the primary data and the available reference signal; and
incorporating information in the secondary data into the signal processing strategy to account for a changing interference environment.
2. A method according to
applying the signal processing strategy to processing of one or more of an uplink and a downlink signal associated with a wireless communication system element.
3. A method according to
combining at least a part of a feature of the secondary data with at least a part of a feature of the primary data; and
computing the signal processing strategy with the combination.
4. A method according to
5. A method according to
6. A method according to
7. A method according to
8. A method according to
9. A method according to
10. A method according to
11. A method according to
computing the signal processing strategy with the primary data;
combining at least a part of a feature of the secondary data with at least a part of a feature of the primary data; and
re-computing the signal processing strategy with the combination.
12. A method according to
selectively applying a set of weights for an associated number of antennae in an antenna array to one or more of signal(s) received via said antenna array or signal(s) for transmission via said antenna array.
13. A method according to
14. A method according to
combining at least a part of a feature of tertiary data for which a reference signal is not available with the combination of at least a part of the feature of the secondary data with at least a part of the feature of the primary data; and
re-computing the signal processing strategy with the combination.
15. An article of manufacture comprising a machine-accessible medium that includes content that when accessed provides instruction to cause a machine to:
receive primary data for which a reference signal is available;
receive secondary data for which a reference signal is not available;
develop a signal processing strategy based on the primary data and the available reference signal; and
incorporate information in the secondary data into the signal processing strategy to account for a changing interference environment.
16. An article of manufacture according to
apply the signal processing strategy to processing of one or more of an uplink and a downlink signal associated with a wireless communication system element.
17. An article of manufacture according to
combine at least a part of a feature of the secondary data with at least a part of a feature of the primary data; and
compute the signal processing strategy with the combination.
18. An article of manufacture according to
19. An article of manufacture according to
20. An article of manufacture according to
21. An article of manufacture according to
22. An article of manufacture according to
23. An article of manufacture according to
24. An article of manufacture according to
25. An article of manufacture according to
compute the signal processing strategy with the primary data;
combine at least a part of a feature of the secondary data with at least a part of a feature of the primary data; and
re-compute the signal processing strategy with the combination.
26. An article of manufacture according to
selectively apply a set of weights for an associated number of antennae in an antenna array to one or more of signal(s) received via said antenna array or signal(s) for transmission via said antenna array.
27. An article of manufacture according to
28. An article of manufacture according to
combine at least a part of a feature of tertiary data for which a reference signal is not available with the combination of at least a part of the feature of the secondary data with at least a part of the feature of the primary data; and
re-compute the signal processing strategy with the combination.
29. An apparatus comprising:
an antenna system to receive uplink signals and transmit downlink signals; and
a processor responsive to the antenna system to receive primary data for which characteristic information is available and secondary data for which characteristic information is not available, and to develop a signal processing strategy based on the primary data and the available reference signal, and incorporate information in the secondary data into the signal processing strategy to account for a changing interference environment.
30. An apparatus according to
31. An apparatus according to
32. An apparatus according to
33. An apparatus according to
34. An apparatus according to
35. An apparatus according to
36. An apparatus according to
37. An apparatus according to
38. An apparatus according to
39. An apparatus according to
40. An apparatus according to
41. An apparatus according to
42. An apparatus according to
This is a continuation-in-part of application Ser. No. 09/327,776, filed on Jun. 7, 1999 and issued as U.S. Pat. No. 6,141,567 on October 31, 2000.
The present invention relates to the field of wireless communication systems, and more specifically, to an apparatus and method for improving the formation of transmitted signals and processing of received signals by altering the beam shaping characteristics of the antenna elements in a receiving or transmitting communication station that includes an array of antenna elements to take into account a changing interference environment.
Adaptive smart antenna processing may be used in a communication station (e.g., a base station) equipped with multiple antennas to either reject interference when communicating from a subscriber unit to the communication station (i.e., on the uplink) or to deliver power in a spatially or spatio-temporally selective manner when communicating from the communication station to a subscriber unit (i.e., on the downlink). Smart antenna communication systems may use linear spatial processing as part of the adaptive smart antenna processing of the received signals during uplink communications. In this situation, amplitude and phase adjustments are applied, typically in baseband, to each of the signals received at the antenna array elements to select (i.e., preferentially receive) the signals of interest while minimizing any signals or noise not of interest (i.e., interference). Such amplitude and phase adjustment can be described by a complex valued weight, the receive weight, and the receive weights for all elements of the array can be described by a complex valued vector, the receive weight vector.
Similarly, the downlink signal transmitted from the base station to remote receivers may be formed by adjusting, typically, but not necessarily in baseband, the amplitude and phase of the signals that are transmitted by each of the antennas of the antenna array. Such amplitude and phase control can be described by a complex valued weight, the transmit weight, and the weights for all elements of the array by a complex valued vector, the transmit weight vector. In some systems, the receive (and/or transmit) weights include temporal processing terms, and in such cases, the receive (and/or transmit) weights may be functions of frequency and applied in the frequency domain or, equivalently, functions of time applied in the form of convolution kernels. Alternatively, each convolution kernel may itself be described by a set of complex numbers, so that the vector of convolution kernels may be re-written as a complex valued weight vector, which, for the case of there being M antennas and each kernel having K entries, would be a vector of KM entries.
The RF environment in which the base station is operating (i.e., the number and location of users of the communication systems and sources of interference, the physical propagation environment, and the condition of the transmitting and receiving systems) may change dynamically during usage of the communication system. In such a situation, an adaptive smart antenna processing system can be used to modify the system's processing strategies (e.g., modify the weights applied) for forming the transmitted beam and processing the received signals to compensate for the changes. This provides a method of adapting the signal transmission and received signal processing operations to reflect changes in the operating environment.
One approach to modifying the signal transmission and received signal processing characteristics of a communication system uses the transmission of training signals which are previously known at the receiver. By examining the form of the known data when it is received, the receiver can estimate the user and interferer spatial or spatio-temporal signatures. This is useful because signature estimation facilitates the computation of downlink and uplink weights. The receive spatial signature characterizes how the base station array receives signals from a particular remote (e.g., subscriber) unit in the absence of any interference or other subscriber units. The transmit spatial signature of a particular user characterizes how that remote user receives signals from the base station in the absence of any interference. See U.S. Pat. No. 5,592,490, entitled "SPECTRALLY EFFICIENT HIGH CAPACITY WIRELESS COMMUNICATION SYSTEMS", to Barratt, et al., and U.S. Pat. No. 5,828,658, entitled "SPECTRALLY EFFICIENT HIGH CAPACITY WIRELESS COMMUNICATION SYSTEMS WITH SPATIO-TEMPORAL PROCESSING", to Ottersten, et al., both of which are assigned to the assignee of the present invention and the contents of which are incorporated herein by reference.
Another method of modifying the signal transmission and received signal processing characteristics of a communication system is based on inserting a period of silence at a know position in the transmitted signal. This is useful because all other signal energy received during this interval is assumed to constitute interference and thus represents a characteristic of the operating environment. See U.S. patent application Ser. No. 08/729,387, entitled "ADAPTIVE METHOD FOR CHANNEL ASSIGNMENT IN A CELLULAR COMMUNICATION SYSTEM", to Yun, et al., assigned to the assignee of the present invention and the contents of which is incorporated herein by reference.
Thus, the training sequence and period of silence approaches both involve inserting data having a known characteristic into a set of data and then observing how that known data (or lack thereof) appears after propagation through the desired environment. The difference between the form of the known transmitted data and the received data is then used to estimate the characteristics of the environment and improve the processing of the unknown received data. While both of these approaches are useful, they have significant disadvantages because both methods expend valuable spectral bandwidth on signals which do not carry actual data. Furthermore, the methods are limited because they are only reliable to identify interference that overlaps spectrally or temporally with the training data or silence period.
So called "blind" methods are also known and used to improve the formation of transmitted signals and the processing of received signals. Such methods use one or more properties of the received signal, such as a geometric propagation model, cyclo-stationarity, constant envelope, or finite alphabet, to separate the desired user signal from interference. The resulting estimated signals and parameters for the properties are then used to formulate uplink and downlink signal processing strategies. While blind methods can respond robustly to changes in the interference environment, these methods suffer from a high computational burden, the need for a large amount of data over which the interference environment remains substantially constant, and the "association problem." The latter problem entails deciding which of the communication waveforms present in the received data is the signal of interest and which are produced by interferers.
Blind weight determining methods usually are iterative. The speed of convergence of any iterative method is usually dependent on the quality of the initial value used for the weights in the iterative method. One common approach is to use a previously determined value of weights. In a rapidly changing interference environment, the quality of such a set of weights may be significantly degraded from when the set was determined.
Thus, there is a need in the art for apparatus and methods that overcome the limitations of known methods for processing transmitted or received signals to account for changes in the operating environment. In this regard, it is desirable to have such apparatus and methods which do not require training data. It is also desirable to have apparatus and methods with modest data computational requirements and which are capable of responding quickly and robustly to even large changes in the interference environment. It is also desirable to have methods that can rapidly compute a processing strategy that can be used as an initial condition for iterative strategy determination.
The present invention is directed to apparatus and methods for adaptively producing transmitted signals and processing received signals ill a communication system which includes smart antenna elements. The invention is especially well suited for use with a base station which utilizes an adaptive antenna array and adaptive smart antenna signal processing to communicate with remote units, with the invention being used to modify the smart antenna uplink or downlink processing strategy, for example, the receive or transmit or weights, applied to signals received or transmitted by a plurality of antenna elements. The inventive technique can be used to add one or more antenna beam nulls aimed at one or more interferers to facilitate communication between the communication base station and remote subscriber units.
When processing received signals, an aspect of the invention modifies an existing processing scheme by incorporating information about a second set of signals for which training or other characteristic information is unknown to information about a first set of signals for which such characteristic information is known, prior to executing the processing scheme. This approach can be used to modify the receive processing strategy applied to the signals received from each of a plurality of antenna elements to take into account the presence of a changing interference environment. For example, for linear smart antenna processing, the approach can be used to modify the receive weights which determine the relative weight assigned to the signals received from each of a plurality of antenna elements to take into account the presence of a changing interference environment. This permits an adaptive updating of the receive processing strategy (e.g., receive weights) based on the additional information provided by the second set of data., and may be accomplished faster and with less computational resources than required to determine the processing strategy (e.g., receive weights) based on applying the entire processing scheme to the second set of data. In addition, assuming some relationship between the transmit and receive environment, the invention can also be used to modify the transmit processing strategy (e.g., transmit weights) used by the base station. For example, in a system, in which the uplink and downlink frequency is the same, reciprocity may be assumed. In a system in which the uplink and downlink frequencies are different for communicating with a particular remote user, more complex relationship may need to be determined, using, for example, the direction of arrival.
Thus, one aspect of the invention is a method of operating a communication system, which includes a base station and one or more remote units, in which an existing uplink processing method (e.g., in the case of linear processing, an improved set of uplink weights) or a downlink processing method (e.g., a set of downlink weights) is modified to improve the system operation when the interference environment varies with time. In particular, given any method for computing strategies or weights from a past signal, one embodiment of the invention includes modifying the method by adding a scaled version of a present signal into the past signal before the method is executed. This introduces information from the present signal into the processing scheme, permitting an updating of the weights with minimal computational resources. Other modifications also are possible, for example by modifying covariance matrices in covariance matrix-based methods. Such modifications are effective at rejecting interference that appears only in the present data and not in the past, while simultaneously maintaining performance comparable to the original unmodified method.
The improved strategy computed can also be used as an initial condition for iterative weight determining methods.
The present invention overcomes the limitations of known methods in that no training data or other reference signal determination is needed in the present data to alter the antenna element beams (e.g., to add beam nulls) for an existing uplink or downlink processing method, computational requirements are modest, and the method responds quickly and robustly to even large changes in the interference environment. In many cases the invention can be implemented with only small modification to an existing system, enhancing performance in a changing interference environment while negligibly impacting performance when the environment is static. Finally, the invention is applicable to both TDD systems in which the transmit and receive frequency is the same, and, and frequency domain duplexing (FDD) systems in which the transmit and receive frequency for communicating with a particular remote unit are different.
The present invention will be more fully understood from the description of the preferred embodiments of the invention, which, however, should not be taken to limit the invention to any specific embodiment but are for purposes of explanation and to provide a better understanding of the inventive apparatus and method. The preferred embodiments may be better understood with reference to the following figures:
Adaptive Smart Antenna Processing
The invention is directed to a processing method for altering the transmit or receive weights used by a communication station to define a transmitted signal or to process a received signal in order to take into account the presence of a changing interference environment, and apparatus for implementing the same. The invention may be implemented in a communication station that includes a receiver, an array of antennas and means for adaptive smart antenna processing of received signals. The invention may also be implemented in a communication station that includes a transmitter, an array of antennas, and means for adaptive smart antenna processing of transmitted signals. In a preferred embodiment, the communication station includes a transceiver and the capability of implementing both uplink and downlink adaptive smart antenna processing.
When receiving a signal from a subscriber (remote) unit, the signals received by each of the antenna array elements are combined by the adaptive smart antenna processing elements to provide an estimate of a signal received from that subscriber unit. In the preferred embodiment, the smart antenna processing comprises linear spatial processing, wherein each of the complex-valued (i.e., including in-phase I and quadrature Q components) signals received from the antenna elements is weighted in amplitude and phase by a weighting factor and the weighted signals are then summed to provide the signal estimate. The adaptive smart antenna processing scheme (i.e., the strategy) can then be described by a set of complex valued weights, one for each of the antenna elements. These complex valued weights can be described as a single complex valued vector of M elements, where M is the number of antenna elements. Thus, in the linear case, the smart antenna processing is designed to determine a set of weights such that the sum of the products of the weights times the antenna element signals provides an estimate of the remote user's transmitted signal which satisfies some prescribed "estimation quality" measure.
This representation of the adaptive smart antenna processing can be extended to include spatio-temporal processing, where the signal at each antenna element, rather than being weighted in amplitude and phase, is filtered by a complex valued filter, typically for purposes of time equalization. In such a method, each filter can be described by a complex-valued transfer function or convolving function. The adaptive smart antenna processing of all elements can then be described by a complex valued M-vector of M complex valued convolving functions.
Several methods are known for determining the weighting vectors to be applied when processing received signals. These include methods that determine the directions of arrival of signals from subscriber units, and methods that use the spatial or spatio-temporal characteristics of subscriber units, for example, the spatial or spatio-temporal signatures. See for example U.S. Pat. Nos. 5,515,378 and 5,642,353, entitled "SPATIAL DIVISION MULTIPLE ACCESS COMMUNICATION SYSTEMS", to Roy, et al., assigned to the assignee of the present invention and the contents of which are incorporated herein by reference, for methods that use directions of arrival. See also the above-referenced U.S. Pat. Nos. 5,592,490 and 5,828,658 for methods that use spatial and spatio-temporal signatures.
"Blind" methods determine the weights from the signals themselves, but without resorting to a priori knowledge such as training signals or silent periods, that is, without determining what weights can best estimate a known symbol sequence (or in the case of the period silence, the absence of a known sequence). Such blind methods typically use some known characteristic of the signal transmitted by the subscriber unit to determine the best receive weights to use by constraining the estimated signal to have this property, and hence are sometimes referred to as property restoral methods.
Property restoral methods in turn can be classified into two groups. Simple property restoral methods restore one or more properties of the signal without completely reconstructing the modulated received signal, for example by demodulating and then re-modulating. More complex restoral methods typically rely upon reconstruction of the received signal.
Property restoral methods determine a signal (a "reference signal") that is constrained to the required property and then determine a set of weights corresponding to the reference signal, such that if the reference signal was transmitted by a remote user, the signals at the antenna elements of the receiving array would be acceptably "close" to the signals actually received. One example of a simple restoral method is the constant modulus (CM) method, which is applicable to communication systems that use a modulation scheme having a constant modulus, including, for example phase modulation (PM), frequency modulation (FM), phase shift keying (PSK) and frequency shift keying (FSK). The CM method has also been shown to be applicable to non-CM signals. Other partial property restoral techniques include techniques that restore the spectral properties of the signal, such as the signal's spectral self-coherence.
"Decision directed" (DD) methods construct a reference signal by making symbol decisions (e.g., demodulating) the received signal. Such decision directed methods use the fact that the modulation scheme of the transmitted subscriber unit signal is known, and then determine a signal (a "reference signal") that is constrained to have the characteristics of the required modulation scheme. In such a case, the reference signal production process includes making symbol decisions. Weights are determined that produce a reference signal, that if transmitted by a remote user, would produce signals at the antenna elements of the array that are acceptably "close" to the signals actually received. See, for example, U.S. patent application Ser. No. 08/729,390, entitled "METHOD & APPARATUS FOR DECISION DIRECTED DEMODULATION USING ANTENNA ARRAYS & SPATIAL PROCESSING" to Barratt, et al., and Ser. No. 09/153,110, entitled "METHOD FOR REFERENCE SIGNAL GENERATION IN THE PRESENCE OF FREQUENCY OFFSETS INA COMMUNICATION STATION WITH SPATIAL PROCESSING" to Petrus, et al., both of which are assigned to the assignee of the present invention and the contents of which are incorporated herein by reference, for descriptions of systems that use decision directed weight determination methods.
As previously mentioned, weight determining schemes also are known that use training data, that is, data whose symbols are known a priori. The training data (possibly with a timing offset or frequency offset, or both applied) is then used as a reference signal to determine the smart antenna processing strategy (e.g., the weights). Therefore, reference signal based methods include the case in which the reference signal includes training data, the case in which the reference signal includes a signal constrained to have some property of the transmitted signal, and the case in which the reference signal includes constructing a signal based on making symbol decisions.
Non-linear uplink and downlink processing strategies also are known. In the uplink direction, such methods typically include demodulation and act to determine an estimate of the symbols transmitted by a desired remote user from the set of signals received at the antenna elements of the communication station. One known example of such a processing scheme is based on a Viterbi algorithm using branch metrics. In this regard, it is noted that the present invention is not limited to linear spatial and spatio-temporal processing methods that include weight determining, but also is equally applicable to non-linear methods such as those based on Viterbi algorithms and branch metrics, which may not necessarily include determining weights.
All the above strategy computation methods have the following elements in common: they include use of a known or determined reference signal, they determine a strategy based on processing received signal data, and they to take into account the one or more aspects of operating environment, e.g., the location, number, and characteristics of interfering transmitters, changing characteristics of the channel, etc. Such an operating environment is referred to herein as the interference environment, and such strategy determining methods are called "interference mitigating" weight determining methods herein.
In theory, adaptive smart antenna processing permits more than one communication link to exist in a single "conventional" communication channel so long as the subscriber units that share the conventional channel can be spatially (or spatio-temporally) resolved. A conventional channel includes a frequency channel in a frequency division multiple access (FDMA) system, a time slot in a time division multiple access (TDMA) system (which usually also includes FDMA, so the conventional channel is a time and frequency slot), and a code in a code division multiple access (CDMA) system. The conventional channel is then said to be divided into one or more "spatial" channels, and when more than one spatial channel exists per conventional channel, the multiplexing is called space division multiple access (SDMA). SDMA is used herein to include the possibility of adaptive smart antenna processing, both with one and with more than one spatial channel per conventional channel.
Base Station Architecture
The preferred embodiment of the inventive method and apparatus is implemented in a communication receiver, in particular, a Personal Handyphone System (PHS)-based antenna-array communication station (transceiver) such as that shown in
While systems having some elements similar to that shown in
In the system of
The PHS form of the preferred embodiment of the present invention uses TDD. The transmitters 120 and receivers 122 may be implemented using analog electronics, digital electronics, or a combination of the two. The preferred embodiment of receivers 122 generate digitized signals that are fed to signal processor or processors 123. Signal processors 119 and 123 incorporate software and/or hardware for implementing the inventive method and may be static (always the same processing stages), dynamic (changing processing depending on desired directivity), or smart (changing processing depending on received signals). In the preferred embodiments of the invention, processors 119 and 123 are adaptive. Signal processors 119 and 123 may be the same DSP device or DSP devices with different programming for the reception and transmission, or different DSP devices, or different devices for some functions, and the same for others. Elements 131 and 133 are for implementing the method of the present invention for downlink and uplink processing, respectively, in this embodiment, and include programming instructions for implementing the processing methods.
Note that while
The PHS system is an 8 slot time division multiple access (TDMA) system with true time division duplex (TDD). Thus, the 8 timeslots are divided into 4 transmit (TX) timeslots and 4 receive (RX) timeslots. This implies that for any particular channel, the receive frequency is the same as the transmit frequency. It also implies reciprocity, i.e., the propagation path for both the downlink (from base station to users' remote terminals) and the uplink (from users' remote terminals to base station) is identical, assuming minimal motion of the subscriber unit between receive timeslots and transmit timeslots. The frequency band of the PHS system used in the preferred embodiment is 1895-1918.1 MHz. Each of the 8 timeslots is 625 microseconds long. The PHS system includes a dedicated frequency and timeslot for a control channel on which call initialization takes place. Once a link is established, the call is handed to a service channel for regular communications. Communication occurs in any channel at the rate of 32 kbits per second (kbps), a rate termed the "full rate". Less than full rate communication is also possible, and the details of how to modify the embodiments described herein to incorporate less than full rate communication would be clear to those of ordinary skill in the art.
In the PHS used in the preferred embodiment, a burst is defined as the finite duration RF signal that is transmitted or received over the air during a single timeslot. A group is defined as one set of 4 TX and 4 RX timeslots. A group always begins with the first TX timeslot, and its time duration is 8�0.625=5 msec.
The PHS system uses (π/4 differential quaternary (or quadrature) phase shift keying (π/4 DQPSK) modulation for the baseband signal. The baud rate is 192 kbaud. There are thus 192,000 symbols per second.
The timeslot processors 217 perform several functions, which may include the following: received signal power monitoring, frequency offset estimation/correction and timing offset estimation/correction, smart antenna processing (including determining receive weights for each antenna element to determine a signal from a particular remote user, in accordance with the present invention), and demodulation of the determined signal. The version of the uplink processing method of the invention as implemented in each timeslot processor 217 in the embodiment of
The output of the timeslot processor 217 is a demodulated data burst for each of the M receive timeslots. This data is sent to host DSP processor 231 whose main function is to control all elements of the system and interface with the higher level processing (i.e., processing which deals with what signals are required for communications in the different control and service communication channels defined in the PHS communication protocol). In the preferred embodiment, host DSP 231 is a commercial DSP device. In one implementation of the present invention, timeslot processors 217 send the determined receive weights to host DSP 231. Note that if desired, the receive weights may also be determined by software specifically implemented in host DSP 231.
RF controller 233 interfaces with the RF transmit elements, shown as block 245 and also produces a number of timing signals that are used by both the transmit elements and the modem. RF controller 233 receives its timing parameters and other settings for each burst from host DSP 231.
Transmit controller/modulator 237 receives transmit data from host DSP 231.
Transmit controller 237 uses this data to produce analog IF outputs which are sent to RF transmitter (TX) modules 245. The specific operations performed by transmit controller/modulator 237 include: converting data bits into a complex valued (π/4 DQPSK) modulated signal; up-converting to an intermediate frequency (IF); weighting by complex valued transmit weights obtained from host DSP 231; and, converting the signals to be transmitted using digital to analog converters ("DACs") to form analog transmit waveforms which are provided to transmit modules 245.
The downlink processing method of the invention is implemented in the embodiment of
Transmit modules 245 upconvert the signals to the transmission frequency and amplify the signals. The amplified transmission signal outputs are coupled to the M antennas 103 via duplexer/time switch 107.
In describing the inventive methods, the following notation is used. Given M antenna elements (M=4 in one implementation, and 12 in another embodiment), let z1(t), z2(t), . . . zM(t) be the complex valued responses (that is, with in-phase I and quadrature Q components) of the first, second, . . . , M'th antenna elements, respectively, after down-conversion, that is, in baseband, and after sampling (four-times oversampling in the preferred embodiment). In the above notation, but not necessarily required for the present invention, t is discrete. These M time-sampled quantities can be represented by a single M-vector z(t) with the i'th row of z(r) being zi(t). For each burst, a finite number of samples, say N, is collected, so that z1(t), z2(t), . . . , zM(t) can each be represented as a N-row vector and z(t) can be represented by a M by N matrix Z. In much of the detailed description presented hereinafter, such details of incorporating a finite number of samples are assumed known, and how to include these details would be clear to those of ordinary skill in the art.
Assume signals are transmitted to the base station from Ns remote users. In particular, assume that a subscriber unit of interest transmits a signal s(t). Linear adaptive smart antenna processing, which is used in the preferred embodiment of the invention, includes taking a particular combination of the I values and the Q values of the received antenna element signals z1(t), z2(t), . . . zM(t) in order to extract an estimate of the transmitted signal s(t). Such complex valued weights may be represented by the receive weight vector for the this particular subscriber unit, denoted by a complex valued weight vector wr, with ith element wri. The estimate of the transmitted signal from the remote unit may then be represented as:
The spatial processing described by Eq. 1 may be re-written in vector form for the case of N samples of M-vector signals z(t) and N samples of the transmitted signal s(t) being estimated. In such a case, let s be a (1 by N) row vector of the N samples of s(t). The copy signal operation of Eq. 1 may then be re-written as s=wr HZ.
In embodiments which include spatio-temporal processing, each element in the receive weight vector is a function of time, so that the weight vector may be denoted as wr(r), with ith element wri(t). The estimate of the signal may then be expressed as:
With spatio temporal processing, the convolution operation of Equation (2) is usually finite and when performed on sampled data, equivalent to combing the spatial processing with time equalization using a time-domain equalizer with a finite number of equalizer taps. That is, each of the wri(t) has a finite number of values of t and equivalently, in the frequency domain, each of the Wi(k) has a finite number of k values. If the length of the convolving functions wri(t) is K, then rather than determining a complex valued M-weight vector wr, one determines a complex valued M by K matrix Wr whose columns are the K values of wr(t).
Alternatively, a spatial weight determining method can be modified for spatio-temporal processing according to a weight matrix by re-expressing the problem in terms of matrices and vectors of different sizes. As throughout this description, let M be the number of antenna elements, and N be the number of samples. Let K be the number of time equalizer taps per antenna element. Each row vector of N samples of the (M by N) received signal matrix Z can be rewritten as K rows of shifted versions of the first row to produce a received signal matrix Z of size (MK by N), which when pre-multiplied by the Hermitian transpose of a weight vector of size (MK by 1), produces an estimated received signal row vector of N samples. The spatio-temporal problem can thus be re-expressed as a weight vector determining problem.
For example, for covariance based methods, the weight vector is a "long" weight vector of size (MK by 1), the covariance matrix R=ZZV is a matrix of size (MK by MK), and the correlation of the antenna signals Z with some signal represented by a (1 by N) row vector s is rzs=ZsH, a long vector of size (MK by 1). Rearranging terms in the "long" weight vector provides the required (M by K) weight matrix.
A downlink (i.e., transmit) processing strategy using adaptive smart antenna processing includes transmitting a signal, denoted in the finite sampled case by a (1 by N) vector s, from the communication station to a particular remote user by forming a set of antenna signals (typically, but not necessarily in baseband). Linear smart antenna processing determines the antenna signals as:
Note that a downlink strategy, for example including determining the downlink weights wt, may be implemented by basing it on an uplink strategy, for example uplink weights, together with calibration data. In this situation, the calibration accounts for differences in the receive and transmit electronic paths for the different antenna elements. The downlink strategy may also be found from the uplink strategy by using the transmit spatial signatures of the remote users, or by other known methods. Again, the weight vector formulation may be used for both linear spatial processing and linear spatio-temporal processing.
In the remainder of this description of the present invention, whenever a complex valued receive or transmit weight vector w or its elements are mentioned, it will be understood that these may be weights for spatial processing or may be generalized to incorporate spatio-temporal processing as described above to determine a weight matrix W. Both spatial processing and spatio-temporal processing are thus referred to herein as linear adaptive smart antenna processing. The invention, however, also is applicable to non-linear processing strategies, for example those that use Viterbi algorithm with branch metrics. The preferred embodiment of the invention may conveniently be described by considering received data to be one of two types: primary data, for which a reference signal (or other characterizing information) is available, and secondary data, for which a reference signal may or may not be available. The primary data is the data that is used in some known processing strategy (e.g., weight) determining process, and one goal of the invention is to adaptively update or improve this process by using "secondary" data, for example more recent data, without carrying out all of the computational steps required by the known process when applied to the primary data.
For example, secondary data might come from the payload of the current burst or from a future data burst (possibly on a new channel). The source of the reference signal for the primary data depends on the particular known strategy (e.g., weight) determining process to which the method of the invention is applied: it could be, without limitation, from previous CM method iterations or from DD iterations, or training data. Thus, the present invention is generally directed to a modified or adaptive transmit and receive smart antenna processing strategy computation method (e.g., a weight determining method) in which an amount of secondary data is combined with primary data prior to execution of an existing strategy computation method. This permits incorporation of additional information into the primary data prior to execution of the strategy computation method on that data. In the linear processing case, the result is an updated set of weights which incorporates information regarding how the secondary data differs from the primary data, e.g., changes arising from the interfering environment, etc.
The preferred embodiment of the invention improves a method for computing an uplink or downlink processing strategy that uses as inputs a reference signal and the received antenna signal data and that takes into account the interference environment present in the received antenna signal data for interference mitigation. As would be known to those in the art, interference mitigating strategy determining methods explicitly or implicitly use on one or more characteristic features of the received antenna data. Depending on the known method, the primary data set, the secondary data set, or both, may be explicitly reduced to one or more particular characteristic feature that the known method explicitly uses for its computation. For example, for methods that use the spatial or spatio-temporal covariance matrix of the input, the data may be reduced to the spatial or spatio-temporal covariance matrix of the data. Other methods may be based on other properties and in such cases the input signal data may be reduced to the particular feature or property which the known strategy method utilizes. Yet other methods, while implicitly dependent on come feature (e.g., the spatio-temporal covariance) of the received signal, do not require explicit estimation of the feature such as covariance.
Since some of the discussion below applies for both receive and transmit strategy, the "r" or "t" subscripts are omitted in such quantities as the weight vectors w. Such subscripts may be used explicitly to identify uplink or downlink processing, and their addition will be clear from the context to those of ordinary skill in the art.
Application of the Invention to a Characteristic Feature(s) Based Processing Method
Several embodiments of the invention may be applied to a processing strategy which includes strategy (e.g., weight) determination in which the strategy determining computations are based on calculation and manipulation of one or more characteristic features of the received signal data. One such example is when the strategy determination is based on determining covariance matrices of the data. This embodiment will now be described in greater detail.
Let Z be the matrix of received antenna array signals, preferably but not necessarily in baseband. Let s1 be a (1 by N1) reference signal vector of N1 samples. A is reference signal s1 may be a known training sequence, or, in decision directed methods, a signal constructed to have the same known modulation structure as the signal transmitted by the subscriber unit, or for property restoral methods, a signal that is constrained to have the required property. The well known least squares (MSE) technique computes the uplink or downlink weights by solving the minimization problem:
The present invention modifies this weight determining process by incorporating information derived from signals for which a reference signal may not be available, providing an updated set of weights without the computational overhead required for processing the signals which include a reference signal. Thus, for example, the steps of identifying and extracting the reference signal data, forming the covariance term for the first set of data, and forming the cross correlation term for the first set of data do not need to be repeated when updating the weights. This significantly reduces the computational steps required to provide a new set of weights, while resulting in improvements in the processing of the received data.
In practice, for example in a mobile PHS, because of limited computational power, only a small number of the 960 samples making up a received signal burst are used to determine RZZ −1. In addition, the samples are determined at the baud points rather than being oversampled. Using only a small number of samples to determine weights may cause what is called "overtraining" herein: the weights performing well on the data containing the reference signal but not on new data, i.e., while the weights extract the desired signal energy and reject interference, the weights may perform poorly on new data. An improvement to the least squares technique which can assist in this situation includes a process termed "diagonal loading" (see, for example, B. L. Carlson: "Covariance matrix estimation errors and diagonal loading in adaptive arrays," IEEE Transactions on Aerospace and Electronic Systems, vol. 24, no. 4, July 1988), by which a diagonal adjustment is added as follows:
The method of the present invention modifies the above approach as follows. Let Z1 consist of received signal samples for which a reference signal s1 is available. In the context of the invention, Z1 is referred to as primary data. Let Z2 consist of received signal samples for which a reference signal is not available (or at least is not extracted), i.e., what is referred to as secondary data. The matrix Z1 and the reference signal vector s1 have the same number, say N1 of columns, with this being the number of samples in each of Z1 and s1. This number typically, but not necessarily, is less than the total number of input samples available.
In one embodiment, Z1 and Z2 may be obtained from the same data burst, and the reference signal s1 is training data included in the received signal data Z1 Note that this need not be all of the training data in Z. In this situation Z1 is the part of the burst data Z containing the training data s1, and Z2 is from the remainder of the burst.
In an alternative embodiment, Z1 is obtained from a prior burst already processed to extract a reference signal s1, while Z2 is from a new (presumably later) data burst which has not yet been processed. Other alternatives also are possible. The preferred embodiment of the inventive method adds information from the secondary data to the primary data used by the known processing strategy computation (e.g., weight determining) method. In particular, the preferred embodiment of the invention computes the updated weights as:
One way to determine if the weights have responded adequately to interference is to apply the weights to tertiary data that contains both a desired signal (with the same structure as the signal in Z1 that corresponds to the reference signal) and an interference signal (with the same structure as the interference present in Z2). The resulting signal quality can be estimated and taken as a measure of the interference-rejecting performance of a particular value of β. Signal quality measuring and estimating methods are known, and an improved signal estimation method and apparatus is disclosed in U.S. patent application Ser. No. 09/020,049 to Yun entitled "POWER CONTROL WITH SIGNAL QUALITY ESTIMATION FOR SMART ANTENNA COMMUNICATION SYSTEMS," assigned to the assignee of the present invention and incorporated herein by reference.
Similarly, one way to determine if a value of β generates weights with degraded performance in the absence of new interference is to apply the weights to Z1 and estimate the resulting signal quality. In the preferred embodiment applied to PHS, an average loss in signal quality of less than 1.0 dB relative to β=0 is considered to be acceptable.
In the preferred PHS embodiment, the value of β is set to {fraction (1/16)}. Choosing β equal to a power of 2 simplifies implementation of the method. The optimal setting for β depends on a number of factors, including, but not limited to the target signal-to-interference-plus-noise-ratio (SINR) required for successful demodulation, the number of available data samples in Z1 and Z2, and whether or not further iterations will be used to modify the weights.
A good setting for β can be determined experimentally. Alternatively, β can be selected to be small enough so that the power of any desired signal components in βZ2 are smaller than the noise power in Z1. According to this guideline—which helps preserve signal quality in the absence of a changing interference environment—the higher the target SINR the smaller must be β. Conversely, β must be large enough to allow the strategy generating method to recognize and respond to interference. In the preferred least-squares embodiment, the sensitivity of the weights to interference increases with the number of samples in Z1, so β can be reduced as the number of samples grows.
One application of the method of determining weights incorporating the effects of secondary data is to provide an initial strategy to use in an iterative strategy determining method. In a system which communicates burst-by-burst, like the PHS system of the preferred embodiments, an iterative method may be used for weight determining, an in the prior-art, the initial values of the weights may be the weights determined from the previous burst. Using any of the embodiments described herein, the initial value used may be improved by taking into account new (secondary) data to produce an improved initial set of weights.
When further iterations are employed (e.g., using the same weight calculation method as in the first iteration, preferably with β=0, or alternatively with a completely different iterative weight calculation method), a larger initial value of β may be selected. This will increase the interference rejection performance at the expense of decreased signal quality when the interference environment does not change. The loss in signal quality will be reversed by the subsequent iterations. One useful constraint on β, then, is that the signal quality after the first iteration be high enough to allow the later iterations to rapidly converge. The exact conditions for convergence depend on the iterative method.
Many modifications to the method are possible and fall within the scope of this aspect of the present invention. In general, any uplink (i.e., receive) processing method which utilizes as an input a characteristic feature or features, which, for example, might be the spatial (or spatio-temporal) covariance, or the cyclo-stationary spatio-temporal covariance may be modified.
One aspect of the invention that includes modifying a characteristic feature(s)-based strategy determining method is shown in
As an example of a typical application of the inventive method, assume an improvement is sought to a known scheme that determines downlink weights from data obtained from a previous burst. It is desired to introduce a method of interference mitigation based on data received in the present burst (the secondary data). However, assume that not enough computational power is available to completely perform the computation required by the receive weight determining part of the known scheme (or for purposes of computational speed, it is desired to have a method of updating the receive weights without performing the entire computation).
Another application of the inventive method is to an air interface protocol that supports the concept of "discontinuous transmission", for which no bursts are transmitted during periods of voice inactivity. For such air interfaces the desired user signal and the interferer signals are received intermittently; some bursts contain the desired user signal only, some bursts contain interferers only, and some bursts containing both or neither. As a further complicating factor, the decision to transmit a signal to the desired user on a given burst may be independent of whether the preceding received burst contains a signal from that user. A useful downlink transmission strategy under these conditions is to direct a beam towards the desired user and to direct nulls towards all interferers that were received during the last several bursts, say NT bursts. Downlink weights that substantially implement this strategy may be computed by setting Z1 equal to the last received burst that contains a signal from the desired user, and setting Z2 equal to the concatenation of those bursts within the last NT bursts that do not contain a signal from the desired user. In an alternative simplified implementation Z2 is set equal to the concatenation of the NT most recent bursts, regardless of whether they contain the desired user signal or not. Thus, in this implementation, the primary data includes received signal data from when the remote user is transmitting data to the wireless station, so that the smart antenna processing strategy directs a beam towards the remote user and directs nulls towards interferers that are included in the secondary data.
To summarize, in one aspect, the inventive method is designed to update a smart antenna strategy computation (e.g., weight determining) process to account for a changing operating environment (e.g., the presence of sources of interfering signals which may vary between the primary and secondary data) by introducing information about the secondary data into the term used by the strategy computation method which depends on the primary data.
Thus, in all of the embodiments of the invention to be described, a known strategy (e.g., weight) determining process is used that computes an uplink or a downlink strategy based on a reference signal, denoted s1, and on received signal inputs, for example primary data Z1, from the antenna array elements. The strategy computation method includes interference mitigation, i.e., takes the interference environment in the primary data Z1 into account. Such a strategy determining method is shown in
In accordance with the present invention, the inputs to the known strategy computation method are modified to be the reference signal of the first set of data and a combination formed from the first set of data and a second set of data as shown in FIG. 12.
Applying the system of
In accordance with an embodiment of the present invention, the known scheme is modified so that the updated weight values incorporate interference mitigation by using data received in the present burst. The inventive computation required includes estimating the covariance of the secondary data and adding an adjustable fraction of this to the covariance estimate determined from the primary data. As shown in
Note that other covariance matrix modifications also are possible and fall within the scope of the invention. For example, as shown in
In yet another alternative, rather than introducing the primary and secondary data by adding a scalable part of the secondary covariance matrix to the first matrix, other methods of combining the contributions from the two sets of data could be used and such non-additive combining methods are also within the scope of the present invention. As an illustrative example, a method for combining that includes performing a matrix factorization of the primary data and the secondary data into factors, and then combining the resulting factors by one of several methods to form a combined covariance matrix is now described. The factorization uses the generalized singular value decomposition (SVD). As is well known (see, for example, Theorem 8.7.4 in G. H. Golub and Charles F. Van Loan: Matrix Computations, 3rd Ed. Baltimore, Md.: Johns Hopkins University Press, 1996), there exists an invertible matrix X (M by M) and unitary matrices U1 and U2 (N by M) that simultaneously diagonalize the primary data matrix Z1 (M by N) and secondary data matrix Z2(M by N), i.e.,
Many other combining methods of the factors are possible; for example the max(a, b) could be replaced by some general "combine(a, b)" operation, where a and b and the factors combined, in this case, the square of the magnitude of the factors. For example, the max(|λi|2β|σi|2) operation may be replaced with a generalized geometric mean (|λi|2(1−μ)|σi|2β). All these generalizations may be described by the block diagram of
An alternate general combiner, which may be considered a special case of that of
Uplink processing methods are also known that use the noise-plus-interference covariance matrix, denoted RVV, rather than the noise-plus-interference-plus-signal covariance matrix RZZ. Such methods include using a noise plus interference covariance estimator which uses primary data (containing the signal plus interference plus noise) and a reference signal based on the primary data, or on which the primary data is based, to determine RVV. An embodiment of the invention used with such a processing method is shown in block diagram form in
Another embodiment of the present invention is applicable to processing strategy (e.g., weight) determining techniques that do not necessarily explicitly compute estimates any of the one or more characteristic features on which the strategy computation method is based, for example, do not explicitly estimate spatial (or spatio-temporal) covariance matrices such as RVV or RZZ. This embodiment, however, is also applicable to such methods that explicitly compute the estimates, such as covariance matrix-based methods.
The general block diagram of
The "injected signal" embodiments described below take advantage of the common property of the known strategy computation method that any signal collinear to the desired user does not substantially affect the uplink or downlink strategy. Consider an additional signal based on secondary data Z2 injected (with some adjustable parameter, say β) into the primary signal Z1 (thereby forming a term of the form, Z1+βZ2). Typically, the injected signal would have both interference components and components from the desired remote user transmitter, but, because it is secondary data, the reference signal (of the desired user) is not of this secondary data. Thus, even the desired part of the injected signal appears as interference which is collinear with the desired signal. However, since the minimum squared error (MSE) or SINR performance of the uplink strategy is not substantially affected by interference collinear to the desired signal, a strategy computation method which attempts to maximize SINR should not substantially change its strategy (e.g., its weight determinations) in response to the desired user components in the superposed signal (but only in response to the interference bearing components).
Note that a "method that computes an uplink strategy" refers to a method that operates as follows. The inputs to the method are samples of the received signal and of a reference signal. The output of the method is an uplink processing strategy, or set of parameters that define the strategy. Preferentially, the uplink strategy is linear filtering to produce a copy signal, followed by decision directed demodulation, where the copy signal operation is described by s=wHZ for the case of uplink spatial processing, and the parameters are the necessary linear filters (which comprise a weight vector w for the case of spatial or spatio-temporal processing). See, for example, co-owned U.S. patent application Ser. No. 09/153,110, entitled "METHOD FOR REFERENCE SIGNAL GENERATION IN THE PRESENCE OF FREQUENCY OFFSETS IN A COMMUNICATIONS STATION WITH SPATIAL PROCESSING" to Petrus, et al., assigned to the assignee of the present invention and the contents of which is incorporated herein by reference.
Alternative, non-linear uplink strategies include Viterbi sequence detection, using branch metrics computed from a noise plus interference covariance matrix, the parameters in this case being a noise plus interference covariance matrix estimate. The following demonstrates how the well known Viterbi sequence detection method can be applied to strategy determining. Assume that the communication waveform s(t) is finite alphabet, e.g., QAM, PSK, DQPSK, etc. A common model for the received antenna signals is
As a result of this operation, the whitened antenna signal forming channel may be modeled as
The problem has now been restated as a standard multi-sensor detection problem in white noise to which standard sequence detection techniques may be used such as the Viterbi algorithm with appropriate branch metrics. See for example J. W. Modestino and V. M. Eyuboglu, "Integrated multi-element receiver structures for spatially distributed interference channels, "IEEE Transactions on information theory, vol. IT-32, No. 2, pp. 195-219, March 1986, for a description of such non-linear methods. It would be clear in addition that timing recovery, phase and frequency correction, and error correction methods can be advantageously combined with the sequence detection,
One implementation of a signal injection method is shown in the block diagram of FIG. 13. As shown in the figure, preferably, the known uplink or downlink strategy (e.g., receive or transmit weight) determining method, when applied to systems that transmit and receive data burst-by-burst, computes the uplink or downlink strategy for the present burst by using antenna array inputs (labeled "primary data") and a reference signal from a past burst or bursts. In accordance with an aspect of the present invention, the past array inputs (in general any primary data) are modified by adding a scaled version of the present array inputs (in general, any secondary data) to the past array inputs prior to computation of the strategy. Thus, in this case the input "signal" used as part of the weight determining computation (along with the reference signal) is a linear combination of the primary and secondary data (e.g., Dataprimary+βDatasecondary).
Note that in some circumstances, the method shown in
Note that the injection shown is addition because that is the simplest to implement. Variations clearly are possible for how a variable amount of the secondary signal is injected. For example, if some other, say non-additive combining means is already available, for example for other purposes, then it would be advantageous to use such a combining means to inject the signal rather than an adder. Such variations are all within the scope of the invention, and how to include such variations would be clear to those of skill in the art.
A generalization of this method is shown in FIG. 14. This, for example, may be an alternate way of dealing with unequal data amounts. It also can be used as a data reduction method. The embodiment of
The signal injection method may be used in any of the previously discussed embodiments. In any of these, the injected signal may be a fraction of the secondary data, or synthetically generated data having the same spatio-temporal properties as the secondary data.
Note that while the signal injection methods preferably involve adding a fraction of the secondary signal (or a signal generated from secondary data) to the primary data, other non-additive methods of combining also are within the scope of the present invention. For example, one method for combining includes performing a matrix factorization of the primary data and the secondary data into factors, and then combining the resulting factors to form a combined signal. The factorization may be a generalized singular value decomposition described herein above. If "combine(λi, σi; β)" is used to define the combining of the factors λi, and σi, respectively, of the primary and secondary data matrices Z1 and Z2, respectively, with β defining the relative amount of secondary data, some possibilities include
There exist many other applications of the method of the present invention. As a further representative example, consider the problem of determining a sequence of uplink processing weights for a sequence of received bursts when a good reference signal is available for only some of the bursts. A bad reference signal may occur, for example, if a decision directed iterative method is used to extract the reference signal from the received data; in some cases the iteration may fail to converge, or may converge to a reference signal that does not correspond to the desired user. In the preferred PHS embodiment, one way his "false" this convergence may be detected is using the 16 bit cyclic redundancy check (CRC) present in each PHS burst to test the payload of the burst for corruption. If the CRC test fails, the reference signal is judged to be corrupted and not suitable for future weight computations. See for example, U.S. patent application Ser. No. 09/286,135 to Petrus entitled "MULTIMODE ITERATIVE ADAPTIVE SMART ANTENNA PROCESSING METHOD & APPARATUS", assigned to the assignee of the present invention, incorporated herein by reference. Such a failure, however detected, is called reference signal corruption herein.
When selecting the initial weights to use for the current burst, prior art methods respond to a CRC failure on the previous burst by reusing old weights computed from the most recent burst to pass the CRC test. The old weights, however, do not mitigate interference from new interferers. The older the weights, the more likely it becomes that a new interferer appears, resulting in a long sequence of badly processed bursts. One aspect of the method of the present invention is overcoming this limitation by using as the primary data the most recent burst and reference signal to pass a reference signal selection test, for example the CRC test, and using as the secondary data the current burst yet to be processed. Thus this aspect of the invention provides a method that recovers from reference signal corruption while rejecting interference in a changing interference environment.
FIG. 19 and
The simulations are for a communication station with an 8-element antenna array that uses burst-by-burst communication. The data bursts processed consist of 88 independent temporal samples. Each simulation run processes two bursts of data. The primary burst Z1 consists of a single user in spatio-temporally white additive Gaussian noise,
The prior art weight computation method computes an uplink weight vector w using:
An aspect of the present invention is an apparatus and method for adaptively updating a process which determines the transmit or receive smart antenna processing strategy (e.g., weights) applied to form a set of antenna signals during the formation of a signal to be transmitted from a base station to a remote user, or for the processing of received signals to estimate a signal transmitted from a remote user to the base station. The updating of the strategy computation process can be used to alter the antenna beamforming (and nullforming) characteristics of an array of antenna elements in order to adapt to a changing operating environment, e.g., differences in the location, number, or motion of interfering transmitters, changing characteristics of the channel, etc., which may differ between data bursts. Such a changing operating environment is referred to as a changing interference environment. In one embodiment, the inventive method alters the data set used as an input to a known processing strategy computation method by incorporating a scaled version of a second set of data, or a characteristic of the second set of data. The combination of the first data set and the scaled version of the second data set is input to the known processing strategy computation method in place of using the first data set as an input. The resulting processing strategy computation method is thereby altered to incorporate information obtained from the second set of data, but without the computational overhead required to completely process the second set of data
Note that the apparatus and method of the present invention does not need to explicitly identify any new interferer waveforms and does not need to attempt to separate the desired remote user signal from the interferer in the secondary data, for example, the present burst. For example, in the signal injection embodiments, no computation other than scaling of the secondary data and combination of that scaled data with the primary data is performed.
Note also that the various embodiments of the invention can be used in a wireless receiver that has an array of antenna elements for processing signals received at the antenna elements, or in a wireless transmitter having an array of antenna elements for processing a signal to be transmitted to form signals for transmission by the antenna elements. In general, the term "wireless station" therefore may be used for a receiver having an array of antenna elements or for a transmitter having an array of antenna elements or for a transceiver having an array of antenna elements for both reception and transmission.
The terms and expressions which have been used herein are used as terms of description and not of limitation, and there is no intention in the use of such terms and expressions of excluding equivalents of the features shown and described, or portions thereof, it being recognized that various modifications are possible within the scope of the invention claimed.
Patent Citations
Non-Patent Citations
Referenced by
Legal Events
Original Image


text: Media Contact:KINGSTON, R.I. –May 18, 2010--Each year, the University of Rhode Island honors graduating seniors with superior academic achievement in a particular field with a University Academic Excellence Award. Their selection is based on grade point average, as well as other criteria determined by the individual department. For example, criteria might include an honors project, a research presentation, or a student's professional promise.

subset: commoncrawl


text:
On behalf of everyone in the Zen Center sangha, I would like to express our deep and heartfelt appreciation to the five Zen monks who saved Tassajara, forever to be known as the "Tassajara Five." Your spontaneous and personal decision to turn back toward the fire in the face of evacuation orders will live on as a decisive moment of courage, clarity and truth for all of us to witness and learn from, and for future generations to be inspired by. A deep bow to each of you.
I would also like to express our sincere gratitude to each and every person in the Zen Center sangha. During this time of crisis, all around us we have seen Zen students from Tassajara, Green Gulch Farm, and City Center, as well as members of the wider sangha, pulling together to support each other with their cool minds, ready bodies and strong practice. I myself have witnessed and heard many stories of people responding with great care and kindness; each person in their own way, standing up courageously to do whatever is necessary in the face of a very challenging situation.
Lastly, I would like to express my thanks to everyone who has so thoughtfully sent in notes and emails wishing for the safety and well-being of the Zen Center community and Tassajara, and in particular, those of you who have responded so generously with donations. I also want to acknowledge and thank the many people who have shared various perspectives and contributed to a lively discussion on the Sitting with Fire blog.
We are sincerely grateful to everyone for their support during this time of uncertainty.
View more of Mako Voelkel's photos of the fire at Tassajara. View a compiled and edited album of Shundo David Haye's photos of fire preparations.
I hope that while you view these amazing pictures and contemplate the current state of Tassajara that you will consider doing whatever you can to support Tassajara and the Zen Center at this time.
Robert Thomas
Here are some photos of some of the people who helped to prepare Tassajara in the days preceding the fire. These include the Fenner Canyon Inmate Strike Teams, Indiana crew and, of course, the residents of Tassajara. Some of Tassajara residents who left in the first wave of resident evacautions are not pictured here. And there are many who directly supported Tassajara, such as fire crews and captains that visited Tassajara, the air support, the fire commanders and all of the people who support and continue to support Tassajara from afar. We are grateful for everyone's efforts. (Click to enlarge any of these images)


text:
Beef and vegetable madras curry
This recipe doesn't have a photo
Help out by adding one. We have some cool tools that make it easy.
Category: Main Course
Beef and vegetable madras curry - TastyPlanner.com
Chef: Hennigfamily
600g rump steak, sliced
1 onion, sliced
2 tablespoons Madras curry paste
400g diced tomatoes
400g carrots, sliced
1 cup water
300g cauliflower, florets separated
150g beans
minted yoghurt
1. Cook rump. Remove.
2. Cook onion until soft.
3. Add curry paste, stir 1 minute.
4. Return beef with tomatoes, water and carrots. Boil, then reduce to simmer for 10 minutes.
5. Add cauliflower, cook 2 minutes.
6. Add beans, cook 2 minutes.
7. Serve with rice, coriander and minted yoghurt.
Similar recipes
Community activity
- Times saved to recipe box: 1
- Times Recommended: 0
- Times added to planner: 0


text:
Browse ShowsBy CategoryFeatured DiscountsPopular Shows
The Daily Scoop
A Life in the Theatre Reviews
Tony®, Emmy® and Golden Globe® nominee Patrick Stewart (X-Men, Star Trek, Macbeth) joins Emmy Award nominee T.R. Knight (Grey's Anatomy, Noises Off) in Pulitzer Prize winner David Mamet's loving and laugh-filled look at the state of the ...
Write a Review Share
Latest Reviews for A Life in the Theatre
There are currently no reviews for this show.
Did you see this? Tell us what you think!
Discount tickets for Broadway shows, attractions, and much more.Get Discount Alerts
© 2002 2015
BroadwayBox.com is a trademark of BroadwayBox, Inc.
BroadwayBox.com is a trademark of BroadwayBox, Inc.
Popular Shows


text:
The Flask-Script extension provides support for writing external scripts in Flask. This includes running a development server, a customised Python shell, scripts to set up your database, cronjobs, and other command-line tasks that belong outside the web application itself.
Flask-Script works in a similar way to Flask itself. You define and add commands that can be called from the command line to a Manager instance:
# manage.py
from flask.ext.script import Manager
from myapp import app
manager = Manager(app)
def hello():
print "hello"
if __name__ == "__main__":
Once you define your script commands, you can then run them on the command line:
python manage.py hello
> hello
Source code and issue tracking at GitHub.
Install with pip and easy_install:
pip install Flask-Script
or download the latest version from version control:
git clone https://github.com/smurfix/flask-script.git
cd flask-script
python setup.py develop
If you are using virtualenv, it is assumed that you are installing Flask-Script in the same virtualenv as your Flask application(s).
The first step is to create a Python module to run your script commands in. You can call it anything you like, for our examples we'll call it manage.py.
You don't have to place all your commands in the same file; for example, in a larger project with lots of commands you might want to split them into a number of files with related commands.
In your manage.py file you have to create a Manager instance. The Manager class keeps track of all the commands and handles how they are called from the command line:
from flask.ext.script import Manager
app = Flask(__name__)
# configure your app
manager = Manager(app)
if __name__ == "__main__":
Calling manager.run() prepares your Manager instance to receive input from the command line.
The Manager requires a single argument, a Flask instance. This may also be a function or other callable that returns a Flask instance instead, if you want to use a factory pattern.
The next step is to create and add your commands. There are three methods for creating commands:
- subclassing the Command class
- using the @command decorator
- using the @option decorator
To take a very simple example, we want to create a hello command that just prints out "hello world". It doesn't take any arguments so is very straightforward:
from flask.ext.script import Command
class Hello(Command):
"prints hello world"
def run(self):
print "hello world"
Now the command needs to be added to our Manager instance, like the one created above:
manager.add_command('hello', Hello())
This of course needs to be called before manager.run. Now in our command line:
python manage.py hello
> hello world
You can also pass the Command instance in a dict to manager.run():
manager.run({'hello' : Hello()})
The Command class must define a run method. The positional and optional arguments depend on the command-line arguments you pass to the Command (see below).
To get a list of available commands and their descriptions, just run with no command:
python manage.py
To get help text for a particular command:
python manage.py runserver -?
This will print usage plus the docstring of the Command.
This first method is probably the most flexible, but it's also the most verbose. For simpler commands you can use the @command decorator, which belongs to the Manager instance:
def hello():
"Just say hello"
print "hello"
Commands created this way are run in exactly the same way as those created with the Command class:
python manage.py hello
> hello
As with the Command class, the docstring you use for the function will appear when you run with the -? or --help option:
python manage.py -?
> Just say hello
Finally, the @option decorator, again belonging to Manager can be used when you want more sophisticated control over your commands:
@manager.option('-n', '--name', help='Your name')
def hello(name):
print "hello", name
The @option decorator is explained in more detail below.
New in version 2.0
Help was previously available with --help and -h. This had a couple of less-than-ideal consequences, among them the inability to use -h as a shortcut for --host or similar options.
New in version 2.0.2
If you want to restore the original meaning of -h, set your manager's help_args attribute to a list of argument strings you want to be considered helpful.
manager = Manager() manager.help_args = ('-h','-?','–help)
You can override this list in sub-commands and -managers:
def talker(host='localhost'):
ccmd = ConnectCmd(talker)
ccmd.help_args = ('-?','--help)
manager.add_command("connect", ccmd)
so that manager -h prints help, while manager connect -h fubar.example.com connects to a remote host.
Most commands take a number of named or positional arguments that you pass in the command line.
Taking the above examples, rather than just print "hello world" we would like to be able to print some arbitrary name, like this:
python manage.py hello --name=Joe
hello Joe
or alternatively:
python manage.py hello -n Joe
To facilitate this you use the option_list attribute of the Command class:
from flask.ext.script import Command, Manager, Option
class Hello(Command):
option_list = (
Option('--name', '-n', dest='name'),
def run(self, name):
print "hello %s" % name
Positional and optional arguments are stored as Option instances - see the API below for details.
Alternatively, you can define a get_options method for your Command class. This is useful if you want to be able to return options at runtime based on for example per-instance attributes:
class Hello(Command):
def __init__(self, default_name='Joe'):
def get_options(self):
return [
Option('-n', '--name', dest='name', default=self.default_name),
def run(self, name):
print "hello", name
If you are using the @command decorator, it's much easier - the options are extracted automatically from your function arguments. This is an example of a positional argument:
def hello(name):
print "hello", name
You then invoke this on the command line like so:
> python manage.py hello Joe
hello Joe
Or you can do optional arguments:
def hello(name="Fred")
print "hello", name
These can be called like so:
> python manage.py hello --name=Joe
hello Joe
> python manage.py hello -n Joe
hello Joe
The short form -n is formed from the first letter of the argument, so "name" > "-n". Therefore it's a good idea for your optional argument variable names to begin with different letters.
New in version 2.0
Note also that if your optional argument is a boolean, for example:
def verify(verified=False):
Checks if verified
print "VERIFIED?", "YES" if verified else "NO"
You can just call it like this:
> python manage.py verify
> python manage.py verify -v
> python manage.py verify --verified
The @command decorator is fine for simple operations, but often you need the flexibility. For more sophisticated options it's better to use the @option decorator:
@manager.option('-n', '--name', dest='name', default='joe')
def hello(name):
print "hello", name
You can add as many options as you want:
@manager.option('-n', '--name', dest='name', default='joe')
@manager.option('-u', '--url', dest='url', default=None)
def hello(name, url):
if url is None:
print "hello", name
print "hello", name, "from", url
This can be called like so:
> python manage.py hello -n Joe -u reddit.com
hello Joe from reddit.com
or alternatively:
> python manage.py hello --name=Joe --url=reddit.com
hello Joe from reddit.com
Options can also be passed to the Manager instance. This is allows you to set up options that are passed to the application rather than a single command. For example, you might want to have a flag to set the configuration file for your application. Suppose you create your application with a factory function:
def create_app(config=None):
app = Flask(__name__)
if config is not None:
# configure your app...
return app
You want to be able to define the config argument on the command line - for example, if you have a command to set up your database, you most certainly want to use different configuration files for production and development.
In order to pass that config argument, use the add_option() method of your Manager instance. It takes the same arguments as Option:
manager.add_option('-c', '--config', dest='config', required=False)
As with any other Flask-Script configuration you can call this anywhere in your script module, but it must be called before your manager.run() call.
Suppose you have this command:
def hello(name):
uppercase = app.config.get('USE_UPPERCASE', False)
if uppercase:
name = name.upper()
print "hello", name
You can now run the following:
> python manage.py -c dev.cfg hello joe
hello JOE
Assuming the USE_UPPERCASE setting is True in your dev.cfg file.
Notice also that the "config" option is not passed to the command. In fact, this usage
> python manage.py hello joe -c dev.cfg
will show an error message because the -c option does not belong to the hello command.
You can attach same-named options to different levels; this allows you to add an option to your app setup code without checking whether it conflicts with a command:
@manager.option('-n', '–name', dest='name', default='joe') @manager.option('-c', '–clue', dest='clue', default='clue') def hello(name,clue):
uppercase = app.config.get('USE_UPPERCASE', False) if uppercase:name = name.upper() clue = clue.upper()
print "hello {0}, get a {1}!".format(name,clue)
> python manage.py -c dev.cfg hello -c cookie -n frank hello FRANK, get a COOKIE!
Note that the destination variables (command arguments, corresponding to dest values) must still be different; this is a limitation of Python's argument parser.
In order for manager options to work you must pass a factory function, rather than a Flask instance, to your Manager constructor. A simple but complete example is available in this gist.
New in version 2.0
Before version 2, options and command names could be interspersed freely. The author decided to discontinue this practice for a number of reasons; the problem with the most impact was that it was not possible to do
> python manage.py connect -d DEST > python manage.py import -d DIR
as these options collided.
Flask-Script comes with a set of helper functions for grabbing user input from the command line. For example:
from flask.ext.script import Manager, prompt_bool
from myapp import app
from myapp.models import db
manager = Manager(app)
def dropdb():
if prompt_bool(
"Are you sure you want to lose all your data"):
It then runs like this:
> python manage.py dropdb
Are you sure you want to lose all your data ? [N]
See the API below for details on the various prompt functions.
Flask-Script has a couple of ready commands you can add and customise: Server and Shell.
The Server command runs the Flask development server.:
from flask.ext.script import Server, Manager
from myapp import create_app
manager = Manager(create_app)
manager.add_command("runserver", Server())
if __name__ == "__main__":
and then run the command:
python manage.py runserver
The Server command has a number of command-line arguments - run python manage.py runserver -? for details on these. You can redefine the defaults in the constructor:
server = Server(host="0.0.0.0", port=9000)
Needless to say the development server is not intended for production use.
New in version 2.0.5
The most common use-case for runserver is to run a debug server for investigating problems. Therefore the default, if it is not set in the configuration file, is to enable debugging and auto-reloading.
Unfortunately, Flask currently (as of May 2014) defaults to set the DEBUG configuration parameter to False. Until this is changed, you can safely add DEFAULT=None to your Flask configuration. Flask-Script's runserver will then turn on debugging, but everything else will treat it as being turned off.
To prevent misunderstandings – after all, debug mode is a serious security hole –, a warning is printed when Flask-Script treats a None default value as if it were set to True. You can turn on debugging explicitly to get rid of this warning.
The Shell command starts a Python shell. You can pass in a make_context argument, which must be a callable returning a dict. By default, this is just a dict returning the your Flask application instance:
from flask.ext.script import Shell, Manager
from myapp import app
from myapp import models
from myapp.models import db
def _make_context():
return dict(app=app, db=db, models=models)
manager = Manager(create_app)
manager.add_command("shell", Shell(make_context=_make_context))
This is handy if you want to include a bunch of defaults in your shell to save typing lots of import statements.
The Shell command will use IPython if it is installed, otherwise it defaults to the standard Python shell. You can disable this behaviour in two ways: by passing the use_ipython argument to the Shell constructor, or passing the flag --no-ipython in the command line:
shell = Shell(use_ipython=False)
There is also a shell decorator which you can use with a context function:
def make_shell_context():
return dict(app=app, db=db, models=models)
This enables a shell command with the defaults enabled:
> python manage.py shell
The default commands shell and runserver are included by default, with the default options for these commands. If you wish to replace them with different commands simply override with add_command() or the decorators. If you pass with_default_commands=False to the Manager constructor these commands will not be loaded:
manager = Manager(app, with_default_commands=False)
A Sub-Manager is an instance of Manager added as a command to another Manager
To create a submanager:
def sub_opts(app, **kwargs):
sub_manager = Manager(sub_opts)
manager = Manager(self.app)
manager.add_command("sub_manager", sub_manager)
If you attach options to the sub_manager, the sub_opts procedure will receive their values. Your application is passed in app for convenience.
If sub_opts returns a value other than None, this value will replace the app value that's passed on. This way, you can implement a sub-manager which replaces the whole app. One use case is to create a separate administrative application for improved security:
def gen_admin(app, **kwargs):
from myweb.admin import MyAdminApp
## easiest but possibly incomplete way to copy your settings
return MyAdminApp(config=app.config, **kwargs)
sub_manager = Manager(gen_admin)
manager = Manager(MyApp)
manager.add_command("admin", sub_manager)
> python manage.py runserver
[ starts your normal server ]
> python manage.py admin runserver
[ starts an administrative server ]
You can cascade sub-managers, i.e. add one sub-manager to another.
A sub-manager does not get default commands added to itself (by default)
New in version 0.5.0.
Extension developers can easily create convenient sub-manager instance within their extensions to make it easy for a user to consume all the available commands of an extension.
Here is an example how a database extension could provide (ex. database.py):
manager = Manager(usage="Perform database operations")
def drop():
"Drops database tables"
if prompt_bool("Are you sure you want to lose all your data"):
def create(default_data=True, sample_data=False):
"Creates database tables from sqlalchemy models"
populate(default_data, sample_data)
def recreate(default_data=True, sample_data=False):
"Recreates database tables (same as issuing 'drop' and then 'create')"
create(default_data, sample_data)
def populate(default_data=False, sample_data=False):
"Populate database with default data"
from fixtures import dbfixture
if default_data:
from fixtures.default_data import all
default_data = dbfixture.data(*all)
if sample_data:
from fixtures.sample_data import all
sample_data = dbfixture.data(*all)
Then the user can register the sub-manager to their primary Manager (within manage.py):
manager = Manager(app)
from flask.ext.database import manager as database_manager
manager.add_command("database", database_manager)
The commands will then be available:
> python manage.py database
Please provide a command:
Perform database operations
create Creates database tables from sqlalchemy models
drop Drops database tables
populate Populate database with default data
recreate Recreates database tables (same as issuing 'drop' and then 'create')
Users do not like to see stack traces, but developers want them for bug reports.
Therefore, flask.ext.script.command provides an InvalidCommand error class which is not supposed to print a stack trace when reported.
In your command handler:
from flask.ext.script.commands import InvalidCommand
[… if some command verification fails …] class MyCommand(Command):
- def run(self, foo=None,bar=None):
- if foo and bar:
- raise InvalidCommand("Options foo and bar are incompatible")
In your main loop:
- try:
- MyManager().run()
- except InvalidCommand as err:
- print(err, file=sys.stderr) sys.exit(1)
This way, you maintain interoperability if some plug-in code supplies Flask-Script hooks you'd like to use, or vice versa.
The Manager runs the command inside a Flask test context. This means that you can access request-local proxies where appropriate, such as current_app, which may be used by extensions.
Controller class for handling a set of commands.
Typical usage:
class Print(Command):
def run(self):
print "hello"
app = Flask(__name__)
manager = Manager(app)
manager.add_command("print", Print())
if __name__ == "__main__":
On command line:
python manage.py print
> hello
Adds command to registry.
Adds a global option. This is useful if you want to set variables applying to the application setup, rather than individual commands.
For this to work, the manager must be initialized with a factory function rather than a Flask instance. Otherwise any options you set will be ignored.
The arguments are then passed to your function, e.g.:
def create_my_app(config=None):
app = Flask(__name__)
if config:
return app
manager = Manager(create_my_app)
manager.add_option("-c", "--config", dest="config", required=False)
def mycommand(app):
and are invoked like this:
> python manage.py -c dev.cfg mycommand
Any manager options passed on the command line will not be passed to the command.
Arguments for this function are the same as for the Option class.
Decorator to add a command function to the registry.
|func – command function.Arguments depend on the options.
Decorator to add an option to a function. Automatically registers the function - do not use together with @command. You can add as many @option calls as you like, for example:
@option('-n', '--name', dest='name')
@option('-u', '--url', dest='url')
def hello(name, url):
print "hello", name, url
Takes the same arguments as the Option constructor.
Prepares manager to receive command line input. Usually run inside "if __name__ == "__main__" block in a Python script.
Decorator that wraps function in shell command. This is equivalent to:
def _make_context(app):
return dict(app=app)
manager.add_command("shell", Shell(make_context=_make_context))
The decorated function should take a single "app" argument, and return a dict.
For more sophisticated usage use the Shell class.
Base class for creating commands.
|func – Initialize this command by introspecting the function.
By default, returns self.option_list. Override if you need to do instance-specific configuration.
Runs a command. This must be implemented by the subclass. Should take arguments as configured by the Command options.
Runs a Python shell inside Flask application context.
Runs the Flask development server i.e. app.run()
Stores positional and optional arguments for ArgumentParser.add_argument.
Stores argument groups and mutually exclusive groups for ArgumentParser.add_argument_group <http://argparse.googlecode.com/svn/trunk/doc/other-methods.html#argument-groups> or ArgumentParser.add_mutually_exclusive_group <http://argparse.googlecode.com/svn/trunk/doc/other-methods.html#add_mutually_exclusive_group>.
Note: The title and description params cannot be used with the exclusive or required params.
Grab user input from command line.
Grabs user input from command line and converts to boolean value.
Grabs hidden (password) input from command line.
Grabs user input from command line from set of provided choices.


text:
3 bed, 2 full bath, 1 half bath. Excellent Location : Townhouse. 3 Bedrooms & 2. 5 Bathrooms ,With Tile and First Floor, Wood UpstaiMore info
1 bed, 1 full bath, 1 half bath. Spacious 1bd/1. 5ba unit in desirable Three Horizons. Packed with lots of potential. Plenty of spacMore info
3 bed, 3 full bath. Trump Tower III, the best of Trump, in a very desirable area of Sunny Isles, close to every importaMore info
2 bed, 2 full bath. Boaters paradise! Miami River town house, spacious unit updated open kitchen. NO FIXED bridges to bMore info
2 bed, 2 full bath. GREAT UNIT IN SNUG HARBOR. UNIT COMES WITH 16 FT BOAT SLIP.More info
2 bed, 2 full bath. Spacious 2 beds, 2 baths and approximately 1,251 square feet Condo apartment. Water views, wood andMore info
1 bed, 1 full bath. SPACIOUS 1BED/1BATH CONDO UNIT WITH WATERVIEW. LOCATION!LOCATION! LOCATION! IT'S LOCATED NEXT TO THMore info
2 bed, 2 full bath. Spacious and Bright 2 bedroom 2 bathroom Condo Townhouse in gated community of Snapper Village withMore info
1 bed, 1 full bath, 1 half bath. beautiful 1 BEDROOM AND 1 BATH 1. 2 IN THE HEART OF BAY HARBOR, SMALL BUILDING WELL maintained. LOWMore info
2 bed, 2 full bath, 1 half bath. 2 STORY TOWNHOUSE IN EXCELLENT CONDITION. UPDATED. READY TO MOVE-IN. CALL LISTING AGENT FOR SHOWINGMore info


text:
Langen Neubacher and Her Band, the Defeated County, Release Debut EP
The Defeated County's Indiegogo campaign video
The Defeated County EP Release
w/ Cassie Morgan and the Lonely Pine, Fire Dog, Ellen the Felon, Les Gruff and the Billy Goat. Saturday, July 13. Off Broadway. 3509 Lemp Avenue. 314-773-3363. $10.
Follow the Defeated County via Facebook and Twitter.
Do you know a project or band that should be considered for this series? Drop a line to firstname.lastname@example.com.
Previously from our Fill in the Blank series:
- Lizzie Weber
- Kenshiro's
- Superfun Yeah Yeah Rocketship
- Humdrum
- The Blind Eyes
Follow RFT Music on Twitter or Facebook. Follow RFT Music editor Daniel Hill on Twitter too, if you are into that sort of thing.
Sponsor Content