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

matlab例程

开发平台:

Matlab

  1. function  DataOut = convbase(DataIn,CurrBase,NewBase)
  2. %CONVBASE Converts the number base of the input data (DataIn)
  3. % DataOut = convbase(DataIn,CurrBase,NewBase)
  4. % from the current base (CurrBase) to the new base required
  5. % (NewBase). If the new base is less the the old base, e.g
  6. % NewBase = 2 and CurrBase = 8, the DataOut will have more
  7. % data words. For the above example DataOut will be 4 times
  8. % longer then DataIn.
  9. % The actual base used = 2^NewBase, thus NewBase = 8, is base 256
  10. % E.g. DataIn = [ 2 64 20 ] with CurrBase = 8, NewBase = 2
  11. % DataOut = [0 0 0 2, 1 0 0 0, 0 1 1 0]
  12. % Note : Both the input and output data is in a serial format.
  13. %====================================
  14. % Convert the number base of the data
  15. %====================================
  16. if CurrBase > NewBase,
  17. %Convert the input data into the base (NewBase) required
  18. leftover = DataIn';
  19. DataOut = [];
  20. for k = 1:(CurrBase/NewBase)
  21. DataOut = [DataOut rem(leftover,2^NewBase)];
  22. leftover = floor(leftover./(2^NewBase));
  23. end
  24. DataOut = reshape(DataOut',1,size(DataOut,1)*size(DataOut,2));
  25. elseif CurrBase < NewBase,
  26. %=======================
  27. %Convert back to decimal
  28. %=======================
  29. remainder = rem(length(DataIn),NewBase/CurrBase);
  30. if (remainder > 0),
  31. disp('WARNING : Received data length problem when converting base');
  32. disp('Clipping data to make possible');
  33. DataIn = DataIn(1:length(DataIn)-remainder);
  34. end
  35. Datawords=reshape(DataIn,NewBase/CurrBase,size(DataIn,1)*size(DataIn,2)/...
  36. (NewBase/CurrBase))';
  37. DataOut = zeros(size(Datawords,1),1);
  38. for k = 1:(NewBase/CurrBase)
  39. DataOut = DataOut+Datawords(:,k)*(2^CurrBase)^(k-1);
  40. end
  41. DataOut = DataOut.';
  42. else
  43. DataOut = DataIn; %No change of base.
  44. end