Method, device, and apparatus for error detection and correction in wireless communications

Systems and methods for communicating in a wireless communication system are described. Various processes for detecting and correcting communication errors described. In aspect a method in a wireless communication system is provided. The method includes transmitting a first packet from a sending device to a receiving device. The method further includes listening for an acknowledgement during a first time period. The method further includes transmitting a second packet to the receiving device after a second time period, when an acknowledgement is not received during the first time period. The second packet includes one or more error-correction codes operable to recover the first packet.

TECHNICAL FIELD

The present application relates generally to wireless communication systems and more specifically to a method, device, and apparatus for error detection and correction in wireless communications.

BACKGROUND

Wireless networks are often preferred when network elements are mobile and thus have dynamic connectivity needs, or when the network architecture is formed in an ad hoc, rather than fixed, topology. A mobile network element such as a wireless station (STA) and an access point (AP) can exchange messages in noisy or lossy wireless conditions. Under certain conditions, received messages can contain errors. Accordingly, there is a need for error detection and correction in a wireless communication network.

SUMMARY

The systems, methods, and devices of the invention each have several aspects, no single one of which is solely responsible for its desirable attributes. Without limiting the scope of this invention as expressed by the claims which follow, some features will now be discussed briefly. After considering this discussion, and particularly after reading the section entitled “Detailed Description” one will understand how the features of this invention provide advantages that include error detection and correction in wireless communication systems for access points and devices.

One aspect of the subject matter described in the disclosure provides a method of communicating in a wireless system. The method includes transmitting a first packet from a sending device to a receiving device. The method further includes listening for an acknowledgement during a first time period. The method further includes transmitting a second packet to the receiving device after a second time period, when an acknowledgement is not received during the first time period. The second packet includes one or more error-correction codes operable to recover the first packet.

Another aspect of the subject matter described in the disclosure provides a method of communicating in a wireless system. The method includes receiving a first packet from a sending device at a receiving device. The method further includes storing at least a portion of the first packet if the first packet includes an error. The method further includes receiving a second packet at the end of a predetermined time period. The second packet includes one or more error-correction codes operable to recover the first packet. The method further includes matching the second packet to the first packet based on the time of receiving the second packet. The method further includes applying the error-correction codes to the first packet.

Another aspect of the subject matter described in the disclosure provides a method of communicating in a wireless system. The method includes receiving a first packet from a sending device at a receiving device. The method further includes storing at least a portion of the first packet if the first packet includes an error. The method further includes receiving a second packet including one or more error-correction codes operable to recover the first packet. The method further includes matching the second packet to the first packet based on one or more of a destination address and a sequence number of the first and second packets. The method further includes applying the error-correction codes to the first packet.

Another aspect of the subject matter described in the disclosure provides a device configured to communicate in a wireless system. The device includes a transmitter configured to transmit a first packet from to a receiving device. The device further includes a receiver configured to listen for an acknowledgement during a first time period. The device further includes wherein the transmitter is further configured to transmit a second packet to the receiving device after a second time period, when an acknowledgement is not received during the first time period. The second packet includes one or more error-correction codes operable to recover the first packet.

Another aspect of the subject matter described in the disclosure provides a device configured to communicate in a wireless system. The device includes a receiver configured to receive a first packet from a sending device. The device further includes a memory configured to store at least a portion of the first packet if the first packet includes an error. The device further includes wherein the receiver is further configured to receive a second packet at the end of a predetermined time period. The second packet includes one or more error-correction codes operable to recover the first packet. The device further includes wherein the device further includes one or more processors configured to match the second packet to the first packet based on the time of receiving the second packet. The processor is further configured to apply the error-correction codes to the first packet.

Another aspect of the subject matter described in the disclosure provides a device configured to communicate in a wireless system. The device includes a receiver configured to receive a first packet from a sending device. The device further includes a memory configured to store at least a portion of the first packet if the first packet includes an error. The receiver is further configured to receive a second packet including one or more error-correction codes operable to recover the first packet. The device further includes one or more processors configured to match the second packet to the first packet based on one or more of a destination address and a sequence number of the first and second packets. The processor is further configured to apply the error-correction codes to the first packet.

Another aspect of the subject matter described in the disclosure provides an apparatus for communicating in a wireless system. The apparatus includes means for transmitting a first packet from a sending device to a receiving device. The apparatus further includes means for listening for an acknowledgement during a first time period. The apparatus further includes means for transmitting a second packet to the receiving device after a second time period, when an acknowledgement is not received during the first time period. The second packet includes one or more error-correction codes operable to recover the first packet.

Another aspect of the subject matter described in the disclosure provides an apparatus for communicating in a wireless system. The apparatus includes means for receiving a first packet from a sending device at a receiving device. The apparatus further includes means for storing at least a portion of the first packet if the first packet includes an error. The apparatus further includes means for receiving a second packet at the end of a predetermined time period. The second packet includes one or more error-correction codes operable to recover the first packet. The apparatus further includes means for matching the second packet to the first packet based on the time of receiving the second packet. The apparatus further includes means for applying the error-correction codes to the first packet.

Another aspect of the subject matter described in the disclosure provides an apparatus for communicating in a wireless system. The apparatus includes means for receiving a first packet from a sending device at a receiving device. The apparatus further includes means for storing at least a portion of the first packet if the first packet includes an error. The apparatus further includes means for receiving a second packet including one or more error-correction codes operable to recover the first packet. The apparatus further includes means for matching the second packet to the first packet based on one or more of a destination address and a sequence number of the first and second packets. The apparatus further includes means for applying the error-correction codes to the first packet.

Another aspect of the subject matter described in the disclosure provides a non-transitory computer-readable medium including code that, when executed, causes an apparatus to transmit a first packet from a sending device to a receiving device. The medium further includes code that, when executed, causes the apparatus to listen for an acknowledgement during a first time period. The medium further includes code that, when executed, causes the apparatus to transmit a second packet to the receiving device after a second time period, when an acknowledgement is not received during the first time period. The second packet includes one or more error-correction codes operable to recover the first packet.

Another aspect of the subject matter described in the disclosure provides a non-transitory computer-readable medium including code that, when executed, causes an apparatus to receive a first packet from a sending device at a receiving device. The medium further includes code that, when executed, causes the apparatus to store at least a portion of the first packet if the first packet includes an error. The medium further includes code that, when executed, causes the apparatus to receive a second packet at the end of a predetermined time period, the second packet including one or more error-correction codes operable to recover the first packet. The medium further includes code that, when executed, causes the apparatus to match the second packet to the first packet based on the time of receiving the second packet. The medium further includes code that, when executed, causes the apparatus to apply the error-correction codes to the first packet.

Another aspect of the subject matter described in the disclosure provides a non-transitory computer-readable medium including code that, when executed, causes an apparatus to receive a first packet from a sending device at a receiving device. The medium further includes code that, when executed, causes the apparatus to store at least a portion of the first packet if the first packet includes an error. The medium further includes code that, when executed, causes the apparatus to receive a second packet including one or more error-correction codes operable to recover the first packet. The medium further includes code that, when executed, causes the apparatus to means for matching the second packet to the first packet based on one or more of a destination address and a sequence number of the first and second packets. The medium further includes code that, when executed, causes the apparatus to apply the error-correction codes to the first packet.

Another aspect of the subject matter includes an implementation in which a polled protocol can be implemented where NACK messages are sent in response to a separate polling frame that includes a unique identifier (e.g., the MAC address of the intended recipient, etc.). In one implementation, if a receiver station receives a packet from a transmitter station and the receiver station finds errors in MPDU decoding, the receiver station may save the packet and wait. If the transmitter station does not receive an ACK, it may send a polling frame that includes, for example, the MAC address of the intended recipient of the previous packet. If the polling frame is received without errors and the decoded MAC address matches the MAC address of the receiver station that stored the incorrectly decoded packet, the receiver station can send a NACK to the transmitter station in response to the polling frame, informing the transmitter station that the incorrectly decoded packet is stored and it is ready to receive a parity packet for combining with the stored packet. If the polling frame includes a different MAC address, the receiver station that stored the frame can discard it. Furthermore, if the stored packet is actually intended for a different receiver station that decoded the packet without errors, this receiver station will send an ACK back to the transmitter station, no polling frame will be sent, and the receiver station that stored the incorrectly decoded packet may discard the packet after a defined period in which no polling frame addressed to it is received.

DETAILED DESCRIPTION

FIG. 1shows an exemplary wireless communication system100in which aspects of the present disclosure can be employed. The wireless communication system100includes an access point (AP)104, which communicates with a plurality of stations (STAs)106a-106din a basic service area (BSA)107. In various embodiments described herein, the AP104and/or the STAs106a-106dcan be configured to detect and correct communication errors.

In some embodiments, the AP104and STAs can implement an automatic repeat request (ARQ) error-control procedure for data transmission. ARQ can use acknowledgements (ACKs) and timeouts to facilitate reliable data transmission. An ACK can include a message sent by a receiver indicating that it has correctly received a data frame or packet. A timeout can include a period of time allowed to elapse before a message is retransmitted. In other words, if a sender does not receive an ACK before the timeout, it can re-transmit the packet until the sender receives an ACK or exceeds a threshold number of re-transmissions. In some embodiments, the receiver discards packets that are not successfully decoded.

In some embodiments, the AP104and STAs can implement a hybrid ARQ (HARQ) error-control procedure for data transmission. HARQ can further implement error-correction codes to facilitate reliable data transmission. In various embodiments, as used herein, error-correction codes can encompass any error-correction codes including, but not limited to, parity information, forward error-correction (FEC) codes, fountain codes, raptor codes, etc.

In some embodiments, the sender can transmit additional packets including additional error-correction codes, when an ACK is not received. The receiver can store packets that are unsuccessfully decoded for later combination with additional packets including additional error-correction codes. Accordingly, the receiver can recover unsuccessfully decoded packets by matching the packets with the additional error-correction codes.

In various embodiments, the wireless communication system100can include a wireless local area network (WLAN). The WLAN can be used to interconnect nearby devices, employing one or more networking protocols. The various aspects described herein can apply to any communication standard, such as the Institute of Electrical and Electronic Engineers (IEEE) 802.11 wireless protocols. For example, the various aspects described herein can be used as part of the IEEE 802.11a, 802.11b, 802.11g, 802.11n, and/or 802.11ah protocols. Implementations of the 802.11 protocols can be used for sensors, home automation, personal healthcare networks, surveillance networks, metering, smart grid networks, intra- and inter-vehicle communication, emergency coordination networks, cellular (e.g., 3G/4G) network offload, short- and/or long-range Internet access, machine-to-machine (M2M) communications, etc.

The AP104can serve as a hub or base station for the wireless communication system100. For example, the AP104can provide wireless communication coverage in the BSA107. The AP104can include, be implemented as, or known as a NodeB, Radio Network Controller (RNC), eNodeB, Base Station Controller (BSC), Base Transceiver Station (BTS), Base Station (“BS”), Transceiver Function (TF), Radio Router, Radio Transceiver, or some other terminology.

The STAs106a-106d(collectively referred to herein as STAs106) can include a variety of devices such as, for example, laptop computers, personal digital assistants (PDAs), mobile phones, etc. The STAs106can connect to, or associate with, the AP104via a WiFi (e.g., IEEE 802.11 protocol such as 802.11ah) compliant wireless link to obtain general connectivity to the Internet or to other wide area networks.

In various embodiments, the STAs106can include, be implemented as, or be known as access terminals (ATs), subscriber stations, subscriber units, mobile stations, remote stations, remote terminals, user terminals (UTs), terminals, user agents, user devices, user equipment (UEs), or some other terminology. In some implementations, a STA106can include a cellular telephone, a cordless telephone, a Session Initiation Protocol (SIP) phone, a wireless local loop (WLL) station, a personal digital assistant (PDA), a handheld device having wireless connection capability, or some other suitable processing device connected to a wireless modem. Accordingly, one or more aspects taught herein can be incorporated into a phone (e.g., a cellular phone or smartphone), a computer (e.g., a laptop), a portable communication device, a headset, a portable computing device (e.g., a personal data assistant), an entertainment device (e.g., a music or video device, or a satellite radio), a gaming device or system, a global positioning system device, or any other suitable device that is configured to communicate via a wireless medium.

The AP104, along with the STAs106a-106dassociated with the AP104, and that are configured to use the AP104for communication, can be referred to as a basic service set (BSS). In some embodiments, the wireless communication system100may not have a central AP104. For example, in some embodiments, the wireless communication system100can function as a peer-to-peer network between the STAs106. Accordingly, the functions of the AP104described herein can alternatively be performed by one or more of the STAs106. Moreover the AP104can implement one or more aspects described with respect to the STAs106, in some embodiments.

A communication link that facilitates transmission from the AP104to one or more of the STAs106can be referred to as a downlink (DL)130, and a communication link that facilitates transmission from one or more of the STAs106to the AP104can be referred to as an uplink (UL)140. Alternatively, a downlink130can be referred to as a forward link or a forward channel, and an uplink140can be referred to as a reverse link or a reverse channel.

A variety of processes and methods can be used for transmissions in the wireless communication system100between the AP104and the STAs106. In some aspects, wireless signals can be transmitted using orthogonal frequency-division multiplexing (OFDM), direct-sequence spread spectrum (DSSS) communications, a combination of OFDM and DSSS communications, or other schemes. For example, signals can be sent and received between the AP104and the STAs106in accordance with OFDM/OFDMA processes. Accordingly, the wireless communication system100can be referred to as an OFDM/OFDMA system. As another example, signals can be sent and received between the AP104and the STAs106in accordance with CDMA processes. Accordingly, the wireless communication system100can be referred to as a CDMA system.

Aspects of certain devices (such as the AP104and the STAs106) implementing such protocols can consume less power than devices implementing other wireless protocols. The devices can be used to transmit wireless signals across a relatively long range, for example about one kilometer or longer. As described in greater detail herein, in some embodiments, devices can be configured to establish wireless links faster than devices implementing other wireless protocols.

Timing Based Matching

FIG. 2shows an exemplary communication exchange200in the wireless communication system100ofFIG. 1. Signaling is shown, according to various embodiments, between a sending station (TX STA)205and a receiving device (RX STA)210. In various embodiments, the TX STA205shown inFIG. 2can include any of the AP104and/or the STAs106a-106d, described above with respect toFIG. 1. Likewise, the RX STA210shown inFIG. 2can include any of the AP104and/or the STAs106a-106d, described above with respect toFIG. 1.

As shown inFIG. 2, the TX STA205and the RX STA210can separately implement aspects of an error-control method. The illustrated method can facilitate reliable data transmission between the TX STA205and the RX STA210using timing information to match packets for error-correction. The method can be implemented in whole or in part by the devices described herein, such as the wireless device702shown inFIG. 7. Although the illustrated method is described herein with reference to a particular order, in various embodiments, blocks herein may be performed in a different order, or omitted, and additional blocks may be added.

First, at block215, the TX STA205transmits a packet220to the RX STA210. In various embodiments, the packet220can include one or more of a physical layer data unit (PPDU), a physical layer service data unit (PSDU), a media access control (MAC) protocol data unit (MPDU), and a MAC service data unit (MSDU). The packet220can include an error detection code, such as a frame check sequence (FCS) or a cyclic redundancy check (CRC). In some embodiments, the packet220can include one or more parity bits, and/or error-correction codes such as, for example, Reed-Solomon codes. In some embodiments the error correction can constitutes of a copy of the packet (repetition coding). In various embodiments, the error-correction codes can be applied to one or more of the PPDU, PSDU, MPDU, and MSDU.

The packet220can include an explicit indication that the packet is protected by error-correction codes. For example, the packet220can include the indication in one or more SIG fields, in a robust portion of a MAC header, etc. In some embodiments, error-correction can be implicit. For example, the RX STA210can assume that all packets at a given modulation and coding scheme (MCS), such as the lowest, are protected with error-correction codes, that all packets are eligible for error-correction, etc. In various embodiments, the RX STA210can exchange management information with the TX STA205, which can indicate that all or certain packets are eligible for error correction.

Next, at block225, the RX STA210receives the packet220. The RX STA210can detect the packet based on a training sequence, such as a short training field (STF). In some embodiments, the packet210can include a signal (SIG) field. In some embodiments, the packet220can include an FCS field.

Then, at block230, the RX STA210determines whether the packet220was successfully decoded. For example, when receiving the packet220, the RX STA210may encounter an error at the SIG field of the packet220. In some circumstances, the TX STA205may encounter an error when verifying the correctness of the received packet220based on the FCS field. If the RX STA210decodes the packet220without error, it can transmit an ACK235to the TX STA205at block240. On the other hand, if the RX STA210encounters an error decoding the packet220, it can store the packet220at block245.

Meanwhile, at block247, the TX STA205can wait for the ACK235from the RX STA210. The TX STA205can be configured to wait for a first amount of time. For example, in the illustrated embodiment, the TX STA205waits for the duration of a short interframe space (SIFS). The RX STA210can be expected to transmit the ACK235at the end of the SIFS upon successful receipt of the packet220.

Subsequently, at block250, after the duration of the SIFS has ended, the TX STA205determines whether it has received the ACK235. If the TX STA205has received the ACK235, then the TX STA205can determine that the packet220was successfully received at block255. On the other hand, if the TX STA205has not received the ACK235, then the TX STA205can wait for a second amount of time at block260. For example, in the illustrated embodiment, the TX STA205waits for the duration of a point coordination function (PCF) interframe space (PIFS). In an embodiment, the second amount of time can be larger than the first amount of time.

Meanwhile, at block245, after encountering an error decoding the packet220, the RX STA210stores the packet220. In an embodiment, when the RX STA210encounters an error at a signal (SIG) field of the packet220, or when comparing the received packet220to an FCS field, the RX STA210can store the entire PPDU of the packet220for later combination with additional error-correction codes. In some embodiments, the TX STA205can store the packet220without the STF. In another embodiment, when the RX STA210encounters an error when comparing the received packet220to an FCS field, the RX STA210can store the entire PSDU or the MPDU of the packet220for later combination with additional error-correction codes.

Thereafter, at block265the RX STA210can wait for the second amount of time. As discussed above, the RX STA210can wait for the duration of a PIFS. In various embodiments, the first and second amounts of time can be predetermined, preprogrammed, dynamically determined, coordinated, and/or communicated between the TX STA205and the RX STA210.

After the duration of the PIFS, the TX STA205can transmit a new packet270at block275, which the RX STA210can receive at block280. The new packet270can be a retransmission of the data in the packet220. The new packet270can include one or more parity bits, and/or error-correction codes such as, for example, forward error-correction (FEC) Reed-Solomon codes. In various embodiments, the error-correction codes can be applied to one or more of the PPDU, PSDU, MPDU, and MSDU. In various embodiments, the new packet270can include additional parity information and/or error-correction codes, which can be cumulative to the packet220.

The new packet270can include an explicit indication that the packet is protected by error-correction codes. For example, the new packet270can include the indication in one or more SIG fields, in a robust portion of a MAC header, etc. In some embodiments, error-correction can be implicit. For example, the RX STA210can assume that all packets at a given modulation and coding scheme (MCS), such as the lowest, are protected with error-correction codes, that all packets are eligible for error-correction, etc. In various embodiments, the RX STA210can exchange management information with the TX STA205that may indicate that all or certain packets are eligible for error correction.

Next, at block285, the RX STA210attempts to combine the new packet270with the stored packet220, possibly in conjunction with one or more previously stored packets. The RX STA210can identify the new packet270as an error-correction packet for the packet220based on the timing by which it was received. For example, the RX STA210can match the new packet270to the packet220because it was received the second amount of time (e.g., one PIFS) after receiving the packet220. Additional previously received packets can be matched in the same manner.

Then, at block230, the RX STA210determines whether the packets220and270were successfully combined. Meanwhile, the TX STA205again waits for the duration of the SIFS at block245. If the packets220and270were successfully combined, the RX STA210sends the ACK235at240. If not, the process continues as described above. In some embodiments, the TX STA205can stop retransmission after reaching a maximum number of allowed retransmissions.

In some embodiments, the TX STA205may skip blocks247and250and may transmit the new packet270without waiting for the ACK235. For example, the TX STA205can transmit the new packet270at the end of a SIFS time after transmitting the packet220. In some embodiments, the TX STA205may not expect an ACK in response to certain types of packets220. In some embodiments, the ACK235can be repeated twice.

Data Based Matching

FIG. 3shows another exemplary communication exchange300in the wireless communication system100ofFIG. 1. Signaling is shown, according to various embodiments, between a TX STA305and an RX STA310. In various embodiments, the TX STA305shown inFIG. 3can include any of the AP104and/or the STAs106a-106d, described above with respect toFIG. 1. Likewise, the RX STA310shown inFIG. 3can include any of the AP104and/or the STAs106a-106d, described above with respect toFIG. 1.

As shown inFIG. 3, the TX STA305and the RX STA310can separately implement aspects of an error-control method. The illustrated method can facilitate reliable data transmission between the TX STA305and the RX STA310using packet data to match packets for error-correction. The method can be implemented in whole or in part by the devices described herein, such as the wireless device702shown inFIG. 7. Although the illustrated method is described herein with reference to a particular order, in various embodiments, blocks herein may be performed in a different order, or omitted, and additional blocks may be added.

First, at block315, the TX STA305transmits a packet320to the RX STA310. In various embodiments, the packet320can include one or more of a PPDU, PSDU, MPDU, and MSDU. The packet320can include an error detection code, such as a frame check sequence (FCS) or a cyclic redundancy check (CRC). In some embodiments, the packet320can include one or more parity bits, and/or error-correction codes such as, for example, forward error-correction (FEC) Reed-Solomon codes. The parity bits can be referred to the coded PPSU, PSDU, or to each coded MPDU or MSDU.

The packet320can include an explicit indication that the packet is protected by error-correction codes. For example, the packet320can include the indication in one or more SIG fields, in a robust portion of a MAC header, etc. In some embodiments, error-correction can be implicit. For example, the RX STA310can assume that all packets at a given modulation and coding scheme (MCS), such as the lowest, are protected with error-correction codes, that all packets are eligible for error-correction, etc. In various embodiments, the RX STA310can exchange management information with the TX STA305, which can indicate that all or certain packets are eligible for error correction.

The packet320can further include a robust destination indication. For example, the packet320can include a low-rate MAC header including a destination address. The low-rate MAC header can include an independent error detection and/or correction code. As another example, the packet320can include a physical layer (PHY) preamble including the destination address. In some embodiments, the retransmission of error-correction information may be applied to aggregated MPDUs (A-MPDUs) where at least one MPDU has been correctly decoded, so that the address was correctly received. In various embodiments, all MPDUs in an A-MPDU can have same destination address, so the RX STA310can obtain the address by decoding a single MPDU.

The packet320can further include a robust sequence indication. The packet320can further include an indication that it is a data packet, as opposed to an error-correction packet or other retransmission. For example, parity packets can be indicated in the PHY preamble or using a retry bit in the MAC header. In an embodiment the packet320can omit the parity indication.

Next, at block325, the RX STA310receives the packet320. The RX STA310can detect the packet based on a training sequence, such as a short training field (STF). In some embodiments, the packet310can include a signal (SIG) field. In some embodiments, the packet320can include an FCS field.

Then, at block330, the RX STA310determines whether the packet320was successfully decoded. For example, when receiving the packet320, the RX STA310may encounter an error at the SIG field of the packet320. In some circumstances, the TX STA310may encounter an error when verifying the FCS field. If the RX STA310decodes the packet320without error, it can transmit an ACK335to the TX STA305at block340. On the other hand, if the RX STA310encounters an error decoding the packet320, it can check the destination of the packet320at block345.

Meanwhile, at block347, the TX STA305can wait for the ACK335from the RX STA310. The TX STA305can be configured to wait for a first amount of time. For example, in the illustrated embodiment, the TX STA305waits for the duration of a short interframe space (SIFS). The RX STA305can be expected to transmit the ACK335at the end of the SIFS upon successful receipt of the packet320. In some embodiments, the first amount of time can be the PIFS, or any other timing greater than the PIFS. Because the packet320includes robust addressing, the first amount of time can be dynamic, and need not be preset or prearranged.

Subsequently, at block350, after the duration of the SIFS has ended the TX STA305determines whether it has received the ACK335. If the TX STA305has received the ACK335, then the TX STA305can determine that the packet320was successfully received at block355. On the other hand, if the TX STA305has not received the ACK335, then the TX STA305can transmit a new packet370at block375.

Meanwhile, at block345, after encountering an error decoding the packet320, the RX STA310determines whether the packet320is addressed to the RX STA310. In the illustrated embodiment, the STA310checks the destination of the packet320(such as the robust destination indication in the MAC header or PHY, as discussed above) against the association ID (AID) of the RX STA310. In some embodiments, a partial AID at the PHY layer can be used. If the AID or partial AID does not match, the RX STA310can discard the packet320at block360. On the other hand, if the AID or partial AID matches, the RX STA310can store the packet320at block365.

Next, at block365, the RX STA310stores the new packet370. In an embodiment, when the RX STA310encountered an error at a signal (SIG) field of the new packet370, or when comparing the received new packet370to an FCS field, the RX STA310can store the entire PPDU of the new packet370for later combination with additional error-correction codes. In some embodiments, the TX STA310can store the new packet370without the STF. In another embodiment, when the RX STA310encountered an error when comparing the received new packet370to an FCS field, the RX STA310can store the entire PSDU of the new packet370for later combination with additional error-correction codes.

Then, the RX STA310can receive the new packet370at block380. In an embodiment, the RX STA310may not be able to predict when the TX STA305will transmit the new packet370. The new packet370can be a retransmission of the data in the new packet370. In various embodiments, the new packet370can include one or more of a PPDU, PSDU, MPDU, and MSDU. The new packet370can include an error detection code, such as a frame check sequence (FCS) or a cyclic redundancy check (CRC). In some embodiments, the new packet370can include one or more parity bits, and/or error-correction codes such as, for example, forward error-correction (FEC) Reed-Solomon codes. In various embodiments, the new packet370can include additional parity information and/or error-correction codes, which can be cumulative to the new packet370. The parity bits can be referred to the coded PPSU, PSDU, or to each coded MPDU or MSDU.

The new packet370can include an explicit indication that the packet is protected by error-correction codes. For example, the new packet370can include the indication in one or more SIG fields, in a robust portion of a MAC header, etc. In some embodiments, error-correction can be implicit. For example, the RX STA210can assume that all packets at a given modulation and coding scheme (MCS), such as the lowest, are protected with error-correction codes, that all packets are eligible for error-correction, etc. In various embodiments, the RX STA210can exchange management information with the TX STA205, which can indicate that all or certain packets are eligible for error correction.

The new packet370can further include a robust destination indication. For example, the new packet370can include a low-rate MAC header including a destination address. The low-rate MAC header can include an independent error detection and/or correction code. As another example, the new packet370can include a physical layer (PHY) preamble including the destination address. In some embodiments, the retransmission of error-correction information may be applied to aggregated MPDUs (A-MPDUs) where at least one MPDU has been acknowledged.

The new packet370can further include a robust sequence indication. The new packet370can further include an indication that it is an error-correction or retransmission packet, as opposed to a data packet. For example, error-correction packets can be indicated in the PHY preamble or using a retry bit in the MA header.

Thereafter, at block382, the RX STA310determines whether the new packet370is addressed to the RX STA310. In the illustrated embodiment, the STA310checks the destination of the new packet370(such as the robust destination indication in the MAC header or PHY, as discussed above) against the association ID (AID) of the RX STA310. In some embodiments, a partial AID at the PHY layer can be used.

The RX STA310can also compare a sequence number of the packet370to determine if it matches the packet220. For example, the new packet370can include a PSDU sequence number, sent in PHY or a robust MAC header as described above. If the AID, partial AID, or the sequence number does not match, the RX STA310can discard the new packet370and continue waiting for a new packet at block380. On the other hand, if the AID or partial AID and sequence number matches, the RX STA310can combine the new packet370with the stored packet320at block385. In various embodiments, the same mechanism can apply to PSDUs, MPDUs, and/or MSDUs, which may have an address and/or a sequence number.

Subsequently, at block385, the RX STA310attempts to combine the new packet370with the stored packet320, possibly in conjunction with one or more previously stored packets. The RX STA310can identify the new packet370as an error-correction packet for the packet320based on the data in the packet. For example, the RX STA310can match the new packet370to the packet320because it was addressed to the same AID and contained the same (or a related) sequence number. Additional previously received packets can be matched in the same manner.

Then, at block330, the RX STA310determines whether the packets320and370were successfully combined. Meanwhile, the TX STA310again waits for the duration of the SIFS at block345. If the packets320and370were successfully combined, the RX STA310sends an ACK at340. If not, the process continues as described above. In some embodiments, the TX STA310can stop retransmission after reaching a maximum number of allowed retransmissions.

MPDU Retransmission as Parity

As discussed above with respect toFIGS. 2-3, in various embodiments, the packets230,270,320, and/or370can include MPDUs, which can be transmitted as A-MPDUs. For example, the communication of MPDUs can involve substantial protocol processing overhead due to the RX STA210and/or310transmitting an ACK for each MPDU received. To reduce the overhead of handling many ACK transmissions, a number of MPDUs can be transmitted in back-to-back fashion as a single A-MPDU. Rather than the RX STA210and/or310acknowledging each MPDU separately, the receiver of the A-MPDU can transmit a single block ACK (BA) per A-MPDU.

FIG. 4is a diagram of an example of a data unit400that can be used in the wireless communication system100ofFIG. 1. In various embodiments, the A-MPDU400can include one or more of the packets220,270,320, and370described above with respect toFIGS. 2-3. After the physical layer header410, several MPDUs follow. MPDU1 is the first MPDU, MPDU2 is the second MPDU, and so forth. Each MPDU is preceded by a delimiter. The MPDU itself, as indicated by the exploded view of MPDU1, is preceded by a delimiter420, and includes a MAC header430, the MAC data or payload440, and a MAC FCS (Frame Check Sequence)450. The MAC FCS can be a 32-bit Cyclic Redundancy Check (CRC) code. Padding bits (not shown) can be added after the MAC FCS such that each MPDU is a multiple of four bytes in length.

Referring back toFIGS. 2-3, when a transmission fails, the TX STA205and/or305can retransmit the failed MPDU. In embodiments where MPDUs are transmitted in A-MPDUs, the TX STA205and/or305can include duplicated MPDUs in the same A-MPDU. Accordingly, for the RX STA210and/or310to store the received MPDUs (e.g., at blocks245and/or365), the MPDU can be delimited with robust delimiters, using techniques similar to the robust addressing and robust sequencing described above. In an embodiment, aggregated PPDUs (A-PPDUs) can be used. In various embodiments, A-PPDUs can include one or more of an STF, a long training field (LTF), a SIG field, and a plurality of PSDUs. In some embodiments, each PSDU can include a separate STF and/or LTF.

Similarly, the MPDUs can include robust addressing, as described above. In an embodiment, the TX STA205and/or305can target A-MPDUs where at least one MPDU was acknowledged. Moreover, the MPDUs can include robust sequencing, as described above. In an embodiment, the TX STA205and/or305can include preventative retransmissions in the same A-MPDU.

HARQ with Raptor Codes

As discussed above with respect toFIGS. 2-3, in various embodiments, the packets230,270,320, and/or370can include MPDUs, which can be transmitted as A-MPDUs. In some embodiments, the MPDUs can be encoded using fountain codes such as, for example, raptor codes. Raptor codes are described in U.S. Pat. No. 7,068,729, entitled “Multi-Stage Code Generator And Decoder For Communication Systems”, by Amin Shokrollahi, et al., Jun. 27, 2006 (the entire content of which is incorporated by reference herein).

FIG. 5is a diagram of a data unit500that includes error-correction coding information that can be used in the wireless communication system100ofFIG. 1. In various embodiments, the PPDU500can include one or more of the packets220,270,320, and370described above with respect toFIGS. 2-3. As illustrated, the PPDU500includes an A-MPDU502. The PPDU500includes a PHY header501and the physical layer payload502. The payload502in this case is the A-MPDU502. The A-MPDU502includes a legacy section503and a section referred to here as a parity section504. The parity section504can also be referred to as an error-correction section. The legacy section503includes a set of MPDUs, each preceded by its own delimiter as illustrated. MPDU1530is the first MPDU; MPDU2531is the second MPDU; MPDU532is the third MPDU, and so forth. Each delimiter includes a predetermined combination of bits as a signature that can be used by the receiver to determine the beginning of each MPDU within the A-MPDU502. The payloads of the MPDUs carry the data payload of the MAC layer communication. Each MPDU, as indicated by the exploded view of the MPDU1530, includes a MAC header505, the MAC data or payload506, and a MAC FCS507. Each MPDU is preceded by its own delimiter, as illustrated. The delimiter508is the delimiter that precedes MPDU1. The MAC FCS can include a 32-bit CRC code. Padding bits (not shown) can be added after the MAC FCS such that each MPDU is a multiple of four bytes in length. In an embodiment, the legacy portion503of the A-MPDU502can adhere to a standard and conventional form. The parity section504can include one or more error-correction blocks (EC-Blocks). In one example, the EC-Blocks are MPDUs that include MAC headers, MAC data or payloads, and MAC FCS portions. In another example, the EC-B locks have no headers.

In the example ofFIG. 5, the EC-Blocks of the parity section504are MPDUs. As indicated in the exploded view of EC-Block1533, each EC-Block is preceded by a delimiter, and includes a MAC header, MAC data or payload, and MAC FCS. The delimiter509is the delimiter for EC-Block1533. The EC-Block1533includes the MAC header510, the MAC data or payload511, and the MAC FCS512. The MAC data or payload, in the case of an EC-Block, includes error-correction coding information (EC INFO) usable to correct MPDUs of the legacy section if one or more MPDUs of the legacy section may become corrupted or lost.

Although, in the example shown inFIG. 5, the EC-Blocks are transmitted at the end of the A-MPDU502, EC-Blocks may also be transmitted at the beginning of the A-MPDU502, or between two MPDUs that contain data in the legacy section.

A property of fountain codes is that the information contained in N MPDUs can be derived from any of N encoded MPDUs out of N+K encoded MPDUs, so in principle the receiver need not be able to distinguish between data and EC blocks. The receiver can know the number N of information MPDUs to look for. This number N may be indicated in the SIG field in a PHY preamble, in the MPDU delimiter, or in the MAC header of each MDU, or can be a number agreed between transmitter and receiver, and hence not explicitly indicated in the packet.

Alternatively, in order to enable the receiver to determine which MPDUs or Blocks are EC-Blocks, certain information can be inserted in the header or delimiter of the MPDUs that carry EC-Blocks. In particular, each header or delimiter may contain at least one of a “Type” and “Sub-type” fields, each including one or more bits. For any MPDU, the combination of these bits determines the type of information contained in the MPDU. For EC-Blocks, a new combination of Type and Subtype bits is defined to indicate that the associated MPDU includes an EC-Block. Furthermore, using the Duration field of the header, the transmitter can communicate the length of the EC-Block. In another embodiment, the EC-Block can be identified by a well defined reserved sequence number, or well defined reserved address.

In the Sequence Control field of the header, the transmitter can communicate an index or sequence number of the EC-Block, to enable the receiver to distinguish between different EC-Blocks. The sequence number of the EC block may be different than the one in the data packet. Some of the fields in the MAC header of an MPDU containing an EC-Block, such as Address fields, may not be applicable for the EC-Blocks, so these fields may be omitted from the MAC header to save channel time. In the alternative method described here, a receiver first determines that the MPDU includes an EC-Block, and then interprets the rest of the MAC header fields according to the definition for EC-Blocks, rather than according to the definition for ordinary data MPDUs. Another method for identifying EC-Blocks is to use the existing bit fields or signature fields in the delimiter preceding the EC-Block to mark the following EC-Block. For example, instead of the signature that is contained in the delimiters preceding data MPDUs, the transmitter can insert a different signature into the delimiters preceding EC-Blocks so that the different signature identifies the following MPDU as an EC-Block.

Signaling for Setup

Referring still toFIGS. 2-3, in some embodiments, the RX STA210and/or310can be configured to advertise HARQ capability to a TX STA205and/or305. When the TX STA205and/or305receives an HARQ advertisement, it can adjust one or more behaviors such as: setting a retry limit to at least two, sending a retransmission after a PIFS, and/or including parity MPDUs in an A-MPDU. The TX STA205and/or305can be configured to transmit a confirmation of the HARQ mode to the RX STA210and/or310. In various embodiments, retransmissions can be handled in the same manner as normal packets. For example, parity packets may not advance a MPDU sequence number.

FIG. 6shows an exemplary communication exchange600in the wireless communication system100ofFIG. 1. Signaling is shown, according to various embodiments, between a TX STA605and an RX STA610. In various embodiments, the TX STA605shown inFIG. 6can include any of the AP104, the STAs106a-106d, and/or the TX STAs205(FIG. 2) and305(FIG. 3). Likewise, the RX STA610shown inFIG. 6can include any of the AP104, the STAs106a-106d, and/or the RX STAs210(FIG. 2) and310(FIG. 3).

As shown, the RX STA610transmits an HARQ advertisement to the TX STA605. The HARQ advertisement can indicate that the RX STA610is capable of combining error-correction packets as described herein. The TX STA605can transmit a HARQ confirmation620to the RX STA610. Subsequently, the TX STA605can transmit a packet625to the TX STA610, retransmit an error-correction packet630, receive an ACK635, etc., in accordance with one or more embodiments described herein.

FIG. 7shows a functional block diagram of an exemplary wireless device702that can be employed within the wireless communication system100ofFIG. 1. The wireless device702is an example of a device that can be configured to implement the various methods described herein. For example, the wireless device702can include the AP, one or more of the STAs106, the TX STA205(FIG. 2) or305(FIG. 3), and/or the RX STA210(FIG. 2) or310(FIG. 3).

The wireless device702can include one or more processor units704which are configured to control operation of the wireless device702. One or more of the processor units704can be collectively referred to as a central processing unit (CPU). A memory706, which can include both read-only memory (ROM) and random access memory (RAM), provides instructions and data to the processor units704. A portion of the memory706can also include non-volatile random access memory (NVRAM). The processor units704can be configured to perform logical and arithmetic operations based on program instructions stored within the memory706. The processor704can be configured to implement one or more methods described herein, for example in conjunction with executable instructions in the memory706.

When the wireless device702is implemented or used as an AP, the processor704can be configured to generate and transmit packets having error detection and/or correction codes. When the wireless device702is implemented or used as a STA, the processor units704can be configured to receive and decode packets having error detection and/or correction codes. Various processes to detect and correct communication errors are described in further detail herein.

The processor units704can be implemented with any combination of general-purpose microprocessors, microcontrollers, digital signal processors (DSPs), field programmable gate array (FPGAs), programmable logic devices (PLDs), controllers, state machines, gated logic, discrete hardware components, dedicated hardware finite state machines, or any other suitable entities that can perform calculations or other manipulations of information. In an implementation where the processor units704include a DSP, the DSP can be configured to generate a packet (e.g., a data packet) for transmission. In some aspects, the packet can include a physical layer data unit (PPDU).

The wireless device702can also include machine-readable media for storing software. The processing units704can include one or more machine-readable media for storing software. Software shall be construed broadly to mean any type of instructions, whether referred to as software, firmware, middleware, microcode, hardware description language, or otherwise. Instructions can include code (e.g., in source code format, binary code format, executable code format, or any other suitable format of code). The instructions, when executed by the processor units704, cause the wireless device702to perform the various functions described herein.

The wireless device702can include a transmitter710and/or a receiver712to allow transmission and reception, respectively, of data between the wireless device702and a remote location. The transmitter710and receiver712can be combined into a transceiver714. An antenna716can be attached to the housing708and electrically coupled with the transceiver714. The wireless device702can also include (not shown) multiple transmitters, multiple receivers, multiple transceivers, and/or multiple antennas.

The transmitter710can be configured to wirelessly transmit packets and/or signals. For example, the transmitter710can be configured to transmit different types of packets generated by the processor units704, discussed above. The packets are made available to the transmitter701. For example, the processor units704can store a packet in the memory706and the transmitter701can be configured to retrieve the packet. Once the transmitter retrieves the packet, the transmitter701transmits the packet to a STA106wireless device702via the antenna716.

An antenna716on the STA106wireless device702detects wirelessly transmitted packets/signals. The STA106receiver712can be configured to process the detected packets/signals and make them available to the processor units704. For example, the STA106receiver712can store the packet in memory706and the processor units704can be configured to retrieve the packet.

The wireless device702can also include a signal detector718that can be used in an effort to detect and quantify the level of signals received by the transceiver714. The signal detector718can detect such signals as total energy, energy per subcarrier per symbol, power spectral density, and other signals. The wireless device702can also include a digital signal processor (DSP)720for use in processing signals. The DSP720can be configured to generate a packet for transmission. In some aspects, the packet can include a physical layer data unit (PPDU).

The wireless device702can further include a user interface722in some aspects. The user interface722can include a keypad, a microphone, a speaker, and/or a display. The user interface722can include any element or component that conveys information to a user of the wireless device702and/or receives input from the user. The wireless device702can also include a housing708surrounding one or more of the components included in the wireless device702.

The various components of the wireless device702can be coupled together by a bus system726. The bus system726can include a data bus, for example, as well as a power bus, a control signal bus, and a status signal bus in addition to the data bus. Those of skill in the art will appreciate the components of the wireless device702can be coupled together or accept or provide inputs to each other using some other mechanism.

Although a number of separate components are illustrated inFIG. 7, those of skill in the art will recognize that one or more of the components can be combined or commonly implemented. For example, the processor units704can be used to implement not only the functionality described above with respect to the processor units704, but also to implement the functionality described above with respect to the signal detector718. Further, each of the components illustrated inFIG. 7can be implemented using a plurality of separate elements.

FIG. 8shows a flowchart for an exemplary method800of wireless communication that can be employed within the wireless communication system100ofFIG. 1. The method800can be implemented in whole or in part by the devices described herein, such as the wireless device702shown inFIG. 7. Although the illustrated method800is described herein with reference to the wireless communication system100discussed above with respect toFIG. 1, the communication exchanges200and300discussed above with respect toFIGS. 2-3, and the wireless device702discussed above with respect toFIG. 7, a person having ordinary skill in the art will appreciate that the illustrated method800can be implemented by another device described herein, or any other suitable device. Although the illustrated method800is described herein with reference to a particular order, in various embodiments, blocks herein may be performed in a different order, or omitted, and additional blocks may be added.

First, at block810, a sending device transmits a first packet to a receiving device. For example, the TX STA205and/or305can transmit the packet220and/or320to the RX STA210and/or310. In an embodiment, the first packet can include one or more error-correction codes. In an embodiment, the first packet can include a portion of an A-MPDU encoded with raptor codes such as, for example, the A-MPDU502(FIG. 5).

Next, at block820, the sending device listens for an acknowledgement during a first time period. For example, the TX STA205and/or305can wait for the ACK235during the SIFS. If the TX STA205and/or305receives the ACK235, the TX STA205and/or305may not send addition error correction information.

Then, at block830, when an acknowledgement is not received during the first time period, the sending device can transmit a second packet to the receiving device. The second packet can include one or more error-correction codes operable to recover the first packet. For example, the TX STA205and/or305can transmit the new packet270and/or370to the RX STA210and/or310after the PIFS.

In an embodiment, the second time period can include the PIFS. The error-correction codes can include parity information. The error-correction codes can include forward error correction codes. The second packet can include a portion of the same A-MPDU as the first packet. The A-MPDU can be encoded with raptor codes. The second packet can include an indication that it is an error-correction packet.

In an embodiment, the sending device can receive an advertisement that the receiving device supports error correction. For example, as described above with respect toFIG. 6, the TX STA605can receive the HARQ advertisement615from the RX STA610. Moreover, the sending device can transmit a confirmation of an error correction mode to the receiving device. For example, the TX STA605can transmit the HARQ confirmation620to the RX STA610.

In an embodiment, the method shown inFIG. 8can be implemented in an apparatus for wireless communication that can include means for transmitting and means for listening. Those skilled in the art will appreciate that an apparatus for wireless communication may have more components than the simplified apparatus described herein. The wireless device described herein includes those components useful for describing some prominent features of implementations within the scope of the claims.

The means for transmitting can be configured to transmit the first packet from the sending device to the receiving device. The means for transmitting can include one or more of the antenna716(FIG. 7), a signal generator, a power source, an amplifier, the transmitter710(FIG. 7), the processor704(FIG. 7), and the memory706(FIG. 7). The means for transmitting can be further configured to transmit the second packet to the receiving device after the second time period, when an acknowledgement is not received during the first time period.

The means for listening can be configured to listen for an acknowledgement during a first time period. The means for listening can include one or more of the receiver712(FIG. 7), the antenna716(FIG. 7), the processor704(FIG. 7), and the memory706(FIG. 7).

FIG. 9shows a flowchart for an exemplary method900of wireless communication that can be employed within the wireless communication system100ofFIG. 1. The method900can be implemented in whole or in part by the devices described herein, such as the wireless device702shown inFIG. 7. Although the illustrated method900is described herein with reference to the wireless communication system100discussed above with respect toFIG. 1, the communication exchange200discussed above with respect toFIG. 2, and the wireless device702discussed above with respect toFIG. 7, a person having ordinary skill in the art will appreciate that the illustrated method900can be implemented by another device described herein, or any other suitable device. Although the illustrated method900is described herein with reference to a particular order, in various embodiments, blocks herein may be performed in a different order, or omitted, and additional blocks may be added.

First, at block910, a receiving device receives a first packet from a sending device. For example, the RX STA210can receive the packet220from the TX STA205. In an embodiment, the first packet can include one or more error-correction codes. In an embodiment, the first packet can include a portion of an A-MPDU encoded with raptor codes such as, for example, the A-MPDU502(FIG. 5).

Next, at block920, receiving device stores at least a portion of the first packet if the first packet includes an error. For example, the RX STA210can store a portion of the packet220if it is not properly decoded. In an embodiment, when the RX STA210encounters an error at a signal (SIG) field of the packet220, or when comparing the received packet220to an FCS field, the RX STA210can store the entire PPDU of the packet220for later combination with additional error-correction codes. In some embodiments, the TX STA205can store the packet220without the STF. In another embodiment, when the RX STA210encounters an error when comparing the received packet220to an FCS field, the RX STA210can store the entire PSDU of the packet220for later combination with additional error-correction codes.

Then, at block930, the receiving device receives a second packet at the end of a predetermined time period. The second packet can include one or more error-correction codes operable to recover the first packet. For example, the RX STA210can receive the new packet270after the PIFS.

In an embodiment, the second time period can include the PIFS. The error-correction codes can include parity information. The error-correction codes can include forward error correction codes. The second packet can include a portion of the same A-MPDU as the first packet. The A-MPDU can be encoded with raptor codes. The second packet can include an indication that it is an error-correction packet.

Thereafter, at block940, the receiving device matches the second packet to the first packet based on the time of receiving the second packet. For example, the RX STA610can match the new packet270to the packet220because it was received one SIFS after the packet220was received. In other words, the receiving device can assume that the second packet includes error-correction information for the first packet due to the predetermined timing.

Subsequently, at block950, the receiving device applies the error-correction codes from the second packet to the first packet. For example, the RX STA210can apply the error-correction codes from the new packet270to the stored packet220. In an embodiment, applying the error-correction codes can include forward error correction combination.

In an embodiment, the receiving device can transmit an advertisement that it supports error correction. For example, as described above with respect toFIG. 6, the RX STA610can transmit the HARQ advertisement615to the TX STA605. Moreover, the receiving device can receive a confirmation of an error correction mode from the sending device. For example, the RX STA610can receive the HARQ confirmation620from the TX STA605.

In an embodiment, the method shown inFIG. 9can be implemented in an apparatus for wireless communication that can include means for receiving, means for storing, means for matching, and means for applying. Those skilled in the art will appreciate that an apparatus for wireless communication may have more components than the simplified apparatus described herein. The wireless device described herein includes those components useful for describing some prominent features of implementations within the scope of the claims.

The means for receiving can be configured to receive the first packet from the sending device. The means for receiving can include one or more of the receiver712(FIG. 7), the antenna716(FIG. 7), the processor704(FIG. 7), and the memory706(FIG. 7). The means for receiving can be further configured to receive the second packet at the end of the predetermined time period.

The means for storing can be configured to store at least a portion of the first packet when the first packet includes an error. The means for storing can include, for example, one or more of the memory706(FIG. 7) and the processor704(FIG. 7).

The means for matching can be configured to match the second packet to the first packet based on a timing of receiving the second packet. The means for matching can include, for example, one or more of the memory706(FIG. 7) and the processor704(FIG. 7).

The means for applying can be configured to apply the error-correction codes to the first packet. The means for applying can include any processor or controller such as, for example, the processor704(FIG. 7) in conjunction with the memory706(FIG. 7).

FIG. 10shows a flowchart for an exemplary method1000of wireless communication that can be employed within the wireless communication system100ofFIG. 1. The method1000can be implemented in whole or in part by the devices described herein, such as the wireless device702shown inFIG. 7. Although the illustrated method1000is described herein with reference to the wireless communication system100discussed above with respect toFIG. 1, the communication exchange300discussed above with respect toFIG. 3, and the wireless device702discussed above with respect toFIG. 7, a person having ordinary skill in the art will appreciate that the illustrated method1000can be implemented by another device described herein, or any other suitable device. Although the illustrated method1000is described herein with reference to a particular order, in various embodiments, blocks herein may be performed in a different order, or omitted, and additional blocks may be added.

First, at block1010, a receiving device receives a first packet from a sending device. For example, the RX STA310can receive the packet320from the TX STA305. In an embodiment, the first packet can include one or more error-correction codes. In an embodiment, the first packet can include a portion of an A-MPDU encoded with raptor codes such as, for example, the A-MPDU502(FIG. 5).

Next, at block1020, receiving device stores at least a portion of the first packet if the first packet includes an error. For example, the RX STA310can store a portion of the packet320if it is not properly decoded. In an embodiment, when the RX STA310encounters an error at a signal (SIG) field of the packet320, or when comparing the received packet320to an FCS field, the RX STA310can store the entire PPDU of the packet320for later combination with additional error-correction codes. In some embodiments, the TX STA310can store the packet320without the STF. In another embodiment, when the RX STA310encounters an error when comparing the received packet320to an FCS field, the RX STA310can store the entire PSDU of the packet320for later combination with additional error-correction codes.

Then, at block1030, the receiving device receives a second packet. The second packet can include one or more error-correction codes operable to recover the first packet. For example, the RX STA310can receive the new packet370. The error-correction codes can include parity information. The error-correction codes can include forward error correction codes. The second packet can include a portion of the same A-MPDU as the first packet. The A-MPDU can be encoded with raptor codes. The second packet can include an indication that it is an error-correction packet.

Thereafter, at block1040, the receiving device matches the second packet to the first packet based on one or more of a destination address and a sequence number of the first and second packets. In various embodiments, the receiving device matches the second packet to the first packet based on one of the destination address and the sequence number. For example, the RX STA610can match the new packet370to the packet320when it includes the same AID, partial AID, and/or sequence number. In other words, the receiving device can assume that the second packet includes error-correction information for the first packet due to identifying data in the first and second packets.

Subsequently, at block1050, the receiving device applies the error-correction codes from the second packet to the first packet. For example, the RX STA310can apply the error-correction codes from the new packet370to the stored packet320. In an embodiment, applying the error-correction codes can include forward error correction combination.

In an embodiment, the receiving device can transmit an advertisement that it supports error correction. For example, as described above with respect toFIG. 6, the RX STA610can transmit the HARQ advertisement615to the TX STA605. Moreover, the receiving device can receive a confirmation of an error correction mode from the sending device. For example, the RX STA610can receive the HARQ confirmation620from the TX STA605.

In an embodiment, the method shown inFIG. 10can be implemented in an apparatus for wireless communication that can include means for receiving, means for storing, means for matching, and means for applying. Those skilled in the art will appreciate that an apparatus for wireless communication may have more components than the simplified apparatus described herein. The wireless device described herein includes those components useful for describing some prominent features of implementations within the scope of the claims.

The means for receiving can be configured to receive the first packet from the sending device. The means for receiving can include one or more of the receiver712(FIG. 7), the antenna716(FIG. 7), the processor704(FIG. 7), and the memory706(FIG. 7). The means for receiving can be further configured to receive the second packet.

The means for storing can be configured to store at least a portion of the first packet when the first packet includes an error. The means for storing can include, for example, one or more of the memory706(FIG. 7) and the processor704(FIG. 7).

The means for matching can be configured to match the second packet to the first packet based on one or more of a destination address and/or a sequence number of the first and second packets. The means for matching can include, for example, one or more of the memory706(FIG. 7) and the processor704(FIG. 7).

The means for applying can be configured to apply the error-correction codes to the first packet. The means for applying can include any processor or controller such as, for example, the processor704(FIG. 7) in conjunction with the memory706(FIG. 7).

Incorporation of HARQ Protocol in IEEE.802.11 Wireless Networks

Currently, the IEEE 802.11 family of wireless networking standards does not utilize the advantages of hybrid automatic repeat request (HARQ) protocols. Although they have been incorporated into other wireless communication systems, significant obstacles remain in their incorporation into IEEE 802.11. One source of the difficulty in incorporating HARQ into IEEE 802.11 is that rather than utilizing a medium access request/grant multiple access protocol, where a STA is assigned a time slot for communication, for example, IEEE 802.11 uses a carrier sense (CSMA/CA) multiple access protocol. This leads to special difficulties in managing ACK responses and matching packets to intended recipient STAs and previously transmitted packets for subsequent HARQ combining at the appropriate STA.

Implementations that utilize the existing ACK message of IEEE 802.11 to implement HARQ are described above. One problem with relying solely on ACK messages sent from a recipient RX STA to the TX STA in a HARQ protocol is that in some cases, the intended RX STA may not have received and stored the initial packet at all. In this case, no ACK is returned. If the TX STA assumes the RX STA received and stored a packet, but did not receive an ACK because the RX STA encountered errors in decoding, it may send one or more additional parity packets with FEC data that the RX STA cannot use. This results in unnecessary use of channel capacity.

To help resolve this problem, as illustrated inFIG. 11, in some implementations, the RX STA210may transmit responses other than an ACK to TX STA205. RX STA210may transmit a negative acknowledgment (NACK)237message when a packet is received with errors, and/or if a parity packet is not combined successfully. As described further below, the RX STA210may also transmit a HARQ ABORT to TX STA205to abort further attempts. Furthermore, the TX STA205may terminate the HARQ procedure with a HARQ ABORT message to the RX STA.

Implementations with a NACK237may improve communication efficiency. If only an ACK is utilized, the TX STA205does not know if the RX STA received the packet220with errors, stored the packet, and is awaiting a parity packet, or if the RX STA did not receive the packet at all. The NACK signal provides this information to the TX STA, indicating that the packet was received and stored, but errors are present, and that the RX STA is awaiting a parity packet to combine with the information currently stored.

Referring now toFIG. 11, in timeline203, the RX STA210encounters an error decoding the packet220from TX STA205. RX STA210can store the packet220and transmit a negative acknowledgement (NACK)237to TX STA205. TX STA205waits for an ACK235or a NACK237from the RX STA210. The TX STA205can be configured to wait for a first amount of time. For example, in the illustrated embodiment, the TX STA205waits for the duration of a short interframe space (SIFS). The RX STA210can be expected to transmit an ACK235, or a NACK237at the end of the SIFS upon receipt of the packet220. In timeline203, RX STA210sends a NACK237to RX STA210indicating the packet220was received but contained errors. In response, TX STA205sends parity packet272ato RX STA210. RX STA210decodes the parity packet and attempts to combine the parity packet with one or more stored packets previously received from TX STA205corresponding to packet220. In timeline203, the RX STA210fails to successfully combine parity packet272awith the previously received packet, and sends another NACK to TX STA205. In response, the TX STA sends another parity packet272bto the RX STA. With the additional parity packet272b, the RX STA210successfully combines the parity data with the original packet220, and sends an ACK235to the TX STA205acknowledging successful reception of the data in the packet. Repeats of the NACK and parity packet exchange can continue for several attempts.

Timeline204differs from timeline203in that combining one or more parity packets272with previously received packet220and one or more parity packets272is unsuccessful after multiple attempts. Timeline204depicts a case where a packet220and two parity packets are not successfully combined. After two tries, RX STA210sends a HARQ ABORT239message, and the TX STA205aborts sending parity packets272for this particular packet220. RX STA210may configure criteria to determine when to issue a HARQ ABORT; for example based on a predefined number of attempts or based on an error detection criteria. In some implementations, the TX STA can send a HARQ ABORT message to the RX STA in response to a NACK, also terminating the HARQ protocol for that packet.

In conventional IEEE 802.11 protocols, the transmitted packet or PPDU includes a PHY header including one or more SIG fields and CRC check code for the PHY header, and one or more MPDUs, each including a MAC header, payload data, and another CRC check code for the MPDU. The RX STA can check for errors in the PHY header and the MPDU separately, and will discard the packet if an error is found in either one, and will send an ACK if no errors are detected in either. When implementing a HARQ protocol in this system, which involves storing packets with decoding errors and combining them with later transmitted packets to correct the errors as described above, difficulties arise because important information is present in the MAC header of the MPDU, including the MAC address of the intended recipient RX STA, and the sequence number of the MPDU being transmitted. The CRC of the MPDU is computed over both the payload data and the MAC header, so the if the RX STA detects errors, it may not know if the error is in the payload or the header, and therefore the decoded address and sequence number may be incorrect. This can, for example, result in multiple NACK messages being sent by different RX STAs in response to the same transmitted packet if different RX STAs produce errors in decoding the same packet. RX STAs that decode the packet without errors will be sure whether or not the packet is intended for them, as they can be confident of the MAC address decoded from the MAC header.

To resolve this issue, it is possible to place information important in operating the HARQ protocol in the SIG fields of the PHY header where more robust transmission can be implemented and a separate error check can be performed. In one implementation, a unique identifier of the intended recipient of each packet such as the MAC address of the recipient may be provided as part of the SIG fields in the PHY header. With this solution, if a RX STA receives a SIG field containing its unique identifier (e.g. MAC address) without errors, but the CRC check for the MPDU portion of the packet fails, it can send a NACK. If a STA receives a SIG field containing a unique identifier (e.g. MAC address) different from its own without errors, or receives a SIG field with errors, it can stop processing the packet at that point. In this way, a single STA will respond with a NACK.

As another alternative, a SIG field without a unique identifier can be used, but a polled protocol can be implemented where NACK messages are sent in response to a separate polling frame that includes the unique identifier such as the MAC address of the intended recipient. In one example implementation, if a STA receives a packet and finds errors in MPDU decoding, it may save the packet and wait. If the TX STA does not receive an ACK, it may send a polling frame that includes the MAC address of the intended recipient of the previous packet. If this polling frame is received without errors and the decoded MAC address matches the MAC address of the STA that stored the incorrectly decoded packet, it can send a NACK to the TX STA in response to the polling frame, informing the TX STA that the incorrectly decoded packet is stored and it is ready to receive a parity packet for combining with the stored packet. If the polling frame includes a different MAC address, the RX STA that stored the frame can discard it. Furthermore, if the stored packet is actually intended for another RX STA that decoded the packet without errors, this STA will send an ACK back to the TX STA, no polling frame will be sent, and the STA that stored the incorrectly decoded packet can discard the packet after a defined period in which no polling frame addressed to it is received.

It may also be noted that in addition to the MAC address in the MPDU, a smaller length “partial address identifier,” which is generally assigned to each STA by the AP, but which is not necessarily unique, can be provided in one of the SIG fields, and currently is utilized in some versions of IEEE 802.11. This is typically used for power savings, as an STA can first decode the SIG field (which as noted above has its own CRC), and if the partial address identifier does not match the partial address identifier of the STA, the STA can conclude the packet is for a different STA, can stop processing the packet at that point, and can enter a low power mode for the packet duration (the packet duration is also provided in a SIG field). This partial address identifier can also be leveraged when implementing HARQ with NACK messages. Although not necessarily unique, the STA can save the packet and send a NACK when the partial address identifier matches the RX STA but the MPDU has errors in decoding. Although the partial address identifier is not necessarily unique, this can still substantially prevent duplicate NACKs (or a NACK and an ACK) sent by different STAs in response to the initial packet.

The parity packets272aand272bmay include some or all of the original packet220, and may include different FEC information. The fact that packets272aand272bare parity packets and the type of parity information being provided may be provided to the RX STA210as part of the parity packets272. As with the unique identifier of the intended recipient STA as noted above, the identification of parity packet and type may be provided as part of one or more SIG fields of the PPDU packet header. The modulation type of the SIG symbols themselves may also be used to provide information to the RX STA that the packet being received is a parity packet and the type of parity present in the packet. Such information may include an index indicating that the parity packet is the Nth parity packet for combining with a previously transmitted packet.

When implementing HARQ, the RX STA may also utilize information for matching a received parity packet272with an original packet220that the parity packet may be combined with for decoding. To perform this matching, transmitted PPDUs may include a PSDU identifier in a SIG field of the PHY header along with the recipient identifier as described above. The original packet will have a sequence number assigned to it which is transmitted in the MAC header of the original packet, and this sequence number can, in some implementations, be provided in a SIG field of the original packet as well, which allows the RX STA to reliably assign an identifier to the PPDU since the sequence number in the MAC header cannot be relied upon because of the presence of MPDU decoding errors. The parity packets can repeat the same sequence number in their own SIG field, so that the RX STA can match the parity packet with the original packet for combining and error correction. In other respects, the parity packets272may be sent with the same signaling as a normal PPDU frame with a payload including the data for combining, which may include a retransmission of some or all original data in the first packet, additional parity data, or both depending on the HARQ/FEC technique being implemented in the decoding process.

The PSDU identifier in the SIG field may be omitted if a stop and wait ARQ method is used for each packet wherein the TX STA and the RX STA continue communicating until either the RX STA successfully decodes the packet and sends an ACK to the TX STA or the process terminates with packet failure and the RX STA flushes its stored packet(s). In this case, the parity packets will be understood to correspond to the last packet received with errors and stored at the RX STA. The nature of the content of each successive parity packet sent in response to a NACK may also be pre-agreed between the TX STA and RX STA. If the polled protocol for requesting NACK messages described above is used with this stop-and-wait style ARQ for each packet, little to no modification to existing 802.11 PHY header fields is needed to implement HARQ in IEEE 802.11 protocols.

The above described implementations use the SIG fields in the PHY header to reliably transmit HARQ signaling information from the TX STA to the RX STA, which may be seen in some ways as transferring some information currently provided in the MAC header to the PHY header. Another implementation can instead modify the existing IEEE 802.11 MAC header to possibly utilize robust low rate codes for at least the information useful to HARQ management in the MAC header portion of the MPDU and include a separate MAC header or partial MAC header CRC so this data can be error checked independently from the rest of the MPDU. Existing MAC header fields can then be used to manage the HARQ procedure, such as the existing MAC addresses, Frame type and Subtype fields in the Frame Control Field, and the MPDU sequence control field. To minimize modifications to the existing MPDU structure of IEEE 802.11 while implementing HARQ in this manner, it may be possible to split the existing four byte MPDU CRC (which is computed over both the MPDU payload and the header) into separate portions that are dedicated separately to header and payload error detection.

The above description is directed mainly to packets containing a single MPDU. Operation with aggregated MPDUs (e.g. as shown inFIGS. 4 and 5) in a single PPDU can be handled similarly to a single MPDU packet but with additional signaling to potentially handle correction of a failed portion of the PPDU. In one implementation, where the RX STA cannot determine the number and size of failed MPDUs between correctly decoded MPDUs, the RX STA can store the samples corresponding to the bytes received in between the MPDUs that passed the CRC check. A block acknowledgement message can be returned to the TX STA which identifies these bytes and the TX STA can send one or more parity packets for these bytes, which can then be combined with the saved bytes to decode the failed portion of the PPDU.

In another implementation, if the aggregated MPDUs include robust delimiters and MAC headers that can be reliably decoded and error checked, the RX STA may be able to identify specifically which MPDU's failed and can indicate to the TX STA the identity of these MPDUs in a block acknowledge message. In this case, a parity MPDU can be sent for each failed MPDU, and these can be matched to the failed MPDU's stored in the RX STA based on sequence number and parity type for combining in the RX STA.

FIG. 12shows exemplary transmitter communication operations in the wireless communication system ofFIG. 1.FIG. 13shows exemplary receiver communication operations in the wireless communication system ofFIG. 1. These Figures further illustrate the communication protocols ofFIG. 11. Blocks in theseFIGS. 12 and 13that correspond to blocks above inFIG. 3are designated with the same designation numbers.

In various embodiments, the TX STA can include any of the AP104and/or the STAs106a-106d, described above with respect toFIG. 1. Likewise, the RX STA can include any of the AP104and/or the STAs106a-106d, described above with respect toFIG. 1.

As shown inFIG. 12andFIG. 13, the TX STA205and the RX STA210can separately implement aspects of an error-control method. The illustrated method can facilitate reliable data transmission between the TX STA205and the RX STA210using packet data to match packets for error-correction. The method can be implemented in whole or in part by the devices described herein, such as the wireless device702shown inFIG. 7. Although the illustrated method is described herein with reference to a particular order, in various embodiments, blocks herein may be performed in a different order, or omitted, and additional blocks may be added.

First, atFIG. 12, block315, the TX STA205transmits an initial packet (not shown; packet transmitted fromFIG. 12block315toFIG. 13block325) to the RX STA210. In various embodiments, the packet can include one or more of a PPDU, PSDU, MPDU, and MSDU. The packet can include an error detection code, such as a frame check sequence (FCS) or a cyclic redundancy check (CRC). In some embodiments, the packet can include one or more parity bits, and/or error-correction codes such as, for example, forward error-correction (FEC) Reed-Solomon codes. The parity bits can be referred to the coded PPSU, PSDU, or to each coded MPDU or MSDU.

The packet can include an explicit indication that the packet is protected by error-correction codes. For example, the packet can include the indication in one or more SIG fields, in a robust portion of a MAC header, etc. In some embodiments, error-correction can be implicit. For example, the RX STA210can assume that all packets at a given modulation and coding scheme (MCS), such as the lowest, are protected with error-correction codes, that all packets are eligible for error-correction, etc. In various embodiments, the RX STA210can exchange management information with the TX STA205, which can indicate that all or certain packets are eligible for error correction.

The packet can further include a robust destination indication. For example, the packet can include a low-rate MAC header including a destination address. The low-rate MAC header can include an independent error detection and/or correction code. As another example, the packet can include a physical layer (PHY) preamble including the destination address. In some embodiments, the retransmission of error-correction information may be applied to aggregated MPDUs (A-MPDUs) where at least one MPDU has been correctly decoded, so that the address was correctly received. In various embodiments, all MPDUs in an A-MPDU can have same destination address, so the RX STA210can obtain the address by decoding a single MPDU.

The packet can further include a robust sequence indication. The packet can further include an indication that it is a data packet, as opposed to an error-correction packet or other retransmission. For example, parity packets can be indicated in the PHY preamble or using a retry bit in the MAC header. In an embodiment the packet can omit the parity indication.

Next, atFIG. 13, block325, the RX STA210receives the packet. The RX STA210can detect the packet based on a training sequence, such as a short training field (STF). In some embodiments, the packet210can include a signal (SIG) field. In some embodiments, the packet can include an FCS field.

Then, atFIG. 13, block345, the RX STA210determines whether the packet is addressed to the RX STA210. In the illustrated embodiment, the STA210checks the destination of the packet (such as the robust destination indication in the MAC header or PHY, as discussed above) against the association ID (AID) of the RX STA210. In some embodiments, a partial AID at the PHY layer can be used. If the AID or partial AID does not match, the RX STA210can ignore the packet at block360. On the other hand, if the AID or partial AID matches, the RX STA210can store the packet at block365. In an embodiment, when the RX STA210encountered an error at a signal (SIG) field of the packet, or when comparing the received packet to an FCS field, the RX STA210can store the entire PPDU of the packet for later combination with additional error-correction codes. In some embodiments, the TX STA205can store the packet without the STF. In another embodiment, when the RX STA210encountered an error when comparing the received packet to an FCS field, the RX STA210can store the entire PSDU of the packet for later combination with additional error-correction codes.

Next, atFIG. 13, block332, the RX STA210determines whether the packet is a parity packet. If it is, it combines the parity packet with previously received stored packet(s) at block385.

Then, at block330, the RX STA210determines whether the received packet was successfully decoded. For example, when receiving the packet, the RX STA210may encounter an error at the SIG field of the packet. In some circumstances, the TX STA205may encounter an error when verifying the FCS field. If the RX STA210decodes the packet without error, at block340it can transmit an ACK to the TX STA205, received atFIG. 12, block347.

Next, at block332, the RX STA210determines whether to continue HARQ. If continuing HARQ, The RX STA210transmits a NACK237message at block342toFIG. 13, block347. If not, the RX STA210transmits a HARQ ABORT message at block344toFIG. 12, block347.

Meanwhile, atFIG. 12, block347, the TX STA205waits for a response from the RX STA210. The TX STA205can be configured to wait for a first amount of time. For example, in the illustrated embodiment, the TX STA205waits for the duration of a short interframe space (SIFS). The RX STA210can be expected to transmit the ACK335at the end of the SIFS upon successful receipt of the packet. In some embodiments, the first amount of time can be the PIFS, or any other timing greater than the PIFS. When the packet includes robust addressing, the first amount of time can be dynamic, and need not be preset or prearranged.

Subsequently, at blocks350,352, and354the TX STA205determines whether it received an ACK, NACK, or HARQ ABORT response from RX STA210, respectively. An ACK signifies successful transmission, in block355. A HARQ ABORT indicates that the RX STA210requests an end to the HARQ process for the current packet, and transmission failure at block359. The TX STA205processes a NACK by first determining whether to continue with HARQ in box357. If not, the TX STA205ends the HARQ process for the current process, signifying transmission failure in box359. If the TX STA305opts to continue HARQ, the TX STA305transmits a parity packet in box377to RX STA310inFIG. 3B, box325.

If the TX STA310receives neither ACK235, NACK237, nor HARQ ABORT239during the response period, TX STA205retransmits the initial packet in box375to RX STA210inFIG. 13, box325.

FIG. 14shows a flowchart for an exemplary method840of wireless communication that can be employed within the wireless communication system100ofFIG. 1. The method840can be implemented in whole or in part by the devices described herein, such as the wireless device702shown inFIG. 7. Although the illustrated method840is described herein with reference to the wireless communication system100discussed above with respect toFIG. 1, the communication exchanges200and300discussed above with respect toFIGS. 2-3, and the wireless device702discussed above with respect toFIG. 7, a person having ordinary skill in the art will appreciate that the illustrated method800can be implemented by another device described herein, or any other suitable device. Although the illustrated method800is described herein with reference to a particular order, in various embodiments, blocks herein may be performed in a different order, or omitted, and additional blocks may be added.

First, at block850, a sending device transmits a first packet to a receiving device. For example, the TX STA205can transmit the packet220to the RX STA210. In an embodiment, the first packet can include one or more error-correction codes. In an embodiment, the first packet can include a portion of an A-MPDU encoded with raptor codes such as, for example, the A-MPDU502(FIG. 5).

Next, at block860, the sending device listens for an acknowledgement, a non-acknowledgement, or a HARQ abort during a first time period. For example, the TX STA205can wait for the ACK235, NACK237, or HARQ ABORT239during the SIFS. If the TX STA205receives the ACK235or the HARQ ABORT239, the TX STA205may not send additional error correction information.

Then, at block870, when a non-acknowledgement is received during the first time period, the sending device can transmit a priority packet to the receiving device during a second time interval. The priority packet includes one or more error-correction codes operable to recover the first packet. For example, the TX STA205can transmit the priority packet272to the RX STA210after the PIFS.

Next, at block880, the sending device listens for an acknowledgement, a non-acknowledgement, or a HARQ abort during a third time period. For example, the TX STA205can wait for the ACK235, NACK237, or HARQ ABORT239during the SIFS. If the TX STA205receives the ACK235or the HARQ ABORT239, the TX STA205may not send additional error correction information.

Then, at block890, when a non-acknowledgement is received during the third time period, the sending device can transmit a priority packet to the receiving device during a fourth time period. The priority packet includes one or more error-correction codes operable to recover the first packet. For example, the TX STA205can transmit the priority packet272to the RX STA210after the PIFS.

In an embodiment, the second time period can include the PIFS. The error-correction codes can include parity information. The error-correction codes can include forward error correction codes. The second packet can include a portion of the same A-MPDU as the first packet. The A-MPDU can be encoded with raptor codes. The second packet can include an indication that it is an error-correction packet.

Various aspects of the novel systems, apparatuses, and methods are described herein with reference to the accompanying drawings. The teaching's disclosure can, however, be embodied in many different forms and may not be construed as limited to any specific structure or function presented throughout this disclosure. Rather, these aspects are provided so that this disclosure will fully convey the scope of the disclosure to those skilled in the art. Based on the teachings herein, one skilled in the art will appreciate that the scope of the disclosure is intended to cover any aspect of the novel systems, apparatuses, and methods disclosed herein, whether implemented independently of or combined with any other aspect disclosed. For example, an apparatus can be implemented or a method can be practiced using any number of the aspects set forth herein. In addition, the scope of the invention is intended to cover such an apparatus or method which is practiced using other structure, functionality, or structure and functionality in addition to or other than the various aspects of the invention set forth herein. It may be understood that any aspect disclosed herein can be embodied by one or more elements of a claim.

As used herein, the term “determining” encompasses a wide variety of actions. For example, “determining” can include calculating, computing, processing, deriving, investigating, looking up (e.g., looking up in a table, a database or another data structure), ascertaining and the like. Also, “determining” can include receiving (e.g., receiving information), accessing (e.g., accessing data in the memory706(FIG. 7)) and the like. Also, “determining” can include resolving, selecting, choosing, establishing and the like. Further, a “channel width” as used herein can encompass or can also be referred to as a bandwidth in certain aspects.

The various operations of methods described above can be performed by any suitable means capable of performing the operations, such as various hardware and/or software component(s), circuits, and/or module(s). Generally, any operations illustrated in the Figures can be performed by corresponding functional means capable of performing the operations.

The methods disclosed herein include one or more steps or actions for achieving the described method. The method steps and/or actions can be interchanged with one another without departing from the scope of the claims. In other words, unless a specific order of steps or actions is specified, the order and/or use of specific steps and/or actions can be modified without departing from the scope of the claims.

The functions described can be implemented in hardware, software, firmware or any combination thereof. If implemented in software, the functions can be stored as one or more instructions on a computer-readable medium. A storage media can be any available media that can be accessed by a computer. By way of example, and not limitation, such computer-readable media can include RAM, ROM, EEPROM, CD-ROM or other optical disk storage, magnetic disk storage or other magnetic storage devices, or any other medium that can be used to carry or store desired program code in the form of instructions or data structures and that can be accessed by a computer. Disk and disc, as used herein, include compact disc (CD), laser disc, optical disc, digital versatile disc (DVD), floppy disk, and Blu-ray® disc where disks usually reproduce data magnetically, while discs reproduce data optically with lasers.

Thus, certain aspects can include a computer program product for performing the operations presented herein. For example, such a computer program product can include a computer readable medium having instructions stored (and/or encoded) thereon, the instructions being executable by one or more processors to perform the operations described herein. For certain aspects, the computer program product can include packaging material.

It is to be understood that the claims are not limited to the precise configuration and components illustrated above. Various modifications, changes and variations can be made in the arrangement, operation and details of the methods and apparatus described above without departing from the scope of the claims.

While the foregoing is directed to aspects of the present disclosure, other and further aspects of the disclosure can be devised without departing from the basic scope thereof, and the scope thereof is determined by the claims that follow.