pulse shaping methods