Aspects of the disclosure generally relate to digital signal processing. More specifically, aspects of this disclosure relate to methods, devices, and systems for modification of sampling rates corresponding to digital signals.
Digitization of an analog signal (e.g., an audio signal and/other any other continuous-time signal) is often a first step prior to additional signal processing, storage, and/or transmission. Signal digitization may comprise a sampling step in which an analog signal may be sampled, at a specific sampling rate (also known as sampling frequency), to generate a series of data samples that together represent magnitudes of the analog signal as observed at specified times instances. Sampling of an analog signal may be followed by a quantization step by which the values of the data points may be rounded off to a nearest quantized level. Digital signal processing and/or communication may comprise one or more additional processes such as filtering, encoding, modulation, packetization, demodulation, decoding, etc.
A signal processor (e.g., at a receiving device) may receive and process digital signals that are generated based on a specific sampling rate. However, in many scenarios, the signal processor may operate at a sampling rate that is different from a sampling rate used to generate the digital signals. For example, the signal processor may process received samples at a higher (or lower) rate than a rate used to generate the samples at a transmitting device. Mismatched sampling rates may result in signal distortion and/or buffer overflow/underflow at the receiving device. To ensure synchronization between the two devices, a sampling rate converter may be used to convert, without loss of information, digital data corresponding to a first sampling rate to digital data corresponding to a second sampling rate.
The following summary presents a simplified summary of certain features. The summary is not an extensive overview and is not intended to identify key or critical elements.
Various examples herein describe digital signal processing to change a sampling rate of digital data. The sampling rate change may be performed using an asynchronous sampling rate converter (ASRC). The ASRC may perform sampling rate conversion based on a ratio of a input data packet rate (e.g., packet write rate) used for generation of the digital data and a output data packet rate (e.g., packet read rate) at a buffer storing converted digital data. For example, the ASRC may determine, based on time stamps associated with packets of a data signal, the packet write rate associated with input data packets. The ASRC may determine, based on a local clock, the packet read rate associated with output data packets. The ASRC may determine, based on a ratio of the packet write rate and the packet read rate, a rate control value. The ASRC may generate, based on the rate control value, a first quantity of output data samples (e.g., in one or more output data packets) based on a second quantity of input data samples (e.g., in one or more input data packets). For example, a polyphase interpolator may be used for the generation of output data samples based on input data samples. A rate of generation of the first quantity of output data samples may correspond to the packet read rate.
Additional aspects herein describe the use an interpolation technique to determine filter coefficients for a polyphase interpolator in scenarios where the rate control value is not an integer ratio. Further, a phase-locked loop (PLL) or other control loop may be used to adjust the rate control value at an appropriate level to negate the effects of temperature variations and/or noise on the sampling rate/sample read-out rate.
These and other features and advantages are described in greater detail below.
The present disclosure is illustrated by way of example and not limited in the accompanying figures in which like reference numerals indicate similar elements and in which:
In the following description of various illustrative embodiments, reference is made to the accompanying drawings, which form a part hereof, and in which is shown, by way of illustration, various embodiments in which aspects of the disclosure may be practiced. It is to be understood that other embodiments may be utilized, and structural and functional modifications may be made, without departing from the scope of the present disclosure. It is noted that various connections between elements are discussed in the following description. It is noted that these connections are general and, unless specified otherwise, may be direct or indirect, wired or wireless, and that the specification is not intended to be limiting in this respect.
As described above, sampling rate converters may be used to modify a sampling rate of digital data. For example, samples of digital data corresponding to a first sampling rate (e.g., as generated at a transmitter) may be processed to generate samples, of the same digital data, at a second sampling rate (e.g., at a receiver). The second sampling rate may be a rate at which the samples may be processed at the receiver. A hardware-based approach may be used for sampling rate conversion. Such a hardware-based approach may require the use of additional synchronization hardware to ensure that the transmitter and the receiver operate at a same frequency and hence utilize a same sampling rate. The requirement of additional synchronization hardware may add to cost and complexity of a sampling rate conversion system.
Various examples herein describe the use of a software-based approach for sampling rate conversion. The software-based approach may apply asynchronous sampling rate conversion techniques as described herein which may enable elimination of separate synchronization hardware in the sampling rate conversion process. For example, an asynchronous sampling rate converter (ASRC) may use time stamps as included in packets (e.g., as received from a transmitter) or generated by the receiver upon reception of said packets to determine a packet write rate as used for generation of the packets. Additionally, the ASRC may use local times associated with output packets (e.g., as output by the ASRC) being read out from a buffer to determine a packet read rate used at the receiver. The ASRC may determine a rate control value based on the packet write rate used for generation of packets and the packet read rate used at the receiver. The rate control value may be used to control operation of a rate conversion module (e.g., comprising a polyphase interpolator). The rate conversion module may perform the sampling rate conversion to generate output samples using input samples. A clock used for generation of packet time stamps need not be synchronized with the clock used for determining the local times associated with packets being written. Not requiring any separate synchronization hardware may simplify the sampling rate conversion process and may provide additional flexibility.
Additional examples herein describe techniques to achieve sampling rate conversion with arbitrary ratios or ratios that cannot be resolved as integer ratios at the ASRC. Specifically, coefficients of subfilters of a polyphase interpolator may be determined using coefficient interpolation techniques based on a Taylor's series algorithm. A phase-locked loop (PLL) or other control loop may dynamically adjust the rate control value to accommodate the effects of temperature variations, noise, or any other variations in the system on the sampling rate used for packet generation and/or the sampling rate used at the receiver.
Further, while the example digital system 100 illustrates the use of a transmitter 125 and a receiver 130, the components/modules included in the transmitter 125 and the receiver 130 may similarly function in other devices that generate and process digital data (e.g., without transmission/reception of the digital data). For example, one or more of the components shown in the transmitter 125 may operate similarly in a digital signal generation device that generates and stores digital data in memory. One or more components shown in the receiver 130 may operate similarly in a digital signal processing device that retrieves digital data stored in memory, performs sampling rate conversion of the digital data, and/or generates analog data based on resampled digital data.
Further, while the example digital system 100 illustrates the conversion between digital signals and analog signals, in other examples, the digital system 100 may operate purely on digital data without using any conversion. For example, a data source 102 may be a digital audio source and/or a data sink 120 may be a digital audio sink. In this scenario, the data converters 104 and 118 need not be used.
The transmitter 125 may comprise at least a data source 102, a data converter 104, a codec encoder 106, and/or a network buffer 108. In an example, the data source 102 may be a standalone device separate from the rest of the components of the transmitter 125. The data converter 104 may comprise an analog to digital converter (ADC) that performs various operations (e.g., sampling, quantization, etc.) to generate samples (e.g., digital data) corresponding to the analog input. The data converter 104 may convert the analog input into data samples at a corresponding first sampling rate. The codec encoder 106 may encode the generated data samples into a digital stream of data packets for transmission. For example, each data packet may comprise one or more encoded data samples. The network buffer 108 may comprise memory (e.g., a first-in first-out (FIFO) register) in which the data packets may be stored prior to transmission via a communication channel 110. The communication channel 110 may comprise a wired communication channel, and/or a wireless communication channel, via which the data packets may be transmitted to the receiver 130. In an example, the data source 102 may comprise a microphone and/or any other device (e.g., an analog memory storage device, such as a magnetic tape cassette or a long playing (LP) record) providing analog input, and the data packets may comprise audio data.
The receiver 130 may comprise a network buffer 112, a codec decoder 114, an asynchronous sampling rate converter 116, a data converter 118, and/or a data sink 120. The network buffer 112 may comprise memory that may be used to store incoming data packets prior to processing by the rest of the components of the receiver 130. The codec decoder 114 may process/decode the received data packets to retrieve data sample(s) stored within the data packets. The asynchronous sampling rate converter (ASRC) 116 may be used to generate, from the received data samples, another set of data samples at a second sampling rate. The second sampling rate may be the same as, or different (e.g., higher, or lower) from, the first sampling rate. The second sampling rate may be a sampling rate that may be processed by the data converter 118. The data converter 118 may comprise a digital to analog converter (DAC) that converts the data samples (at the second sampling rate) into an analog output. The analog output may be provided to the data sink 120. In an example, the data sink may be an audio playback device (e.g., speaker, headphones, etc.) and/or may be any other device (e.g., an analog memory storage device, such as a magnetic tape cassette or an LP record). Additionally, or alternatively, the data samples (at the second sampling rate) may be sent to another digital device/network (e.g., without conversion to an analog signal).
The generated output packets may be stored in the circular buffer 208. Packets may be stored in and read-out from the circular buffer 208 at different rates. For example, a packet read rate Sout may be fixed, while the rate at which generated packets are stored in the circular buffer 208 may vary (e.g., based on parameters of the rate conversion module 204). As further described herein, parameters of the rate conversion module 204 may be modified such that the rate of generation/storage of packets (e.g., by the rate conversion module 204) matches the packet read rate Sout. A packet read rate Sout may be based on a rate at which the data converter 118 operates and may be equal to a rate at which packets are read-out of the circular buffer 208 (e.g., output buffer) by the data converter 118. The data converter 118 may retrieve the output packets from the circular buffer 208 and generate output data (e.g., as described with reference to
Each of the input packets may comprise one or more input samples 220. Each of the output packets may comprise one or more output samples 224. Each of the input packets and the output packets may comprise a same quantity of samples.
A ratio of a quantity of output samples 224, generated by the rate conversion module 204, to a corresponding quantity of input samples 220 (used to generate the output samples 224) may be based on a rate control value determined by the rate control determination module 212. The rate control determination module 212, by determining the appropriate rate control value, may ensure that the circular buffer 208 does not overflow or underflow, and a fill level of the circular buffer 208 remains stably bounded. Overflow may occur due to packets being stored in the circular buffer 208 at a faster rate than the output sampling rate. Underflow may occur due to samples being stored in the circular buffer 208 at a slower rate than the output sampling rate.
The rate control value may be determined based on time stamps as recorded in received packets at the receiver 130 or generated by the receiver at packet reception. For example, a precision time protocol (PTP) may be implemented in the transmitter 125 and the receiver 130. The transmitter 125 and the receiver 130 may comprise corresponding local clocks. Each packet, as sent by the transmitter 125, may include a time stamp recording a local clock value at a local clock of the transmitter 125. Additionally, or alternatively, each packet as received by the receiver may be associated with/assigned a corresponding time stamp which indicates a local clock value at a local clock of the receiver 130 at the time of reception of the packet. The ASRC may record a value of the local clock at the receiver 130 every time a packet is read from the circular buffer 208.
The ASRC may determine a time difference (e.g., an average time difference) between subsequent input packets as received at the ASRC from the codec decoder 114. For example, a time difference ΔTin between consecutive received packets may be determined as:
where TTXn−1 may be a time stamp on/associated with received packet n-1 and TTXn time stamp on/associated with a current received packet n, and TTXn-TTXn−n may be the total time duration between arrival of packets n-1 and n.
The ASRC may determine a time difference (e.g., an average time difference) between clock values at time instances when output packets are read from the circular buffer 208 (e.g., by the data converter 118). For example, as each output packet in the circular buffer 208 is read out, a time difference ΔTout between consecutive output packets may be determined as:
where TRxp−1 may be a value of a local clock at the time instance when packet p-1 is read from the circular buffer 208, TRxp may be a value of a local clock at the time instance when a current packet p is read from the circular buffer 208, and TRxp-TRxp−1 may be the time duration between the time instances when the packets are read out.
The series of values of ΔTin and ΔTout, as obtained for a sequence of packets, may be processed using a set of filters. For example, the series of values of ΔTin and ΔTout may be processed using a first moving average filter, followed by a median filter, followed by a second moving average filter. For example, the moving average filters may comprise at least 256 taps (e.g., with all coefficients set to 1). The median filter may comprise at least 11 taps. Based on processing of the series of values of ΔTin and ΔTout, filtered values ΔTin,fil and ΔTout,fil may be obtained. ΔTin,fil and ΔTout, fil may provide an estimate of packet write rate Sin and packet read rate Sout. For example, Sin may be equal to 1/ΔTin,fil and Sout may be equal to 1/ΔTout,fil. The initial rate control value Rc,i may be determined as:
Temperature variations, noise, or any other variations may cause sampling rate variations at the transmitter 125 and the receiver 130. As such, even if an initial rate control value Rc,i is applied to the rate conversion module 204, there is a chance that a fill level of the circular buffer 208 is subject to significant variations and may even lead to buffer overflow or underflow.
A PLL or control loop 216 may be used to maintain a rate control value Rc at an appropriate level to negate the effects of temperature variations and noise on the sampling rates. The PLL or control loop may be based on a value Δc that is equal to a difference between a total quantity of read operations (e.g., total quantity of samples read) from the circular buffer 208 and a total quantity of write operations on (e.g., total quantity of samples written in) the circular buffer 208. For example,
Δc may be determined by the read/write counter module 218. Upper and lower bounds of Δc may be defined such that corrections may be applied to the initial rate control value Rc,i based on Δc exceeding the upper bound or falling below the lower bound. An instantaneous error signal may be generated based on Δc exceeding the upper bound or falling below the lower bound.
If Δc falls below the lower bound, it may indicate/imply that samples are being written into the circular buffer faster than samples are being read from the circular buffer. To adjust the initial rate control value Rc,i when samples are being written into the circular buffer faster than samples are being read from the circular buffer, a positive correction (Cpos) may be applied to Rc,i. The positive correction may be based on a weighted instantaneous error signal.
If Δc exceeds the upper bound, it may indicate/imply that samples are being read from the circular buffer faster than samples are being written into the circular buffer. To adjust the initial rate control value Rc,i when samples are being read from the circular buffer faster than samples are being written into the circular buffer, a negative correction (Cneg) may be applied to Rc,i. The negative correction may be based on a weighted instantaneous error signal.
The PLL or control loop may be a proportional-integral (PI) controller. An integrator may operate on a series of weighted instantaneous error signals to generate an integrated correction signal (Cint). The integrated correction signal may be applied to the initial rate control value Rc,i. A rate control Rc, to be applied to the rate conversion module 204, may be defined as:
In another example, any other error zeroing control loop/algorithm may be used to maintain the rate control value Rc. For example, an error signal may be generated based on Δc exceeding the upper bound or falling below the lower bound. An error correction may be applied to the initial rate control value Rc,i to generate the rate control value Rc. The error correction may be based on a sign and a magnitude of the error signal. The correction may be continually applied until a sign of the error signal changes. An error correction of opposite sign and reduced magnitude may then be applied based on the change in the sign of the error signal. This process may then be repeated until the error signal is minimized and/or becomes zero.
An Rc value less than one may indicate/imply that samples (e.g., output samples 224 as included in the output packets) are being read out from the circular buffer 208 at a rate that is faster than a rate at which samples (e.g., input samples 220 as included in the input packets) are being received at the ASRC (e.g., Sout>Sin). Accordingly, the rate conversion module 204 may generate a greater number of output samples 224 than are input at the ASRC 116 from the codec decoder 114. An Rc value greater than one may indicate/imply that samples are being read out from the circular buffer 208 at a rate that is slower than a rate at which samples are being received at the ASRC (e.g., Sout<Sin). Accordingly, the rate conversion module 204 may generate a fewer number of output samples 224 than are input at the ASRC 116 from the codec decoder 114. An Rc value equal to one may indicate/imply that samples are being read out from the circular buffer 208 at a rate that is equal to a rate at which samples are being received at the ASRC (e.g., Sout=Sin). In this scenario, the rate conversion module 204 may just pass the received samples to the data converter 118 with a slight phase offset and without changing the input sampling rate. Application of Rc to the rate conversion module 204 may result in generation of output samples 224 at a rate that matches/tracks the output sampling rate. Additional details regarding the operation of the rate conversion module 204 are described with respect to
The rate conversion module 300 need not compute output from each subfilter for every single input sample. The rate conversion module 300 need only compute outputs from the subfilters that will be finally output from the rate conversion module 300. A subfilter index im for generation of mth output sample may be determined as:
where Rc(m) is the rate control value for the mth output sample, and mod is the modulo operation. In an example, the required coefficients may be cyclically applied to the input to compute a corresponding output. Computing of only a subset of subfilter outputs may reduce a computational load at the receiver 130.
In some examples, the subfilter index im may not be resolvable as an integer as per Equation (7). If the subfilter index is not resolvable as an integer, none of the/subfilters of the polyphase interpolator 302 may provide exact coefficient values to be used for determining output samples. In this scenario, coefficients of a subfilter to be utilized in the polyphase interpolator 302 may be determined (e.g., interpolated) from a coefficient set of a nearest subfilter. A Taylor's series expansion may be used to determine a coefficient set f (i+Δi) for a subfilter index (i+Δi) from a coefficient set f (i) of the nearest subfilter with index i< (i+Δi) of the/subfilters. For example, as per Taylor's series,
To reduce computational load only the first few terms (e.g., first two or three terms) of the Taylor's series expansion need be considered for determining f (i+Δi). The derivative f′ (i) may be calculated as a convolution of the prototype lowpass filter, prior to being transformed to a polyphase filter with the sequence h (k)= [0.5 0-0.5]. h (k) may approximate a derivative function and may correspond to a finite impulse response (FIR) filter.
A non-integer value of subfilter index may be represented as (i+Δi)m, where i may be the integer portion of (i+Δi)m and may represent an index of the nearest subfilter (e.g., subfilter with index i<(i+Δi)). Δi may be the fractional portion of (i+Δi)m and may be applied in the Taylor's series for determination of coefficients of subfilter (i+Δi)m based on the coefficients of the nearest subfilter with index i< (i+Δi). A new input sample may be input to the subfilters of the polyphase interpolator 302 each time (Rc (m)I) exceeds I.
acc (m) may be determined based on a summation of d_acc (m) and acc (m-1). For example, acc (m) may be determined as:
A new sample x may be input into the subfilter memory for processing (e.g., using the subfilters 402 and 404) based on/in response to d_acc (m)+acc (m-1) exceeding I.
The integer value of acc (m) (represented as K (m) in
At step 510, the ASRC may determine, based on a local clock, a packet read rate (Sout or 1/ΔTout,fil) associated with output data packets as generated by the ASRC. The local clock may correspond to a clock located at/associated with a receiver device or any other device which uses the ASRC. The packet read rate may correspond to a rate at which the output data packets are read from an output buffer (e.g., the circular buffer 208). For example, the packet read rate may be determined based on Equation (2). Each of the output data packets may comprise one or more output data samples.
At step 515, the ASRC may determine, based on a ratio of the packet write rate and the packet read rate, a rate control value. For example, the rate control value may be an initial rate control value Rc,i as determined using Equation (3). A PLL (or a control loop) applying a PI control algorithm (or any error zeroing control loop) may be used to determine an adjusted rate control value Rc to accommodate noise and temperature variations in sampling rates and/or sample read-out rate (e.g., which may affect packet write rate and packet read rate).
At step 520, the ASRC (e.g., the rate conversion module 204, polyphase interpolator 302) may generate, based on the rate control value, a first quantity of output data samples using a second quantity of input data samples. For example, if the rate control value is greater than one, the first quantity of output data samples may be less than the second quantity of input data samples. If the rate control value is less than one, the first quantity of output data samples may be greater than the second quantity of input data samples. If the rate control value is equal to one, the first quantity of output data samples may be equal to the second quantity of input data samples. A rate of generation of the first quantity of output data samples may correspond to a packet read rate of the output buffer (e.g., the circular buffer 208). For example, the rate of generation of the first quantity of output data samples may match (e.g., may be equal to, substantially equal to, or correspond to) a rate at which output data samples, as stored in output data packets in the output buffer (e.g., the circular buffer 208), are read out. The second quantity of input data samples may follow (e.g., may be received after) the data packets (e.g., as received at step 505).
One or more devices in the private network 630 may also be configured for communication via a public network 635 (e.g., the Internet). Connection to the public network 635 may enable one or more devices (e.g., data device(s) 610, user device(s) 620), associated with the private network 630, to live-stream audio data to remote listeners, receive device configuration information from a server (e.g., software and/or firmware updates), receive data (e.g., broadcast from a remote location, from a server, etc.) for further processing or storage, etc. Communication via the private network 630 and/or the public network 635 may comprise transmission and/or reception of electrical and/or electromagnetic signals that may comprise data (e.g., audio data, or any other type of data) and/or control information.
The devices in the communication system 600 may transmit/exchange/share information via hardware and/or software interfaces using one or more communication protocols (e.g., proprietary and/or non-proprietary communication protocols). The communication protocols may define/codify operation of one or more layers in an Open Systems Interconnection (OSI) model that enable interconnection between and interoperability of multiple devices, applications, and/or systems forming the communication system 600. For example, devices in or connected via the private network 630 and/or the public network 635 may use one or more of Bluetooth protocol(s), Zigbee protocol(s), Institution of Electrical and Electronics Engineers (IEEE) 802.11 Wi-Fi protocol(s), 3rd Generation Partnership Project (3GPP) cellular protocol(s), local area network (LAN) protocol(s), wide area network (WAN), hypertext transfer protocols (HTTP), and/or any other wireless communication protocol, to send and receive audio and/or control information. At least some devices in the private network 630 may (e.g., additionally) use wired communication protocols (e.g., universal serial bus (USB) protocol(s), Ethernet protocol(s), and/or any other wired communication protocol) for communication with other devices.
In an example, the communication between the devices in the communication system 600 may be via wireless channels that are designated as industrial, scientific, and medical (ISM) bands defined by the International Telecommunication Union (ITU) Radio Regulations (e.g., a 2.4 GHz-2.5 GHz band, a 5.75 GHz-5.875 GHz band, a 24 GHz-24.25 GHz band, and/or a 61 GHZ-61.5 GHz band, etc.). Additionally, or alternatively, the communication between the devices in the communication system 600 may be via (e.g., one or more channels within) a very high frequency (VHF) band (e.g., 30 MHz-300 MHz band), via (e.g., one or more channels within) an ultra-high frequency (UHF) band (e.g., 300 MHz-3 GHZ), and/or via any other frequency/frequency band. More specifically, the communication between the devices in the communication system 600 may be via a digital enhanced cordless telecommunications (DECT) band, unlicensed part 15 bands, part 74 bands, and/or any other bands.
Data device(s) 610 may comprise one or more audio input device(s), audio output device(s), and/or audio processing device(s). Data device(s) 610 may comprise one or more of: microphone(s), microphone car piece(s), transceiver(s) (e.g., associated with a musical instrument), speaker(s), wireless headset(s), audio receiver device(s) (e.g., with an output interface such as an XLR connector, USB connector, 3.5 mm connector, etc.), audio mixer(s), and/or any other type of device capable of generating and/or processing audio or digital data packets. The private network 630 may also comprise one or more wireless hubs. A wireless hub may interface and/or consolidate communications between the devices in the private network 630. For example, a wireless hub may receive audio packets from audio input device(s) (e.g., microphone(s)). The wireless hub may send (e.g., unicast, broadcast) audio packets to audio output device(s) (e.g., speaker(s), carpieces associated with microphones) and/or audio processing device(s) (e.g., a sound mixer).
The communication network 600 may comprise one or more devices transmitting, receiving, and/or processing audio signals. The communication network 600 may comprise one or more devices associated with signals other than audio signals. For example, the one or more devices may generate/process any other type of analog/digital data/signals in a manner that is similar, or substantially similar, to as described herein (e.g., with respect to
The user device(s) 620 may comprise one or more personal computing device(s) (e.g., desktop computers, laptop computers), mobile computing device(s) (e.g., smartphone(s), tablet(s)), and/or any other device that may provide a user interface (e.g., graphical user interface (GUI)) for controlling and monitoring the operation of the communication network. The user device(s) 620 may comprise a server-based monitor and/or control application and/or a cloud-based monitor and/or control application providing a user interface. For example, a user device 620 may be used to provide various settings and/or parameters associated with the operation of the data device(s) 610, and/or any other device in the private network 630. For example, a user interface, associated with the user device 620, may be used to select data device(s) 610 with which a wireless hub may establish communication, or may be used to configure a connection between two data devices (e.g., an audio input device and an audio output device). In at least some examples, the user device(s) 620 may provide digital input to, and/or receive digital signals from, one or more devices in the private network 630. Data device(s) 610, user device(s) 620, and/or wireless hub(s) may correspond to transmitters and/or receivers as described with reference to
The computing device 700 may be implemented using one or more integrated circuits (ICs), software, or a combination thereof, configured to operate as discussed below. The various processors (e.g., one or more of the PHY processor(s) 705, the MAC processor(s) 710, the higher layer processor(s) 715) may be implemented, at least partially, on a single IC or multiple ICs.
Messages transmitted from and/or received by the computing device 700 may be encoded in one or more MAC data units and/or PHY data units. The MAC processor(s) 710 and/or the PHY processor(s) 705 of the computing device 700 may be configured to generate data units, and process received data units, that conform to any suitable wired and/or wireless communication protocol. For example, the MAC processor(s) 710 may be configured to implement MAC layer functions, and the PHY processor(s) 705 may be configured to implement PHY layer functions corresponding to a communication protocol. The MAC processor(s) 710 may, for example, generate MAC data units (e.g., MAC protocol data units (MPDUs)) based on operations performed by the higher layer processor(s) 715, and forward the MAC data units to the PHY processor(s) 705. The PHY processor(s) 705 may, for example, generate PHY data units (e.g., PHY protocol data units (PPDUs)) based on the MAC data units. The generated PHY data units may be transmitted via the TX/RX module(s) 720 to one or more other devices in the private network 630 and/or the public network 635. Similarly, the PHY processor(s) 705 may receive PHY data units (e.g., as sent by one or more other devices in the private network 630 and/or the public network 635) via the TX/RX module(s) 720, extract MAC data units encapsulated within the PHY data units and forward the extracted MAC data units to the MAC processor(s) 710. The MAC processor(s) 710 may then process the MAC data units (e.g., as forwarded by the PHY processor(s) 705) and forward the processed MAC data units to the higher layer processor(s) 715 for additional processing. In an example, the PHY data units and/or the MAC data units may correspond to audio packets transmitted via the private network 630.
The higher layer processor(s) 715 may implement one or more other layers of the OSI model (e.g., network layer, transport layer, session layer, presentation layer, and/or application layer) representing the operations of the computing device 700. The higher layer processor(s) 715 may process data units for transmission via the MAC processor(s) 710 and the PHY processor(s) 705, and/or process data units as received via the PHY processor(s) 705 and the MAC processor(s) 710.
The memory 730 may comprise any memory such as a random-access memory (RAM), a read-only memory (ROM), a flash memory, or any other electronically readable memory, or the like. The processors (e.g., one or more of the PHY processor(s) 705, the MAC processor(s) 710, the higher layer processor(s) 715), the TX/RX module(s) 720, and/or other component/modules of the computing device 700 may be configured to execute machine readable instructions stored in the memory 730 to perform the various operations described herein. The TX/RX module(s) 720 may comprise components (mixers, amplifiers, drivers, antennas, etc.) for wireless transmission and/or reception of signals (e.g., audio packets, control information) via the private network 630 and/or for communication (e.g., wired and/or wireless communication) via the public network 635.
A method may comprise one or more operations. The method may comprise determining, by a computing device and based on packet time stamps associated with input data packets of a signal, a packet write rate. The method may comprise determining, based on a local clock of the computing device, a packet read rate associated with output data packets. The method may comprise determining, based on a ratio of the packet write rate and the packet read rate, a rate control value. The method may comprise generating, based on the rate control value, a first quantity of output samples in one or more output data packets based on a second quantity of input samples in one or more input data packets, wherein a rate of generation of the first quantity of output samples corresponds to the packet read rate. Determining the packet write rate may comprise determining an average value of filtered differences between packet time stamps associated with consecutive input data packets of the signal. Determining the packet read rate may comprise determining an average value of filtered time differences between clock values, of the local clock, at time instances when subsequent packets are read from a buffer. Each input data packet may comprise one or more input samples, and each output data packet comprises one or more output samples. Generating the first quantity of output samples may comprise generating the first quantity of output samples using a polyphase interpolator. Coefficients of subfilters of the polyphase interpolator may be based on an interpolation factor of the polyphase interpolator. A number of phases of the polyphase interpolator may be equal to an interpolation factor of the polyphase interpolator. The packet read rate associated with the output data packets may correspond to a read-out rate from a buffer storing the output data packets. Generating an output sample may comprise one or more of: determining a subfilter index of a subfilter based on the rate control value and an interpolation factor; selecting a nearest previous subfilter, of the polyphase interpolator, based on an integer part of the subfilter index; determining, based on a coefficient set of the nearest previous subfilter and a fractional part of the subfilter index, a coefficient set of the subfilter; and/or generating the output sample using the coefficient set of the subfilter. Determining the coefficient set for the subfilter may comprise using a Taylor's series expansion based on the coefficient set of the nearest previous subfilter and the fractional part of the subfilter index. The method may comprise using a phase-locked loop (PLL) or other control loop to maintain a fill level of a buffer storing the output samples within a predetermined range. The method may comprise receiving, from a transmitting device, the packets of the signal. The computing device may be an audio device or a digital computing device. The signal may comprise an audio signal or a band limited signal. The packet time stamps may be generated based on the local clock of the computing device. A computing device may comprise one or more processors and memory storing instructions that, when executed by the one or more processors, cause the computing device to perform the above-described method. A system may comprise: a receiving device configured to perform the above-described method, and a transmitting device configured to send packets of the signal. A system may comprise: a computing device configured to perform the above-described method, and a memory storage device configured to store packets of the signal. A computer-readable medium may be provided storing instructions that, when executed, cause performance of the above-described method.
One or more aspects of the disclosure may be embodied in computer-usable data or computer-executable instructions, such as in one or more program modules, executed by one or more computers or other devices to perform the operations described herein. Generally, program modules include routines, programs, objects, components, data structures, and the like that perform particular tasks or implement particular abstract data types when executed by one or more processors in a computer or other data processing device. The computer-executable instructions may be stored as computer-readable instructions on a computer-readable medium such as a hard disk, optical disk, removable storage media, solid-state memory, RAM, and the like. The functionality of the program modules may be combined or distributed as desired in various embodiments. In addition, the functionality may be embodied in whole or in part in firmware or hardware equivalents, such as integrated circuits, application-specific integrated circuits (ASICs), field programmable gate arrays (FPGA), and the like. Particular data structures may be used to more effectively implement one or more aspects of the disclosure, and such data structures are contemplated to be within the scope of computer executable instructions and computer-usable data described herein.
Various aspects described herein may be embodied as a method, an apparatus, or as one or more computer-readable media storing computer-executable instructions. Accordingly, those aspects may take the form of an entirely hardware embodiment, an entirely software embodiment, an entirely firmware embodiment, or an embodiment combining software, hardware, and firmware aspects in any combination. In addition, various signals representing data or events as described herein may be transferred between a source and a destination in the form of light or electromagnetic waves traveling through signal-conducting media such as metal wires, optical fibers, or wireless transmission media (e.g., air or space). In general, the one or more computer-readable media may be and/or include one or more non-transitory computer-readable media.
As described herein, the various methods and acts may be operative across one or more computing servers and one or more networks. The functionality may be distributed in any manner, or may be located in a single computing device (e.g., a server, a client computer, and the like). For example, in alternative embodiments, one or more of the computing platforms discussed above may be combined into a single computing platform, and the various functions of each computing platform may be performed by the single computing platform. In such arrangements, any and/or all of the above-discussed communications between computing platforms may correspond to data being accessed, moved, modified, updated, and/or otherwise used by the single computing platform. Additionally, or alternatively, one or more of the computing platforms discussed above may be implemented in one or more virtual machines that are provided by one or more physical computing devices. In such arrangements, the various functions of each computing platform may be performed by the one or more virtual machines, and any and/or all of the above-discussed communications between computing platforms may correspond to data being accessed, moved, modified, updated, and/or otherwise used by the one or more virtual machines.
Aspects of the disclosure have been described in terms of illustrative embodiments thereof. Numerous other embodiments, modifications, and variations within the scope and spirit of the appended claims will occur to persons of ordinary skill in the art from a review of this disclosure. For example, one or more of the steps depicted in the illustrative figures may be performed in other than the recited order, and one or more depicted steps may be optional in accordance with aspects of the disclosure.
This application claims the benefit of U.S. Provisional Patent Application No. 63/619,129, filed on Jan. 9, 2024; and U.S. Provisional Patent Application No. 63/562,440, filed on Mar. 7, 2024; both of which are fully incorporated herein by reference.
| Number | Date | Country | |
|---|---|---|---|
| 63562440 | Mar 2024 | US | |
| 63619129 | Jan 2024 | US |