Design methods for irregular repeat accumulate codes