-
Notifications
You must be signed in to change notification settings - Fork 251
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Discrepency in PUSCH transmit slot lengths when generating multiple contiguous slots and frames #496
Comments
Hi @naperman, The length of the cyclic prefix depends on the slot number. Please have a look at the CarrierConfig class. The implementation of the property @property
def cyclic_prefix_length(self):
if self.cyclic_prefix=="extended":
cp = 512*self.kappa*2**(-self.mu)
else:
cp = 144*self.kappa*2**(-self.mu)
if self.slot_number in [0, 7*2**self.mu]:
cp += 16*self.kappa
return cp*self.t_c Apparently, something in this implementation is incorrect according to #465. Please have a look as well. |
@jhoydis I understand from your explanation, and after reading through #465 and #425 that in the sionna OFDMModulator implementation, the Given these observations and requirements for my use case, I have the following questions:
|
Hi @naperman, These are all good concerns and we plan to address them in the next release.
|
@jhoydis Thanks for the clarifications. Regarding I'm not sure, but it looks like these fixed FFT sizes from the spec is not implemented in sionna because the sionna.signal.utils.ifft function is limited by the underlying call to the tf.signal.ifft which does not support an fft_size input. Ideally, it would be great to have an optional fft_size input parameter in PUSCHTransmitter which gets passed down to OFDMModulator and then to the ifft function. In my fork, i have rewritten sionna.signal.utils.ifft to take in fft_size and do a conversion of the input tensor to a cupy ndarray to apply cp.fft.ifft() (numpy and cupy ifft function do support an fft_size input) and then back to a tensor, using tf.experimental.dlpack.to_dlpack to avoid deep copies. I'm not sure how efficient this is compared to native tensorflow only computations - being able to do this without these conversions would be better. |
Hi @naperman, I have created a fork here, which fixes these issue and makes the code compatible to the 3GPP standard. Please let me know if you have any issues or questions. The approach I took for the FFT size is a bit different from yours: I added the parameter |
Hi @danielschaeufele Adding the |
Hi @naperman, I didn't do any explicit link level simulations, but the test in |
Thanks for bringing the channel sampling issue to attention. So far, I have only tested on typical TDL scenarios with high SNR and doppler upto to 100Hz and didn't see any degradations in BER compared to a reference simulator. I'll have to do wider sweeps over different channel parameters to check where the performance starts to degrade relative to the reference simulator. Also, regarding contiguous multi-slot generation, were you able to arrive at a strategy to generate all slots with graph mode? I tried initializing a list of |
Hi @naperman, As far as I know there currently is no way to generate multiple slots with a single |
Hi @danielschaeufele and @naperman, The issue is not forgotten from our side. The way that we will probably make the PUSCHTransmitter/Receiver work with arbitrary slot indices, is to precompute the DMRS signals for all slots and then gather them depending on the slots which are supposed to be simulated. Ideally one could provide for every example in a batch the desired slot number as input. |
Hi @jhoydis, I think another issue will be that not every slot has the same number of time domain samples, because for SCS > 30KHz, not every slot has the longer cyclic prefix. So maybe this can be solved with a ragged tensor. |
Is this issue still being tracked? |
There is #465, which will hopefully be merged soon. This will at least generate the correct cyclic prefix length. However, this won't help with generating multiple slots at once. I don't know if there are any plans to provide a good solution for this... |
I tried generating multiple slots in sequence using Sionna PUSCHTransmitter layer using the script shown below, where I'm setting the appropriate frame numbers and slot numbers(within each frame) within the loop. But, the slot lengths are different for slots 0, 14, 20, 34, ... compared to other slot numbers as show in the output text after the code segment.
When I plot the Resource Grid and Pilot Pattern for each slot(commented out at the end of the script), they appear identical for all slots. So why do the slot lengths differ and why for those specific slots numbers (0 and 14) within each frame?
The text was updated successfully, but these errors were encountered: