Design methods for irregular repeat-accumulate codes