function [u] = upc2signal (upc) % upc2signal % upc is a string containing exactly 10 digits % u is the step signal read: 0 for white, 1 for black % d is the first derivative of u: dirac functions % UPC codes usually have a first digit (to left of barcode) telling the item type % We ignore the first digit % Read first 5 digits: manufacturer's number for i = 1:5 if str2num(upc(i)) == 0 u(1+7*(i-1):7+7*(i-1)) = [0 0 0 1 1 0 1]; elseif str2num(upc(i)) == 1 u(1+7*(i-1):7+7*(i-1)) = [0 0 1 1 0 0 1]; elseif str2num(upc(i)) == 2 u(1+7*(i-1):7+7*(i-1)) = [0 0 1 0 0 1 1]; elseif str2num(upc(i)) == 3 u(1+7*(i-1):7+7*(i-1)) = [0 1 1 1 1 0 1]; elseif str2num(upc(i)) == 4 u(1+7*(i-1):7+7*(i-1)) = [0 1 0 0 0 1 1]; elseif str2num(upc(i)) == 5 u(1+7*(i-1):7+7*(i-1)) = [0 1 1 0 0 0 1]; elseif str2num(upc(i)) == 6 u(1+7*(i-1):7+7*(i-1)) = [0 1 0 1 1 1 1]; elseif str2num(upc(i)) == 7 u(1+7*(i-1):7+7*(i-1)) = [0 1 1 1 0 1 1]; elseif str2num(upc(i)) == 8 u(1+7*(i-1):7+7*(i-1)) = [0 1 1 0 1 1 1]; else % str2num(upc(i)) == 9 u(1+7*(i-1):7+7*(i-1)) = [0 0 0 1 0 1 1]; end; end; % Insert spacer between manufacturer's and product number: 01010. u(36:40) = [0 1 0 1 0]; % Read last 5 digits: product number for i = 6:10 if str2num(upc(i)) == 0 u(41+7*(i-6):47+7*(i-6)) = [1 1 1 0 0 1 0]; elseif str2num(upc(i)) == 1 u(41+7*(i-6):47+7*(i-6)) = [1 1 0 0 1 1 0]; elseif str2num(upc(i)) == 2 u(41+7*(i-6):47+7*(i-6)) = [1 1 0 1 1 0 0]; elseif str2num(upc(i)) == 3 u(41+7*(i-6):47+7*(i-6)) = [1 0 0 0 0 1 0]; elseif str2num(upc(i)) == 4 u(41+7*(i-6):47+7*(i-6)) = [1 0 1 1 1 0 0]; elseif str2num(upc(i)) == 5 u(41+7*(i-6):47+7*(i-6)) = [1 0 0 1 1 1 0]; elseif str2num(upc(i)) == 6 u(41+7*(i-6):47+7*(i-6)) = [1 0 1 0 0 0 0]; elseif str2num(upc(i)) == 7 u(41+7*(i-6):47+7*(i-6)) = [1 0 0 0 1 0 0]; elseif str2num(upc(i)) == 8 u(41+7*(i-6):47+7*(i-6)) = [1 0 0 1 0 0 0]; else % str2num(upc(i)) == 9 u(41+7*(i-6):47+7*(i-6)) = [1 1 1 0 1 0 0]; end; end; % Find first derivative d. d = diff(u); % Show barcode plot subplot(3,1,1); image(u.*255); caxis([0 1]); colormap([1 1 1 ; 0 0 0]); % colorbar; title(strcat('Barcode: ',upc)); v = axis; axis([0.5 75.5 v(3) v(4)]); % Show step signal u. subplot(3,1,2); stairs(u); title(strcat('Step signal: ',upc)); axis([0.5 75.5 -0.5 1.5]); % Show first derivative d. subplot(3,1,3); plot(d); title(strcat('First derivative: ',upc)); axis([0.5 75.5 -1.5 1.5]);