A method of polar coding an information block, the method comprising: generating an initial puncturing pattern comprising a plurality of punctured bit locations for puncturing corresponding coded bit locations in a polar codeword; calculating a first log likelihood ratio, LLR, sum for an unknown-bit puncturing scheme by considering the coded bit locations corresponding to the punctured bit locations as comprising unknown bits, wherein calculating the first LLR sum comprises: setting a respective unknown-bit LLR for each coded bit location corresponding to one of the punctured bit locations to zero; determining a respective first coded bit LLR for remaining ones of the coded bit locations; calculating respective first LLRs for each original bit location of the information block from the respective first coded bit LLRs and the respective unknown-bit LLRs by performing density evolution or Gaussian approximation; and calculating the first LLR sum based on the first LLRs; calculating a second LLR sum for a known-bit puncturing scheme by considering the coded bit locations corresponding to the punctured bit locations as comprising known bits, wherein calculating the second LLR sum comprises: setting a respective known-bit LLR for each coded bit location corresponding to one of the punctured bit locations to infinity; determining a respective second coded bit LLR for remaining ones of the coded bit locations; calculating respective second LLRs for each original bit location of the information block from the respective second coded bit LLRs and the respective known-bit LLRs by performing density evolution or Gaussian approximation; and calculating the second LLR sum based on the second LLRs; selecting the unknown-bit puncturing scheme if the first LLR sum is greater than the second LLR sum, and selecting the known bit puncturing scheme if the second LLR sum is greater than the first LLR sum; polar coding the information block to produce the polar codeword; and puncturing the polar codeword using a final puncturing pattern and based on a selected puncturing scheme to produce a punctured codeword comprising a codeword length other than a power of two, the final puncturing pattern based on bit-reversal permutation on the initial puncturing pattern and comprising final punctured bit locations different than the punctured bit locations. generating an initial puncturing pattern comprising a plurality of punctured bit locations for puncturing corresponding coded bit locations in a polar codeword; calculating a first log likelihood ratio, LLR, sum for an unknown-bit puncturing scheme by considering the coded bit locations corresponding to the punctured bit locations as comprising unknown bits, wherein calculating the first LLR sum comprises: setting a respective unknown-bit LLR for each coded bit location corresponding to one of the punctured bit locations to zero; determining a respective first coded bit LLR for remaining ones of the coded bit locations; calculating respective first LLRs for each original bit location of the information block from the respective first coded bit LLRs and the respective unknown-bit LLRs by performing density evolution or Gaussian approximation; and calculating the first LLR sum based on the first LLRs; setting a respective unknown-bit LLR for each coded bit location corresponding to one of the punctured bit locations to zero; determining a respective first coded bit LLR for remaining ones of the coded bit locations; calculating respective first LLRs for each original bit location of the information block from the respective first coded bit LLRs and the respective unknown-bit LLRs by performing density evolution or Gaussian approximation; and calculating the first LLR sum based on the first LLRs; calculating a second LLR sum for a known-bit puncturing scheme by considering the coded bit locations corresponding to the punctured bit locations as comprising known bits, wherein calculating the second LLR sum comprises: setting a respective known-bit LLR for each coded bit location corresponding to one of the punctured bit locations to infinity; determining a respective second coded bit LLR for remaining ones of the coded bit locations; calculating respective second LLRs for each original bit location of the information block from the respective second coded bit LLRs and the respective known-bit LLRs by performing density evolution or Gaussian approximation; and calculating the second LLR sum based on the second LLRs; setting a respective known-bit LLR for each coded bit location corresponding to one of the punctured bit locations to infinity; determining a respective second coded bit LLR for remaining ones of the coded bit locations; calculating respective second LLRs for each original bit location of the information block from the respective second coded bit LLRs and the respective known-bit LLRs by performing density evolution or Gaussian approximation; and calculating the second LLR sum based on the second LLRs; selecting the unknown-bit puncturing scheme if the first LLR sum is greater than the second LLR sum, and selecting the known bit puncturing scheme if the second LLR sum is greater than the first LLR sum; polar coding the information block to produce the polar codeword; and puncturing the polar codeword using a final puncturing pattern and based on a selected puncturing scheme to produce a punctured codeword comprising a codeword length other than a power of two, the final puncturing pattern based on bit-reversal permutation on the initial puncturing pattern and comprising final punctured bit locations different than the punctured bit locations.