Patent ID: 12238502

DETAILED DESCRIPTION OF EXAMPLE EMBODIMENTS

Aspects of the present disclosure relate to transmitting and receiving audio transmissions between multiple devices. In certain aspects, a single computing device may receive audio transmissions from multiple computing devices and may transmit acknowledgments to the multiple computing devices in response to the audio transmissions.

Various techniques and systems exist to exchange data between computing devices without connecting to the same communication network. For example, the computing devices may transmit data via direct communication links between the devices. In particular, data may be transmitted according to one or more direct wireless communication protocols, such as Bluetooth®, ZigBee®, Z-Wave®, Radio-Frequency Identification (RFID), Near Field Communication (NFC), and Wi-Fi® (e.g., direct Wi-Fi® links between the computing devices). However, each of these protocols relies on data transmission using electromagnetic waves at various frequencies. Therefore, in certain instances (e.g., ZigBee®, Z-Wave®, RFID, and NFC), computing devices may typically require specialized hardware to transmit data according to these wireless communication protocols. In further instances (e.g., Bluetooth®, ZigBee®, Z-Wave®, and Wi-Fi®), computing devices may typically have to be communicatively paired in order to transmit data according to these wireless communication protocols. Such communicative pairing can be cumbersome and slow, reducing the likelihood that users associated with one or both of the computing devices will utilize the protocols to transmit data.

Therefore, there exists a need to wirelessly transmit data in a way that (i) does not require specialized hardware and (ii) does not require communicative pairing prior to data transmission. One solution to this problem is to transmit data using audio transmissions. For example,FIG.1illustrates a system100according to an exemplary embodiment of the present disclosure. The system100includes two computing devices102,104configured to transmit data122,124using audio transmissions114,116. In particular, each computing device102,104includes a transmitter106,108and a receiver110,112. The transmitters106,108may include any type of device capable of generating audio signals, such as speakers. In certain implementations, the transmitters106,108may be implemented as a speaker built into the computing device102,104. For example, one or both of the computing devices may be a smart phone, tablet computer, and/or laptop with a built-in speaker that performs the functions of the transmitter106,108. In other implementations, the transmitters106,108may be implemented as a microphone external to the computing device102,104. For example, the transmitters106,108may be implemented as one or more speakers externally connected to the computing device102,104.

The receivers110,112may include any type of device capable of receiving audio transmissions and converting the audio transmissions into signals (e.g., digital signals) capable of being processed by a processor of the computing device, such as microphones. In other implementations, the receivers110,112may be implemented as a microphone built into the computing device102,104. For example, one or both of the computing devices may be a smartphone, tablet computer, and/or laptop with a built-in microphone that performs the functions of the receivers110,112. In other implementations, the receivers110,112may be implemented as a microphone external to the computing device102,104. For example, the receivers110,112may be implemented as one or more microphones external to the computing device102,104that are communicatively coupled to the computing device102,104. In certain implementations, the transmitter106,108and receiver110,112may be implemented as a single device connected to the computing device. For example, the transmitter106,108and receiver110,112may be implemented as a single device containing at least one speaker and at least one microphone that is communicatively coupled to the computing device102,104.

In certain implementations, one or both of the computing devices102,104may include multiple transmitters106,108and/or multiple receivers110,112. For example, the computing device104may include multiple transmitters108and multiple receivers112arranged in multiple locations so that the computing device104can communicate with the computing device102in multiple locations (e.g., when the computing device102is located near at least one of the multiple transmitters108and multiple receivers112. In additional or alternative implementations, one or both of the computing devices102,104may include multiple transmitters106,108and/or multiple receivers110,112in a single location. For example, the computing device104may include multiple transmitters108and multiple receivers112located at a single location. The multiple transmitters108and multiple receivers112may be arranged to improve coverage and/or signal quality in an area near the single location. For example, the multiple transmitters108and multiple receivers112may be arranged in an array or other configuration so that other computing devices102receive audio transmissions114,116of similar quality regardless of their location relative to the transmitters108and receivers112(e.g., regardless of the location of the computing devices102within a service area of the transmitters108and receivers112).

The computing devices102,104may generate audio transmissions114,116to transmit data122,124to one another. For example, the computing devices102may generate one or more audio transmissions114to transmit data122from the computing device102to the computing device104. As another example, the computing device104may generate one or more audio transmissions116to transmit data124from the computing device104to the computing device102. In particular, the computing devices102,104may create one or more packets118,120based on the data122,124(e.g., including a portion of the data122,124) for transmission using the audio transmissions114,116. To generate the audio transmission114,116, the computing devices102,104may modulate the packets118,120onto an audio carrier signal. The computing devices102,104may then transmit the audio transmission114,116via the transmitter106,108, which may then be received by the receiver110,112of the other computing devices102,104. In certain instances (e.g., where the data122,124exceeds a predetermined threshold for the size of a packet118,120), the data122,124may be divided into multiple packets118,120for transmission using separate audio transmissions114,116.

Accordingly, by generating and transmitting audio transmissions114,116in this way, the computing devices102,104may be able to transmit data122,124to one another without having to communicatively pair the computing devices102,104. Rather, a computing device102,104can listen for audio transmissions114,116received via the receivers110,112from another computing device102,104without having to communicatively pair with the other computing device102,104. Also, because these techniques can utilize conventional computer hardware like speakers and microphones, the computing devices102,104do not require specialized hardware to transmit the data122,124.

However, transmitting data by audio transmissions includes other limitations. In particular, when multiple computing devices are attempting to transmit audio transmissions to the same computing device, the audio transmissions may conflict with one another. For example, audio transmissions sent using the same frequency (e.g., the same carrier frequency) may conflict with one another, which may leave the computing device that is supposed to receive the audio transmissions unable to parse or process the audio transmissions. Typically, communication system may utilize time-based controls for when computing devices can send audio transmissions to a receiving computing device. For example, certain communication systems may utilize a time-division multiple access (TDMA) protocol to assign time slots when each computing device is allowed to transmit. Communication systems may also utilize carrier-sense techniques in which a computing device determines whether another computing device is transmitting before beginning to transmit data. For example, certain communication systems may utilize a carrier-sense multiple access (CSMA) protocol to restrict computing devices to transmitting only when other computing devices are not.

However, such techniques for controlling audio transmission may not be suitable for use audio transmissions containing data. In particular, transmitting data using audio may have a lower bandwidth than transmitting data using electromagnetic signals, and processing audio signals may take more time as a result. Therefore, techniques such as CSMA that attempt to determine whether a carrier signal from another computing device are present may not be suitable, as processing received audio signals to detect carrier signals for an audio transmission may take too much time. Furthermore, as a result of hardware limitations in transmitters such as speakers, audio transmissions may require a large timing buffer (e.g., 0.2 seconds or more) by which the timing for a received audio transmission can deviate from an expected time of receipt. Therefore, timing-based control techniques may similarly take too much time because of the additional time added before and after each timing segment to account for the required buffer.

Therefore, there exists a need to transmit audio transmissions from multiple computing devices in a way that does not require timing-based control or prior detection of carrier audio signals from other computing devices. One solution to this problem is to transmit audio signals using multiple audio channels that each represent a portion of the audio spectrum in which audio transmissions can be transmitted and received. To transmit an audio transmission, a computing device may select (e.g., randomly select) one of the audio channels and may transmit the audio transmission using the selected audio channel. The computing device may then wait to receive an acknowledgment of the received audio transmission. If the computing device does receive the acknowledgment, the computing device may determine that the audio transmission was successfully transmitted using the selected channel. If the computing device does not receive the acknowledgment (e.g., within a predetermined period of time), the computing device may determine that the audio transmission was not successfully transmitted. In response, the computing device may select another audio channel and may transmit the audio transmission using the newly-selected audio channel.

FIG.2illustrates an audio transmission200according to an exemplary embodiment of the present disclosure. The audio transmission200may be used to transmit data from one computing device to another computing device. For example, referring toFIG.1, the audio transmission200may be an example implementation of the audio transmissions114,116generated by the computing devices102,104. The audio transmission200includes multiple symbols1-24, which may correspond to discrete time periods within the audio transmission200. For example, each symbol1-24may correspond to 2 ms of the audio transmission200. In other examples, the symbols1-24may correspond to other time periods within the audio transmission200(e.g., 1 ms, 10 ms, 20 ms, 40 ms). Each symbol1-24may include one or more frequencies used to encode information within the audio transmission200. For example, the one or more frequencies may be modulated in order to encode information in the audio transmission200(e.g., certain frequencies may correspond to certain pieces of information). In another example, the phases of the frequencies may be additionally or alternatively be modulated in order to encode information in the audio transmission200(e.g., certain phase differences from a reference signal may correspond to certain pieces of information).

In particular, certain symbols1-24may correspond to particular types of information within the audio transmission200. For example, the symbols1-6may correspond to a preamble202and symbols7-24may correspond to a payload204. The preamble202may contain predetermined symbols produced at predetermined points of time (e.g., by varying one or more of the frequency and the phase in a predetermined way for the frequencies1-6). The preamble202may be used to identify the audio transmission200to a computing device receiving the audio transmission200. For example, a receiver of the computing device receiving audio transmissions such as the audio transmission200may also receive other types of audio data (e.g., audio data from environmental noises and/or audio interference). The preamble202may therefore be configured to identify audio data corresponding to the audio transmission200when received by the receiver of the computing device. In particular, the computing device may be configured to analyze incoming audio data from the receiver and to disregard audio data that does not include the preamble202. Upon detecting the preamble202, the computing device may begin receiving and processing the audio transmission200. The preamble may also be used to align processing of the audio transmission200with the symbols1-24of the audio transmission200. In particular, by indicating the beginning of the audio transmission200, the preamble202may enable the computing device receiving the audio transmission200to properly align its processing of the audio transmission with the symbols1-24.

The payload204may include the data intended for transmission, along with other information enabling proper processing of the data intended for transmission. In particular, the packets208may contain data desired for transmission by the computing device generating the audio transmission200. For example, and referring toFIG.1, the packet208may correspond to the packets118,120which may contain all or part of the data122,124. The header206may include additional information for relevant processing of data contained within the packet208. For example, the header206may include routing information for a final destination of the data (e.g., a server external to the computing device receiving the audio transmission200). The header206may also indicate an originating source of the data (e.g., an identifier of the computing device transmitting the audio transmission200and/or a user associated with the computing device transmitting the audio transmission200).

Symbols1-24and their configuration depicted inFIG.2are merely exemplary. It should be understood that certain implementations of the audio transmission200may use more or fewer symbols, and that one or more of the preamble202, the payload204, the header206, and/or the packet208may use more or fewer symbols than those depicted and may be arranged in a different order or configuration within the audio transmission200.

FIGS.3A-3Billustrate a transmitter/receiver array300according to an exemplary embodiment of the present disclosure. The transmitter/receiver array300may be used to transmit and/or receive audio transmission200. For example, the transmitter/receiver array300may be an exemplary implementation of at least one of the computing devices102,104. The transmitter/receiver array300includes eight receivers302A-H and eight transmitters304A-H. Each of the eight receivers302A-H may be exemplary implementations of the receivers110,112. For example, the eight receivers302A-H may be implemented as microphones. Each of the eight transmitters304A-H may be exemplary implementations of the transmitters106,108. For example, the eight transmitters304A-H may be implemented as speakers.

As depicted, the receivers302A-H and the transmitters304A-H are arranged to evenly cover a 360° area surrounding the transmitter/receiver array300. For example, the receivers302A-H and transmitters304A-H are arranged so that there is approximately 45° between adjacent receivers302A-H and adjacent transmitters304A-H. Such a configuration may enable the transmitter/receiver array300receive audio transmissions200from and transmit audio transmissions200to multiple directions within a coverage area of the transmitter/receiver array300. For example, the transmitter/receiver array300may be configured to receive audio transmissions from multiple computing devices in different portions of a service area.

The receivers302A-H and the transmitters304A-H may be mounted on a support body306. The support body306may allow the transmitter/receiver array300to be positioned and configured without altering the relative orientation of the receivers302A-H and the transmitters304A-H. In certain implementations, the receivers302A-H may be mounted such that the receivers302A-H are separated from the transmitters304A-H (e.g., so that the receivers302A-H can avoid interference from the transmitters304A-H). For example, the receivers302A-H may be mounted on structural members308A-D (only a subset of which are depicted inFIG.3B) that separate the receivers302A-H from the transmitters304A-H. In certain implementations, the transmitter/receiver array300may be mounted on a support element, such as the support element310. The support element310may raise the transmitter/receiver array300from the ground such that the transmitter/receiver array300is at a height better suited to receiving and transmitting audio transmission200(e.g., at or between chest and waist height for a typical individual).

It should be appreciated that additional or alternative implementations of the transmitter/receiver array300are possible. For example, alternative implementations may have more or fewer transmitters and/or receivers and/or may have larger or smaller transmitters and/or receivers. As another example, alternative implementations may omit one or more of the support body306, the structural members308A-D, and/or the support elements310. As yet another example, alternative implementations may further include a housing surrounding the transmitters304A-H and/or receivers302A-H.

FIG.4illustrates a scenario400according to an exemplary embodiment of the present disclosure. In the scenario400, a computing device402is transmitting an audio transmission406to the transmitter/receiver array300. Another computing device404is transmitting an audio transmission408to the transmitter/receiver array300from a different direction, so the audio transmission408may be received by different microphones than the audio transmission406. The scenario400includes a third computing device410transmitting an audio transmission412from the same or similar direction as the computing device402. In instances where the computing devices402,404are transmitting using the same audio channel, the computing device receiving the audio transmissions406,408may still be able to distinguish both audio transmission because the audio transmission406,408were transmitted from different directions and received by different microphones. However, if the audio transmissions406,412are transmitted using the same audio channel, the computing device receiving the audio transmission406,408may be unable to distinguish the audio transmissions because the transmissions are transmitted from similar directions and are therefore received by the same or similar microphones and may interfere with one another. Further, if the audio transmissions406,408are transmitted using different channels, the accuracy of the received audio signals may improve (e.g., because the audio signals406,408are not interfering with one another).

FIG.5illustrates an audio channel distribution500according to an exemplary embodiment of the present disclosure. The audio channel distribution500includes audio channels1-7distributed along a frequency spectrum F1-F15. Each audio channel1-7has a corresponding bandwidth BW1-7. In particular, audio channel1has a bandwidth BW1spanning from F1to F2, audio channel2has a bandwidth BW2spanning from F3to F4, audio channel3has a bandwidth BW3spanning from F5to F6, audio channel4has a bandwidth BW4spanning from F7to F8, audio channel5has a bandwidth BW5spanning from F9to F10, audio channel6has a bandwidth BW6spanning from F11to F12, and audio channel7has a bandwidth BW7spanning from F13to F14. The audio channels1-7may represent a range of carrier frequencies that can be used to transmit audio transmissions. For example, to transmit an audio transmission according to an audio channel1, a computing device may utilize a carrier frequency between F1and F2. In certain implementations, the computing device may use a carrier frequency halfway between F1and F2. As a specific example, where F1is 9.5 kHz and F2is 10.5 kHz, a computing device transmitting an audio transmission using audio channel1may utilize a carrier frequency between 9.8 and 10.2 kHz, such as 10 kHz.

The audio channels1-7are also separated by frequency bands502,504,506,508,510,512. In particular, frequency band502separates audio channels1and2and spans from frequency F2to F3, frequency band504separates audio channels2and3and spans from frequency F4to F5, frequency band506separates audio channels3and4and spans from frequency F6to F7, frequency band508separates audio channels4and5and spans from frequency F8to F9, frequency band510separates audio channels5and6and spans from frequency F10to F11, and frequency band512separates audio channels6and7and spans from frequency F12to F13. The frequency bands502,504,506,508,510,512may separate the audio channels1-7, which may help prevent audio transmissions from interfering with one another. For example, inaccuracies in the transmitters of computing devices (e.g., inaccuracies in the clock synchronization of the computing devices) may result in audio transmissions with inaccurate carrier frequencies (e.g., carrier frequencies that deviate from desired or preferred carrier frequencies within a given audio channel1-7). As another example, interference with an audio transmission (e.g., movement of the computing device while transmitting the audio transmission) may shift or otherwise alter the carrier frequency of the audio transmission when it is received. In either of these instances, the changes to the carrier frequency may cause all or part of the audio transmission to occur outside of a desired audio channel. As a specific example, where a computing device is using audio channel2, the audio transmission may include portions that have a higher frequency than F3and/or a lower frequency than F2. In such instances, if the frequency bands502,504were not separating the audio channel2from the audio channels1,3, the audio transmission may overlap with one of the audio channels1,3, interfering with audio transmissions in the audio channels1,3. Therefore, the frequency bands502,504,506,508,510,512may help improve the accuracy of received transmissions by reducing and/or preventing audio transmission interference across channels.

In certain implementations, the audio channels1-7may have equal bandwidths BW1-7. For example, each of the bandwidths1-7may be 1 kHz wide, although other implementations may also be used (e.g., bandwidths of 500 Hz, 2 kHz, 5 kHz). In additional or alternative implementations, the audio channels1-7may have different bandwidths BW1-7. Additionally, in certain implementations, the frequency bands502,504,506,508,510,512may be of equal width. For example, each of the frequency bands502,504,506,508,510,512may be 1 kHz wide, although other implementations may also be used (e.g., frequency bands of 500 Hz, 2 kHz, 5 kHz). In further implementations, the frequency bands502,504,506,508,510,512may have different widths.

In certain implementations, the bandwidths BW1-7and frequency bands502,504,506,508,510,512may have the same width. For example, the bandwidths BW1-7and frequency bands502,504,506,508,512may all have a width of 1 kHz. In such instances, frequency F1may be 9.5 kHz, frequency F2may be 10.5 kHz, frequency F3may be 11.5 kHz, frequency F4may be 12.5 kHz, frequency F5may be 13.5 kHz, frequency F6may be 14.5 kHz, frequency F7may be 15.5 kHz, frequency F8may be 16.5 kHz, frequency F9may be 17.5 kHz, frequency F10may be 18.5 kHz, frequency F11may be 19.5 kHz, frequency F12may be 20.5 kHz, frequency F13may be 21.5 kHz, and frequency F14may be 22.5 kHz.

It should also be understood that alternative embodiments of the audio channel distribution500may use additional or fewer channels. For example, the alternative implementations may include 10 audio channels. As another example, alternative implementations may include five or six audio channels. In particular, instead of utilizing two audio channels1-2as control channels, only audio channel1may be used as a control channel, which may therefore result in six total audio channels (e.g., audio channel7may not be used). In still further implementations, no control channel may be used, resulting in five total audio channels (e.g., audio channels6,7may not be used).

FIG.6illustrates a system600according to an exemplary embodiment of the present disclosure. The system600may be configured to transmit and receive audio transmissions using multiple audio channels. In particular, the system600includes computing devices602,604, which may be configured to utilize multiple audio channels606,608,610,612,614,616,618to transmit audio transmissions. The computing device604may be an exemplary implementation of a primary computing device configured to receive audio transmissions from multiple other computing devices (e.g., secondary computing devices). For example, the computing device604may be a merchant device connected to a point-of-sale (POS) device and may receive multiple audio transmissions from multiple computing devices receive and process payments. In certain implementations, the computing device604may be connected to a transmitter/receiver array, such as the transmitter/receiver array300, in order to receive and process audio transmissions from multiple computing devices.

The computing device602may be an exemplary implementation of a secondary computing device configured to transmit audio transmissions to the computing device604(e.g., to process payments). In certain implementations, the computing device602may be implemented by one or more of a smartphone, smartwatch, tablet computing device, laptop, or other personal computing device.

Both of the computing devices602,604have audio channels606,608,610,612,614,616,618, which may be utilized to transmit and receive audio transmissions. For example, the audio channels606,608,610,612,614,616,618may respectively be exemplary implementations of the audio channels1-7of the audio channel distribution500. In certain implementations, the computing devices602,604may be configured to transmit and receive audio transmissions using different subsets of the audio channels606,608,610,612,614,616,618. For example, the computing device602may be configured to transmit audio transmissions using one or more of the audio channels610,612,614,616,618and to receive audio transmissions using the audio channels606,608. As another example, the computing device604may be configured to transmit audio transmissions using the audio channels606,608and to receive audio transmissions using the audio channels610,612,614,616,618. In still further implementations, the computing devices602,604may both be configured to transmit and receive audio transmissions using the audio channels608,610,612,614,616,618.

In particular, the computing device604may be configured to transmit a beacon620using the audio channel606. The beacon620may include an identifier (e.g., a unique identifier) of the computing device604. For example, each primary computing device in a system (e.g., an audio transmission system) may be assigned a unique identifier and the computing device604may include its corresponding unique identifier in the beacon620. In certain implementations, the beacon620may also include information regarding channels supported by the computing device604. For example, the beacon may include numeric identifiers of channels (e.g., channels1-7) and/or may include frequency ranges for supported channels. As another example (e.g., where the computing device604is configured to receive audio transmissions in connection with processing payments), the computing device604may communicate with a server (e.g., a payment processing server) before transmitting beacons620and may receive a unique identifier (e.g., a EuroPay®, Mastercard®, Visa® (EMV) value) for use in processing payments and may include the unique identifier in the beacon620for use in generating the audio transmission624. In additional or alternative implementations, the beacon may include a public key (e.g., for use in secure encryption of audio transmission).

The beacon620may be used to indicate to other computing devices602that the computing device604is located nearby and is capable of receiving audio transmissions. In particular, the computing device604may transmit the beacon620at regular intervals (e.g., every 0.5 seconds, 1 second, 2 seconds, 5 seconds) using the audio channel606. Other computing devices may selectively analyze audio signals received via the audio channel606(e.g., audio channels contained between frequencies corresponding to the audio channel606) for the beacon to determine when audio transmissions can be transmitted. For example, the computing device602may need to transmit an audio transmission624and may therefore analyze signals received via the audio channel606.

Upon detecting the beacon620in the audio channel606, the computing device602may determine that the audio transmission624can be transmitted. In particular, because the computing device602received the beacon620, the computing device602may determine that a computing device604capable of receiving audio transmissions624may be located nearby (e.g., within audio transmission range, such as within 10-200 feet). Therefore, the computing device602may select an audio channel610,612,614,616,618for use in transmitting the audio transmission624. In certain implementations, the computing device602may randomly select from among the audio channels610,612,614,616,618that the computing device602is configured use for transmitting audio transmissions624. For example, the computing device602may randomly select the audio channel612as depicted for use in transmitting the audio transmission624. The computing device602may then transmit the audio transmission624using the audio channel612(e.g., by modulating the audio transmission624onto a carrier frequency of the audio channel624) and transmitting the audio transmission using a transmitter of the computing device602.

The computing device604may then receive the audio transmission624via the audio channel612. For example, the computing device604may be configured to regularly analyze audio signals corresponding to each of the audio channels610,612,614,616,618. Upon performing such an analysis, the computing device604may detect the audio transmission624in the audio channel612(e.g., by detecting a preamble202of the audio transmission624). Upon detecting the audio transmission624, the computing device604may perform subsequent processing of the audio transmission624. For example, where the audio transmission624is transmitted to process a payment, the audio transmission624may include an indication of the payment to be processed and the computing device604may proceed with processing the payment (e.g., by interfacing with one or more payment systems and/or servers). Upon completing subsequent processing of the audio transmission624and/or upon receiving the audio transmission624, the computing device604may generate an acknowledgment622. In certain implementations, the acknowledgment622may include an identifier of the audio transmission624, such as a unique identifier included within the audio transmission624(e.g., a unique identifier of the audio transmission624and/or a computing device602that is the source of the audio transmission624). In further implementations, the acknowledgment622may include performance information for a received audio transmission624(e.g., a signal-to-noise ratio for the audio transmission624, a total processing time for the audio transmission624). As another example, the acknowledgment622may be generated in response to data included within the audio transmission624(e.g., based on subsequent processing of the data). For example, the data may include data for authentication of a user associated with the source of the audio transmission624and the acknowledgment may be transmitted to indicate that authentication using the data was successful. The computing device604may then transmit the acknowledgment622using the audio channel608(e.g., by modulating the acknowledgment622onto a carrier signal of the audio channel608).

In certain instances, the computing device604may receive another audio transmission626from another computing device (e.g., from another secondary computing device similar to the computing device602). As depicted, the audio transmission626may be received along an audio channel616different from the audio channel612along which the audio transmission624was received. In such instances, upon detecting the audio transmission626, the computing device604may generate a second acknowledgment using techniques similar to those discussed above in connection with the acknowledgment622. The second acknowledgment may similarly be transmitted using the audio channel608. In certain instances, the acknowledgments may be transmitted in a sequence determined based on the order in which the audio transmissions624,626are received. For example, if the audio transmission624is received before the audio transmission626, the acknowledgment622may be transmitted using the audio channel608before the second acknowledgment corresponding to the audio transmission626is transmitted. In additional or alternative instances, the acknowledgments622may be transmitted in a sequence determined based on the order in which the audio transmissions624,626are processed. For example, the audio transmission624may be received before the audio transmission626, but processing of the audio transmission626may be completed before completing processing of the audio transmission624. Accordingly, the second acknowledgment corresponding to the audio transmission626may be transmitted before the acknowledgment622.

The computing device602may then receive the acknowledgment622via the audio channel608(e.g., by analyzing audio signals within the frequency range corresponding to the audio channel608). For example, after transmitting the audio transmission624, the computing device602may analyze audio signals corresponding to the audio channel608in order to detect the acknowledgment622. Upon receiving and detecting acknowledgment622, the computing device602may verify that the acknowledgment622is transmitted in response to the audio transmission624. For example, as described above, the acknowledgment622may be generated to include a unique identifier of the audio transmission624and/or to include a unique identifier generated based on the audio transmission624. The computing device602may therefore analyze the unique identifier included within the acknowledgment622in order to verify that the acknowledgment622is transmitted in response to the audio transmission624. As described above, the computing device604may receive multiple audio transmissions624,626and may transmit different acknowledgments based on each audio transmission624,626. In certain instances, acknowledgments for different audio transmission626may be transmitted using the same audio channel608, therefore, the computing device602may, in certain instances, detect an acknowledgment transmitted in response to an audio transmission626other than the audio transmission624transmitted by the computing device602. Therefore, it may be necessary to verify that received acknowledgments622were transmitted in response to the audio transmission624transmitted by the computing device602.

If the computing device602successfully verifies that the acknowledgment622, the computing device602may determine that the audio transmission624was successfully received by the computing device604. If the computing device602does not successfully verify the acknowledgment622, the computing device602may determine that the audio transmission624was not successfully received. For example, in certain implementations, the computing device602may be configured to wait for a predetermined period of time (e.g., one second, two seconds, five seconds, 10 seconds) for an acknowledgment622from the computing device604. In certain implementations, the computing device602may be configured to wait for the duration of the audio transmission624plus an expected duration of the beacon620and/or the acknowledgment622. While waiting for the predetermined period of time, the computing device602may analyze audio signals corresponding to the audio channel608for an acknowledgment622transmitted in response to the audio transmission624. If no such acknowledgment622is received during the predetermined period of time, the computing device602may determine that the audio transmission624was not successfully received by the computing device604. For example, if the audio transmission626is transmitted using the same audio channel612as the audio transmission624(e.g., because the second computing device randomly selected the same audio channel612as the computing device602), the audio transmissions624,626may interfere with one another as described above. Due to the interference, the computing device604may be unable to detect and/or successfully process the audio transmission624,626and may therefore transmit no acknowledgment622via the audio channel608. Accordingly, the computing device602may not receive an acknowledgment622and may accordingly determine that the audio transmission624was not successfully transmitted.

In response to determining that the audio transmission624was not successfully transmitted, the computing device602may transmit the audio transmission624again. In particular, the computing device602may select another audio channel610,612,614,616,618for transmission of the audio transmission624a second time. In certain instances, the computing device602may again randomly select the audio channel610,612,614,616,618. In still further implementations, the computing device602may exclude the audio channel612that was unsuccessfully used to transmit the audio transmission624the first time from the random selection process. For example, while retransmitting the audio transmission624, the computing device602may randomly select between the audio channels610,614,616,618. In particular, upon determining that the audio transmission624was not successfully transmitted using the audio channel612, the computing device602may store an indication that the audio channel612should not be used to transmit audio transmissions for a predetermined period of time (e.g., five seconds, 10 seconds, 30 seconds, one minute).

The computing device602may repeat the above-described process a predetermined number of times. For example, the computing device602may be configured to transmit and/or re-transmit the audio transmission624for up to a predetermined number of attempts (e.g., three attempts, four attempts, five attempts). If the audio transmission624is not successfully transmitted in the predetermined number of attempts, the computing device602may determine that the audio transmission624cannot be transmitted under the current conditions (e.g., because too many other computing devices are transmitting audio transmissions to the computing device604and/or because the computing device602has moved too far away from the computing device604). In such instances, the computing device602may generate and display an error message, e.g., to a user of the computing device602. The error message may indicate that audio transmissions are not available under the current conditions and that, if possible, other techniques should be used to transmit the information required. For example, where user is transmitting the audio transmission624to process a payment, the error message may indicate that the user should use alternative payment systems (e.g., physical credit cards).

In the examples discussed above, the computing device604is configured to transmit using two audio channels606,608: one audio channel606for transmission of beacons620and another audio channel608for transmission of acknowledgments622. In certain implementations, it should be understood that more or fewer audio channels may be used by the computing device604for transmission of audio transmissions (e.g., beacons and/or acknowledgments). For example, the computing device604may use a single audio channel606for transmission of both beacons620and acknowledgments622. As a specific example, the computing device604may typically transmit beacons at regular intervals using the audio channel606, but may refrain from transmitting a beacon620when an acknowledgment622needs to be transmitted and may transmit the acknowledgment622using the audio channel606.

As a further example, the computing device604may use the audio channels610,612,614,616,618for transmission of beacons620and/or acknowledgments622(e.g., by randomly selecting an audio channel610,612,614,616,618using techniques similar to those discussed above). In additional or alternative implementations, the computing device604may transmit the acknowledgment622using the same audio channel612on which the audio transmission624was received from another device602. For example, in response to receiving the audio transmission624, the computing device604may generate and transmit the acknowledgment622on the audio channel612, instead of the audio channel608. In such implementations, the audio channel608may instead be used for communication with other computing devices, increasing the overall audio communication bandwidth for the computing device604.

Furthermore, responding on the same audio channel612may reduce the overall time that the computing device602needs to wait in order to receive the acknowledgment622. In particular, when a single audio channel608is used to transmit acknowledgments622, a computing device602may be required to wait for a duration of the audio transmission624that was transmitted plus an additional duration for the beginning620and/or acknowledgment622audio transmissions. In practice, audio transmissions624may contain more data, and therefore be longer in duration, and the audio transmissions used to transmit the beginning620and/or acknowledgments622. Accordingly, having to wait for this additional time may substantially increase the overall idle time of the computing device602while the computing device602waits for an acknowledgment622from the computing device604, reducing overall audio communication bandwidth between the computing devices602,604.

By contrast, by transmitting acknowledgments622within the same audio channel612in which audio transmission624were received, the computing device604may be able to communicate with (e.g., transmit acknowledgments622to) multiple computing devices. In particular, the computing device604may be able to transmit multiple acknowledgments622at least partially at the same time on different audio channels608,610,612,614,616,618. Accordingly, computing devices602may be configured to wait for shorter predetermined periods of time. For example, computing device602may be configured to wait for a predetermined period of time that is a multiple of an expected duration of the acknowledgment622. In particular, the acknowledgment622may have expected data contents with a predefined expected duration and/or or expected maximum duration based on maximum data contents that can be included within the acknowledgment622. The computing device602may accordingly wait for a multiple of the expected duration (e.g., 2× the expected duration, 4× the expected duration, 5× the expected duration, 8× the expected duration, 10× the expected duration) to receive the acknowledgment622and determine whether the audio transmission624is received.

In practice, this waiting period may be substantially shorter (e.g., 100 ms or less) than a typical waiting period for receiving and acknowledgment622from a common audio channel608(e.g., approximately one second). This waiting period may be even further reduced by omitting data payloads from the acknowledgment622, further shortening the expected duration for the acknowledgment622. In particular, because the acknowledgment622is transmitted on the same audio channel612is the audio transmission624, it may not be necessary to indicate or specifically identify the particular audio transmission624that was received by the computing device604. Accordingly, by virtue of receiving the acknowledgment622and the same audio channel612, the computing device602may determine that the audio transmission624was successfully received by the computing device604without needing further information.

In still further implementations, the computing device604may use more than one audio channel608to transmit acknowledgments622. For example, the computing device604may include two or more audio channels for transmitting acknowledgments622. As a specific example, the computing device604may use one audio channel to transmit the acknowledgment622in response to the audio transmission624and may use another channel to transmit the second acknowledgment in response to the audio transmission626. In such implementations, the computing device602may be configured to analyze both audio channels for the acknowledgment622. In certain implementations, the audio channels606,608used by the computing device604may additionally or alternatively be used for other purposes beyond transmitting beacons and receiving acknowledgments. For example, the audio channels606,608may be used to transmit and/or receive information regarding one or more of services available from the computing device604, audio channels supported by the computing device604, data rates supported by the computing device604, encryption techniques supported by the computing device604, information regarding current communication performance between the computing devices602,604, and rate negotiations (e.g., negotiation of communication speeds required) for communication between the computing devices602,604.

FIG.7illustrates a method700according to an exemplary embodiment of the present disclosure. The method700may be performed to select between multiple audio channels for transmission of an audio transmission. For example, the method700may be performed by the computing device602to select an audio channel610,612,614,616,618for transmission of the audio transmission624. The method700may be implemented on a computer system, such as the system600. The method700may also be implemented by a set of instructions stored on a computer readable medium that, when executed by a processor, cause the computer system to perform the method700. For example, all or part of the method700may be implemented by a processor and/or memory of the computing device602. Although the examples below are described with reference to the flowchart illustrated inFIG.7, many other methods of performing the acts associated withFIG.7may be used. For example, the order of some of the blocks may be changed, certain blocks may be combined with other blocks, one or more of the blocks may be repeated, and some of the blocks described may be optional.

The method700may begin with selecting a first audio channel (block702). For example, the computing device602may select a first audio channel612. In particular, the computing device602may be configured to transmit using one or more audio channels610,612,614,616,618, which may each correspond to a particular frequency range. The computing device602may be configured to randomly select between the audio channels610,612,614,616,618. For example, the computing device602may randomly select the audio channel612, which may correspond to a frequency range of 15.5 kHz-16.5 kHz.

A first audio transmission may be transmitted using the first audio channel (block704). For example, the computing device602may transmit the first audio transmission624using the first audio channel612. To transmit the first audio transmission, the computing device602may modulate the audio transmission624onto a carrier frequency associated with the audio channel612. As described above, the carrier frequency corresponding to an audio channel may include a middle frequency and/or middle range of frequencies within the frequency range of the audio channel. As a specific example, the carrier frequency for the audio channel612may be 16 kHz and/or may be 15.9-16.1 kHz. The computing device602may transmit the audio transmission624modulated onto the carrier frequency of the audio channel612using a transmitter of the computing device602. For example, where the computing device602is a smartphone, the computing device602may transmit the audio transmission624modulated onto the carrier frequency using a speaker included within the smartphone.

The computing device may wait for a second audio transmission (block706). The second audio transmission may be transmitted by a primary computing device604configured to receive the first audio transmission. The primary computing device604may be configured to generate and transmit a second type of audio transmission (e.g., an acknowledgment622) in response to receiving audio transmissions624from computing devices such as the computing device602. Accordingly, the computing device602may wait for the second audio transmission from the computing device604to indicate that the audio transmission624was successfully received by the computing device604. In particular, the computing device602may wait to receive the second audio transmission along one or more separate, predetermined audio channels used by the computing device604to transmit audio transmissions, such as the audio channel608. In further implementations, the computing device602may wait to receive the second audio transmission on the same audio channel612that was used to transmit the first audio transmission624. In certain implementations, the computing device602may be configured to wait for the second audio transmission for a predetermined period of time (e.g., a multiple of an expected duration of the acknowledgment622, one second, two seconds, five seconds, 10 seconds).

The computing device602may then determine whether the second audio transmission is received (block708). For example, the computing device602may receive a second audio transmission (e.g., an acknowledgment622) from the computing device604(e.g., via the audio channel608). Upon receiving such an audio transmission, the computing device602may verify that the second audio transmission was transmitted in response to receiving the audio transmission624, as discussed above. If the computing device602successfully verifies the second audio transmission, the computing device602may determine that the second audio transmission is received. In implementations where the second audio transmission is transmitted on the same audio channel as the first audio channel, the computing device602may determine that the second audio transmission was received based on receiving an audio transmission on the same audio channel without having to analyze the contents of the second audio transmission.

In response, the computing device602may determine that the first audio transmission was successfully transmitted (block710). For example, the computing device602may determine that the audio transmission624was successfully transmitted to the computing device604using the first audio channel612. In certain implementations, when the computing device602needs to subsequently transmit a new audio transmission (e.g., at a later time), the computing device602may repeat the method700to select an audio channel for use in transmitting the new audio transmission.

If the computing device602does not successfully verify the second audio transmission, the computing device602may continue waiting for a second audio transmission as discussed above in connection with the block706. For example, the computing device602may continue waiting for up to the predetermined period of time to receive a second audio transmission that is successfully verified. If, after the predetermined period of time, the computing device602has not received a second audio transmission and/or has not successfully verified a received audio transmission, the computing device602may determine that the second audio transmission was not received. Therefore, as discussed above, the computing device602may determine that the audio transmission624was not successfully transmitted to the computing device604using the first audio channel612. Accordingly, the computing device602may return to block702to select and transmit the audio transmission624using a second audio channel (e.g., a randomly-selected second audio channel).

By performing the method700, the computing device602may be able to transmit audio transmissions using multiple audio channels while also responsively switching audio channels when other channels are in use by other computing devices. Furthermore, by randomly selecting audio channels to transmit the audio transmissions, the method700reduces the risk of multiple computing devices selecting the same audio channel. Accordingly, the method700may enable multiple computing devices602to communicate with the same computing device604using audio transmissions at the same time while also reducing the number of audio transmissions that need to be rebroadcast using alternative audio channels. Such techniques accordingly increase the overall system bandwidth and audio transmission throughput for the computing device604, reducing the number of primary computing devices604required to receive and process audio transmissions624,626from computing devices602. Additionally, the method700enables the computing devices602,604to communicate using multiple channels in a manner that is compatible with audio transmissions containing data, unlike previous channel selection protocols, such as TDMA.

FIG.8illustrates an example computer system800that may be utilized to implement one or more of the devices and/or components ofFIG.1, such as the computing devices102,104,602,604. In particular embodiments, one or more computer systems800perform one or more steps of one or more methods described or illustrated herein. In particular embodiments, one or more computer systems800provide the functionalities described or illustrated herein. In particular embodiments, software running on one or more computer systems800performs one or more steps of one or more methods described or illustrated herein or provides the functionalities described or illustrated herein. Particular embodiments include one or more portions of one or more computer systems800. Herein, a reference to a computer system may encompass a computing device, and vice versa, where appropriate. Moreover, a reference to a computer system may encompass one or more computer systems, where appropriate.

This disclosure contemplates any suitable number of computer systems800. This disclosure contemplates the computer system800taking any suitable physical form. As example and not by way of limitation, the computer system800may be an embedded computer system, a system-on-chip (SOC), a single-board computer system (SBC) (such as, for example, a computer-on-module (COM) or system-on-module (SOM)), a desktop computer system, a laptop or notebook computer system, an interactive kiosk, a mainframe, a mesh of computer systems, a mobile telephone, a personal digital assistant (PDA), a server, a tablet computer system, an augmented/virtual reality device, or a combination of two or more of these. Where appropriate, the computer system800may include one or more computer systems800; be unitary or distributed; span multiple locations; span multiple machines; span multiple data centers; or reside in a cloud, which may include one or more cloud components in one or more networks. Where appropriate, one or more computer systems800may perform without substantial spatial or temporal limitation one or more steps of one or more methods described or illustrated herein. As an example and not by way of limitation, one or more computer systems800may perform in real time or in batch mode one or more steps of one or more methods described or illustrated herein. One or more computer systems800may perform at different times or at different locations one or more steps of one or more methods described or illustrated herein, where appropriate.

In particular embodiments, computer system800includes a processor806, memory804, storage808, an input/output (I/O) interface810, and a communication interface812. Although this disclosure describes and illustrates a particular computer system having a particular number of particular components in a particular arrangement, this disclosure contemplates any suitable computer system having any suitable number of any suitable components in any suitable arrangement.

In particular embodiments, the processor806includes hardware for executing instructions, such as those making up a computer program. As an example and not by way of limitation, to execute instructions, the processor806may retrieve (or fetch) the instructions from an internal register, an internal cache, memory804, or storage808; decode and execute the instructions; and then write one or more results to an internal register, internal cache, memory804, or storage808. In particular embodiments, the processor806may include one or more internal caches for data, instructions, or addresses. This disclosure contemplates the processor806including any suitable number of any suitable internal caches, where appropriate. As an example and not by way of limitation, the processor806may include one or more instruction caches, one or more data caches, and one or more translation lookaside buffers (TLBs). Instructions in the instruction caches may be copies of instructions in memory804or storage808, and the instruction caches may speed up retrieval of those instructions by the processor806. Data in the data caches may be copies of data in memory804or storage808that are to be operated on by computer instructions; the results of previous instructions executed by the processor806that are accessible to subsequent instructions or for writing to memory804or storage808; or any other suitable data. The data caches may speed up read or write operations by the processor806. The TLBs may speed up virtual-address translation for the processor806. In particular embodiments, processor806may include one or more internal registers for data, instructions, or addresses. This disclosure contemplates the processor806including any suitable number of any suitable internal registers, where appropriate. Where appropriate, the processor806may include one or more arithmetic logic units (ALUs), be a multi-core processor, or include one or more processors806. Although this disclosure describes and illustrates a particular processor, this disclosure contemplates any suitable processor.

In particular embodiments, the memory804includes main memory for storing instructions for the processor806to execute or data for processor806to operate on. As an example, and not by way of limitation, computer system800may load instructions from storage808or another source (such as another computer system800) to the memory804. The processor806may then load the instructions from the memory804to an internal register or internal cache. To execute the instructions, the processor806may retrieve the instructions from the internal register or internal cache and decode them. During or after execution of the instructions, the processor806may write one or more results (which may be intermediate or final results) to the internal register or internal cache. The processor806may then write one or more of those results to the memory804. In particular embodiments, the processor806executes only instructions in one or more internal registers or internal caches or in memory804(as opposed to storage808or elsewhere) and operates only on data in one or more internal registers or internal caches or in memory804(as opposed to storage808or elsewhere). One or more memory buses (which may each include an address bus and a data bus) may couple the processor806to the memory804. The bus may include one or more memory buses, as described in further detail below. In particular embodiments, one or more memory management units (MMUs) reside between the processor806and memory804and facilitate accesses to the memory804requested by the processor806. In particular embodiments, the memory804includes random access memory (RAM). This RAM may be volatile memory, where appropriate. Where appropriate, this RAM may be dynamic RAM (DRAM) or static RAM (SRAM). Moreover, where appropriate, this RAM may be single-ported or multi-ported RAM. This disclosure contemplates any suitable RAM. Memory804may include one or more memories804, where appropriate. Although this disclosure describes and illustrates particular memory implementations, this disclosure contemplates any suitable memory implementation.

In particular embodiments, the storage808includes mass storage for data or instructions. As an example and not by way of limitation, the storage808may include a hard disk drive (HDD), a floppy disk drive, flash memory, an optical disc, a magneto-optical disc, magnetic tape, or a Universal Serial Bus (USB) drive or a combination of two or more of these. The storage808may include removable or non-removable (or fixed) media, where appropriate. The storage808may be internal or external to computer system800, where appropriate. In particular embodiments, the storage808is non-volatile, solid-state memory. In particular embodiments, the storage808includes read-only memory (ROM). Where appropriate, this ROM may be mask-programmed ROM, programmable ROM (PROM), erasable PROM (EPROM), electrically erasable PROM (EEPROM), electrically alterable ROM (EAROM), or flash memory or a combination of two or more of these. This disclosure contemplates mass storage808taking any suitable physical form. The storage808may include one or more storage control units facilitating communication between processor806and storage808, where appropriate. Where appropriate, the storage808may include one or more storages808. Although this disclosure describes and illustrates particular storage, this disclosure contemplates any suitable storage.

In particular embodiments, the I/O Interface810includes hardware, software, or both, providing one or more interfaces for communication between computer system800and one or more I/O devices. The computer system800may include one or more of these I/O devices, where appropriate. One or more of these I/O devices may enable communication between a person (i.e., a user) and computer system800. As an example and not by way of limitation, an I/O device may include a keyboard, keypad, microphone, monitor, screen, display panel, mouse, printer, scanner, speaker, still camera, stylus, tablet, touch screen, trackball, video camera, another suitable I/O device or a combination of two or more of these. An I/O device may include one or more sensors. Where appropriate, the I/O Interface810may include one or more device or software drivers enabling processor806to drive one or more of these I/O devices. The I/O interface810may include one or more I/O interfaces810, where appropriate. Although this disclosure describes and illustrates a particular I/O interface, this disclosure contemplates any suitable I/O interface or combination of I/O interfaces.

In particular embodiments, communication interface812includes hardware, software, or both providing one or more interfaces for communication (such as, for example, packet-based communication) between computer system800and one or more other computer systems800or one or more networks814. As an example and not by way of limitation, communication interface812may include a network interface controller (NIC) or network adapter for communicating with an Ethernet or any other wire-based network or a wireless NIC (WNIC) or wireless adapter for communicating with a wireless network, such as a Wi-Fi network. This disclosure contemplates any suitable network814and any suitable communication interface812for the network814. As an example and not by way of limitation, the network814may include one or more of an ad hoc network, a personal area network (PAN), a local area network (LAN), a wide area network (WAN), a metropolitan area network (MAN), or one or more portions of the Internet or a combination of two or more of these. One or more portions of one or more of these networks may be wired or wireless. As an example, computer system800may communicate with a wireless PAN (WPAN) (such as, for example, a Bluetooth® WPAN), a WI-FI network, a WI-MAX network, a cellular telephone network (such as, for example, a Global System for Mobile Communications (GSM) network), or any other suitable wireless network or a combination of two or more of these. Computer system800may include any suitable communication interface812for any of these networks, where appropriate. Communication interface812may include one or more communication interfaces812, where appropriate. Although this disclosure describes and illustrates a particular communication interface implementations, this disclosure contemplates any suitable communication interface implementation.

The computer system802may also include a bus. The bus may include hardware, software, or both and may communicatively couple the components of the computer system800to each other. As an example and not by way of limitation, the bus may include an Accelerated Graphics Port (AGP) or any other graphics bus, an Enhanced Industry Standard Architecture (EISA) bus, a front-side bus (FSB), a HYPERTRANSPORT (HT) interconnect, an Industry Standard Architecture (ISA) bus, an INFINIBAND interconnect, a low-pin-count (LPC) bus, a memory bus, a Micro Channel Architecture (MCA) bus, a Peripheral Component Interconnect (PCI) bus, a PCI-Express (PCIe) bus, a serial advanced technology attachment (SATA) bus, a Video Electronics Standards Association local bus (VLB), or another suitable bus or a combination of two or more of these buses. The bus may include one or more buses, where appropriate. Although this disclosure describes and illustrates a particular bus, this disclosure contemplates any suitable bus or interconnect.

Herein, a computer-readable non-transitory storage medium or media may include one or more semiconductor-based or other types of integrated circuits (ICs) (e.g., field-programmable gate arrays (FPGAs) or application-specific ICs (ASICs)), hard disk drives (HDDs), hybrid hard drives (HHDs), optical discs, optical disc drives (ODDs), magneto-optical discs, magneto-optical drives, floppy diskettes, floppy disk drives (FDDs), magnetic tapes, solid-state drives (SSDs), RAM-drives, SECURE DIGITAL cards or drives, any other suitable computer-readable non-transitory storage media, or any suitable combination of two or more of these, where appropriate. A computer-readable non-transitory storage medium may be volatile, non-volatile, or a combination of volatile and non-volatile, where appropriate.

Herein, “or” is inclusive and not exclusive, unless expressly indicated otherwise or indicated otherwise by context. Therefore, herein, “A or B” means “A, B, or both,” unless expressly indicated otherwise or indicated otherwise by context. Moreover, “and” is both joint and several, unless expressly indicated otherwise or indicated otherwise by context. Therefore, herein, “A and B” means “A and B, jointly or severally,” unless expressly indicated otherwise or indicated otherwise by context.

The scope of this disclosure encompasses all changes, substitutions, variations, alterations, and modifications to the example embodiments described or illustrated herein that a person having ordinary skill in the art would comprehend. The scope of this disclosure is not limited to the example embodiments described or illustrated herein. Moreover, although this disclosure describes and illustrates respective embodiments herein as including particular components, elements, features, functions, operations, or steps, any of these embodiments may include any combination or permutation of any of the components, elements, features, functions, operations, or steps described or illustrated anywhere herein that a person having ordinary skill in the art would comprehend. Furthermore, reference in the appended claims to an apparatus or system or a component of an apparatus or system being adapted to, arranged to, capable of, configured to, enabled to, operable to, or operative to perform a particular function encompasses that apparatus, system, component, whether or not it or that particular function is activated, turned on, or unlocked, as long as that apparatus, system, or component is so adapted, arranged, capable, configured, enabled, operable, or operative. Additionally, although this disclosure describes or illustrates particular embodiments as providing particular advantages, particular embodiments may provide none, some, or all of these advantages.

All of the disclosed methods and procedures described in this disclosure can be implemented using one or more computer programs or components. These components may be provided as a series of computer instructions on any conventional computer readable medium or machine readable medium, including volatile and non-volatile memory, such as RAM, ROM, flash memory, magnetic or optical disks, optical memory, or other storage media. The instructions may be provided as software or firmware, and may be implemented in whole or in part in hardware components such as ASICs, FPGAs, DSPs, or any other similar devices. The instructions may be configured to be executed by one or more processors, which when executing the series of computer instructions, performs or facilitates the performance of all or part of the disclosed methods and procedures.

It should be understood that various changes and modifications to the examples described here will be apparent to those skilled in the art. Such changes and modifications can be made without departing from the spirit and scope of the present subject matter and without diminishing its intended advantages. It is therefore intended that such changes and modifications be covered by the appended claims.