tx_chunk.m
上传用户:m_sun_001
上传日期:2014-07-30
资源大小:1115k
文件大小:2k
源码类别:

matlab例程

开发平台:

Matlab

  1. % tx_chunk
  2. data_length = length(data_in_pol) %number of symbols in original input
  3. num_carriers
  4. num_chunks = ceil(data_length/(2*num_carriers)) %2 data on each carrier (real and imaginary)
  5. r = rem(data_length,2*num_carriers)             %remainer of 
  6. if r ~= 0
  7. for i = 1:num_carriers*2-r
  8. data_in_pol(data_length+i) = 0; %pad input with zeros to complete last data set
  9. end %speed improve possible
  10. end
  11. % break data into chunks
  12. chunks = zeros(num_chunks,num_carriers); % for speed
  13. for i = 1:num_chunks
  14. % *********************chunk done
  15. for k = 1:num_carriers
  16. chunks(i,k) = data_in_pol(2*num_carriers*(i-1)+k) + data_in_pol(2*num_carriers*(i-1)+k+num_carriers)*j;
  17. end
  18. end
  19. chunks;%2005_05_23----------------------------------------------------
  20. % Padding chunks with zeros so num_carriers and fft_size are compatible
  21. % Once compatible, further spacing is simplified
  22. num_desired_carriers = num_carriers;
  23. num_zeros = 0;
  24. thinking = 1;
  25. fft_size
  26. while thinking == 1 % Continue if num_carriers and fft_size are not compatible
  27. if rem(fft_size/2,num_desired_carriers) == 0
  28. thinking = 0;
  29. else
  30. num_desired_carriers = num_desired_carriers + 1;
  31. num_zeros = num_zeros + 1;
  32. end
  33. end
  34. padded_chunks = zeros(num_chunks,num_carriers + num_zeros);% for speed
  35. padded_chunks(1:num_chunks,num_zeros + 1:num_carriers + num_zeros) = chunks;
  36. %compute zeros_between
  37. zeros_between = ((fft_size/2) - (num_carriers + num_zeros))/(num_carriers + num_zeros);
  38. spaced_chunks = zeros(num_chunks,fft_size); % for speed - extra room for folding later
  39. %add zeros_between
  40. i = 1;
  41. for k = zeros_between +1:zeros_between +1:fft_size/2
  42. spaced_chunks(1:num_chunks,k) = padded_chunks(1:num_chunks,i);
  43. i = i+1;
  44. end
  45. % folding data to produce an odd function for ifft input
  46. for i = 1:num_chunks
  47. % Note: index = 1 is actually DC freq for ifft -> it does not get copied over y-axis
  48. spaced_chunks(i,fft_size:-1:fft_size/2+2) = conj(spaced_chunks(i,2:fft_size/2));
  49. end
  50. spaced_chunks;