% Example uint16 data
uint16Data = uint16([0, 2^16-1]);
% Map uint16 to int16
int16Data = int16(uint16Data - 2^15); % here is where the problem lies and I cant figure out how to circumvent going through double or single...
% Display the results
disp(['Original uint16 data: ', num2str(uint16Data)]);
Original uint16 data: 0 65535
disp(['Mapped int16 data: ', num2str(int16Data)]); % my desired result here is Mapped int16 data: -32768 32767
Mapped int16 data: 0 32767