WO2011133008A2 - 영상의 변환 방법 및 장치, 역변환 방법 및 장치 - Google Patents

영상의 변환 방법 및 장치, 역변환 방법 및 장치 Download PDF

Info

Publication number
WO2011133008A2
WO2011133008A2 PCT/KR2011/003006 KR2011003006W WO2011133008A2 WO 2011133008 A2 WO2011133008 A2 WO 2011133008A2 KR 2011003006 W KR2011003006 W KR 2011003006W WO 2011133008 A2 WO2011133008 A2 WO 2011133008A2
Authority
WO
WIPO (PCT)
Prior art keywords
matrix
itmp
transform
inverse
nxn
Prior art date
Application number
PCT/KR2011/003006
Other languages
English (en)
French (fr)
Other versions
WO2011133008A3 (ko
Inventor
홍윤미
한우진
이태미
천민수
Original Assignee
삼성전자 주식회사
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 삼성전자 주식회사 filed Critical 삼성전자 주식회사
Publication of WO2011133008A2 publication Critical patent/WO2011133008A2/ko
Publication of WO2011133008A3 publication Critical patent/WO2011133008A3/ko

Links

Images

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/60Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using transform coding
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • G06F17/10Complex mathematical operations
    • G06F17/14Fourier, Walsh or analogous domain transformations, e.g. Laplace, Hilbert, Karhunen-Loeve, transforms
    • G06F17/147Discrete orthonormal transforms, e.g. discrete cosine transform, discrete sine transform, and variations therefrom, e.g. modified discrete cosine transform, integer transforms approximating the discrete cosine transform

Definitions

  • the present invention relates to an image encoding and decoding method and apparatus, and more particularly, to an improved transform and inverse transform method and apparatus for a large block.
  • video signals are hierarchically divided into sequences, frames, slices, macro blocks, and blocks, with blocks becoming the minimum processing unit.
  • encoding through intra-frame or inter-frame prediction, the predictive residual error of the block is obtained, and the block transform is performed so that energy can be concentrated on a few coefficients, and quantization, scanning, run length coding (Run Length) Coding) and entropy coding, the image data is compressed and recorded in a coded bitstream.
  • decoding the processing procedure is reversed. First, the block transform coefficients of entropy coding are extracted from the bit stream.
  • the conversion module is the basis of video compression, and the conversion performance directly affects the general performance of the codec.
  • DCT Discrete cosine transform
  • An object of the present invention is to provide a method and apparatus for transforming and inversely transforming an image using a more efficient discrete cosine transform.
  • the present invention reduces the amount of computation required to transform an image through a transformation matrix having a value substituted with a predetermined rational number and replacing a multiplication operation with a shift operation.
  • a scaling factor may be used to compensate for an error value from a conversion process based on floating-point arithmetic, thereby providing a more efficient image transformation and inverse transformation method while reducing complexity.
  • FIG. 1 illustrates an image encoding apparatus according to an embodiment of the present invention.
  • FIG. 2 shows a flow graph of four point, eight point, sixteen point, and 32 point discrete cosine transform.
  • FIG. 3 is a flowchart illustrating an image conversion method according to an embodiment of the present invention.
  • FIG. 4 is a reference diagram illustrating elements of a substituted N ⁇ N transformation matrix A in which trigonometric components included in elements of a 16 ⁇ 16 transformation matrix are substituted with variables according to an embodiment of the present invention.
  • FIG. 5 is a flowchart illustrating a quantization process according to an embodiment of the present invention.
  • FIG. 6 is a flowchart illustrating a quantization process according to another embodiment of the present invention.
  • FIG. 7 shows an example of a scaling matrix MF according to the quantization parameter QP used in the conversion of a 16x16 block according to an embodiment of the present invention.
  • FIG. 8 illustrates an inverse scaling matrix V according to a quantization parameter QP applied to a 16 ⁇ 16 block according to an embodiment of the present invention.
  • FIG. 9 to 14 show examples of a scaling matrix MF according to a quantization parameter QP applied to a 32x32 block according to an embodiment of the present invention.
  • FIG. 15 shows a flow graph of a 32 point discrete cosine transform in accordance with another embodiment of the present invention.
  • FIG. 16 is a reference diagram illustrating a calculation process of a butterfly structure constituting the 32 point discrete cosine transform of FIG. 15.
  • 17 is a flowchart illustrating a method of converting an image, according to another exemplary embodiment.
  • FIG. 18 is a view showing a modified butterfly structure according to an embodiment of the present invention.
  • FIG. 19 is a view showing a modified butterfly structure according to another embodiment of the present invention.
  • FIG. 20 is a view showing a modified butterfly structure according to another embodiment of the present invention.
  • 21 is a view showing a modified butterfly structure according to another embodiment of the present invention.
  • 22 through 27 show an example of the scaling matrix MF according to the quantization parameter QP for a 32 ⁇ 32 input block when applying the modified butterfly structure shown on the right side of FIG. 18.
  • 34 through 39 show examples of inverse scaling matrix v according to quantization parameter QP for a 32x32 input block when applying the modified butterfly structure shown on the right side of FIG.
  • 40-45 show an example of the inverse scaling matrix V according to the quantization parameter QP for a 32x32 input block when applying the modified butterfly structure shown on the right side of FIG.
  • 46 through 51 show an example of a scaling matrix MF according to the quantization parameter QP for a 32x32 input block when applying the modified butterfly structure shown on the right side of FIG.
  • 52 to 57 show an example of the scaling matrix MF according to the quantization parameter QP for the 32x32 input block when applying the modified butterfly structure shown on the right side of FIG. 19.
  • 58 through 63 show an example of an inverse scaling matrix v according to the quantization parameter QP for a 32 ⁇ 32 input block when applying the modified butterfly structure shown on the right side of FIG. 18.
  • 64 to 69 show an example of an inverse scaling matrix V according to the quantization parameter QP for a 32x32 input block when applying the modified butterfly structure shown on the right side of FIG. 19.
  • 70 to 75 show an example of the scaling matrix MF according to the quantization parameter QP for a 32x32 input block when applying the modified butterfly structure shown on the right side of FIG.
  • 82 to 87 show an example of the inverse scaling matrix v according to the quantization parameter QP for a 32 ⁇ 32 input block when applying the modified butterfly structure shown on the right side of FIG. 18.
  • 94A-94F illustrate an example of an inverse scaling matrix V according to the quantization parameter QP applied to a 32x32 block in accordance with one embodiment of the present invention.
  • 95 is a block diagram illustrating an image decoding apparatus according to an embodiment of the present invention.
  • 96 is a flowchart illustrating an inverse transform method of an image according to an embodiment of the present invention.
  • 97 is a flowchart illustrating an inverse transform method of an image according to another embodiment of the present invention.
  • 98 is a flowchart illustrating an image converting method according to another embodiment of the present invention.
  • 99A to 99G illustrate examples of the permutation matrix P and the rotation matrices A1 to A6 in Equation (1).
  • 100A to 100G illustrate an embodiment of the matrixes A1 to A7 in Equation (3).
  • 101A-101F illustrate an example of an inverse scaling matrix V according to quantization parameter QP applied to a 32x32 block in accordance with another embodiment of the present invention.
  • 102A to 102C show an alternative operation of multiplication used for 16x16, 32x32, and 64x64 conversion, respectively.
  • 103A to 103C illustrate alternative calculation processes according to another embodiment of changing the alternative calculation process of multiplication shown in FIGS. 102A to 102C.
  • 105A to 105F illustrate an example of a scaling matrix MF according to a quantization parameter QP used in converting a 16 ⁇ 16 block according to another embodiment of the present invention.
  • 106A to 106F show an example of the inverse scaling matrix V according to the quantization parameter QP used in the conversion of the 16x16 block.
  • 107A to 107F show another example of the scaling matrix MF according to the quantization parameter QP used in the 16 point discrete cosine transform according to another embodiment of the present invention.
  • 108A-108F illustrate an inverse scaling matrix V according to the quantization parameter QP used in the 16 point discrete cosine transform in accordance with another embodiment of the present invention.
  • 109A to 109F illustrate an example of a scaling matrix MF according to a quantization parameter QP used in converting a 32x32 block according to another embodiment of the present invention.
  • 110A through 110F illustrate an example of an inverse scaling matrix V according to a quantization parameter QP used in converting a 32x32 block according to another embodiment of the present invention.
  • 111A-111F show an example of the scaling matrix MF according to the quantization parameter QP used in the 32 point discrete cosine transform according to another embodiment of the present invention.
  • 112A-112F illustrate an inverse scaling matrix V according to the quantization parameter QP used in the 32 point discrete cosine transform in accordance with another embodiment of the present invention.
  • FIG. 113A illustrates an alternative operation process of multiplication used for a 16x16 transform
  • FIG. 113B illustrates an alternative operation process of multiplication used for a 32x32 transform.
  • 114A to 114B illustrate an example of a substitution operation that replaces a multiplication operation used for the acid cosine transform based on FIG. 104.
  • 115A to 115F illustrate another example of the scaling matrix MF according to the quantization parameter QP used in the 16 point discrete cosine transform according to another embodiment of the present invention.
  • 116A-116F illustrate another example of an inverse scaling matrix V according to the quantization parameter QP used in the 16 point inverse discrete cosine transform according to another embodiment of the present invention.
  • 117A-117F show an example of the scaling matrix MF according to the quantization parameter QP used in the 16 point discrete cosine transform in accordance with another embodiment of the present invention.
  • 118A-118F illustrate an inverse scaling matrix V according to the quantization parameter QP used in the 16 point discrete cosine transform in accordance with another embodiment of the present invention.
  • 119A-119F illustrate an example of the scaling matrix MF according to the quantization parameter QP used in the 32 point discrete cosine transform according to another embodiment of the present invention.
  • 120A to 120F show an example of the inverse scaling matrix V according to the quantization parameter QP used in the 32 point inverse discrete cosine transform.
  • 121A through 121F illustrate examples of the scaling matrix MF according to the quantization parameter QP used in the 32 point discrete cosine transform according to another embodiment of the present invention.
  • 122A-122F illustrate an inverse scaling matrix V according to the quantization parameter QP used in the 32 point discrete cosine transform in accordance with another embodiment of the present invention.
  • FIG. 123A shows the substitution operation of the multiplication used for the 16x16 transform
  • FIG. 123B shows the substitution operation of the multiplication used for the 32x32 transform.
  • 124A to 124B illustrate an alternative operation process in which an operation is further reduced in the alternative operation processes of FIGS. 123A and 123B, respectively.
  • 125 shows a flowchart of a discrete cosine transform according to another embodiment of the present invention.
  • FIG. 126 is a flowchart in which R ( ⁇ ) for the discrete cosine transform of FIG. 125 is replaced with predetermined rational values.
  • 127 is a flowchart illustrating an image inverse transform method according to another embodiment of the present invention.
  • FIG. 128 is a flowchart for the discrete cosine transform when R ( ⁇ ) in FIG. 125 is replaced with a rational number with a denominator of 2 according to FIG. 126.
  • FIG. 130 shows a substitution table for replacing trigonometric values used in the discrete cosine transform of FIG. 125 including a modified butterfly structure.
  • 131A to 131F are examples of the scaling matrix MF according to the quantization parameter QP used in the conversion of a 32x32 block according to another embodiment of the present invention.
  • 132A to 132F are examples of the inverse scaling matrix V according to the quantization parameter QP used in the conversion of the 32x32 block.
  • FIG. 133 is an alternative table of multiplication years used for the 32 point discrete cosine transform based on FIG.
  • 134A-134F show an example of the scaling matrix MF according to the quantization parameter QP used in the 32 point discrete cosine transform in accordance with another embodiment of the present invention.
  • 135A to 135F illustrate an inverse scaling matrix V according to the quantization parameter QP used in the 32 point discrete cosine transform according to another embodiment of the present invention.
  • 136A to 136F are examples of the scaling matrix MF according to the quantization parameter QP used in the conversion of a 32x32 block according to another embodiment of the present invention.
  • 137A to 136F are examples of the inverse scaling matrix V according to the quantization parameter QP used in the conversion of the 32x32 block.
  • 138A-138F show examples of scaling matrix MF according to quantization parameter QP used in 32 point discrete cosine transform in accordance with another embodiment of the present invention.
  • 139A-139F illustrate an inverse scaling matrix V according to the quantization parameter QP used in the 32 point discrete cosine transform in accordance with another embodiment of the present invention.
  • 140 illustrates an alternative operation process of multiplication used for 32 point transformation.
  • FIG. 141 is a substitution table for replacing a multiplication operation used for the 32 point discrete cosine transform based on FIG. 128.
  • FIG. 142 is an alternative table for replacing a multiplication operation when performing a 32-point discrete cosine transform using a rational number in the form of a power of 2 in the denominator of FIG. 130.
  • an image transformation method is performed by substituting predetermined rational values of trigonometric values among elements of an NxN transformation matrix used for one-dimensional discrete cosine transformation of a block of size NxN (where N is an integer). step; And converting the NxN size block using a matrix having the substituted values.
  • An image conversion apparatus replaces values based on trigonometric functions among elements of an NxN transformation matrix used for one-dimensional discrete cosine transformation of a block of size NxN (where N is an integer) with predetermined rational values, And a transform unit for converting the NxN size block using a matrix having substituted values.
  • An inverse transform method of an image comprises the steps of: receiving quantized transform coefficients of a block of size NxN (N is an integer) constituting a decoded image; Inverse quantization of the received quantized transform coefficients; And substituting values based on a trigonometric function among elements of an NxN inverse transformation matrix used for one-dimensional discrete cosine inverse transformation of the NxN size block with predetermined rational values, and using the matrix having substituted values, the NxN size block. And inversely transforming the inversely quantized transform coefficients of.
  • the inverse transform apparatus of an image selects values based on trigonometric functions among elements of an NxN inverse transform matrix used for one-dimensional discrete cosine inverse transform of an NxN (N is integer) sized block constituting a decoded image. And an inverse transformer for inversely transforming inverse quantized transform coefficients of the N ⁇ N block by using a matrix having substituted values.
  • FIG. 1 illustrates an image encoding apparatus according to an embodiment of the present invention.
  • the image encoding apparatus 100 may include a predictor 110, a subtractor 115, a transformer 120, a quantizer 130, and an entropy encoder 140. ).
  • the prediction unit 110 divides the input image into blocks having a predetermined size, and generates a prediction block through inter prediction or intra prediction for each of the divided blocks.
  • the prediction unit 110 generates the prediction block through a motion prediction and compensation process of generating a motion vector indicating a region similar to the current block within a predetermined search range of a previously encoded and reconstructed reference picture. And intra prediction for generating a prediction block using data of the neighboring block adjacent to the current block.
  • the subtraction unit 115 generates a residual obtained by subtracting the prediction block of the current block and the original image data.
  • the converter 120 converts the residual into the frequency domain.
  • embodiments of the present invention extend a discrete cosine transform matrix defined for relatively small sizes of 4x4 and 8x8 to provide a new discrete cosine transform scheme that can be applied to large blocks of 16x16 or more.
  • the transform unit 120 replaces elements of the transformation matrix used for the discrete cosine transform with rational values, thereby performing integer-based addition and subtraction operations rather than floating-point operations. Performing the discrete cosine transform by shift operation reduces the complexity of the operation and increases the computation speed.
  • the transform unit 120 replaces the trigonometric component of the multiplication factor of the butterfly structure with rational numbers during the one-dimensional discrete cosine transformation of the butterfly structure, and performs four multiplication operations of the butterfly structure.
  • the conversion is performed based on the modified butterfly structure, which replaces the two and two addition operations with three multiplication operations and three addition operations, thereby reducing the computational complexity and reducing the overall computational complexity.
  • the quantization unit 130 quantizes the converted residual.
  • the quantization unit 130 may reduce the error value between the transformed value using the transform matrix approximated by the transform unit 120 and the discrete cosine transform based on the actual floating point operation. Apply a predetermined scaling factor to the transform value.
  • the quantization unit 130 according to an embodiment of the present invention uses the scaling factor to determine an error value between the result of the discrete cosine transform based on the floating point operation and the result of the approximated discrete cosine transform based on the rational number. Decreases. Specific scaling and quantization processes will be described later.
  • the entropy encoder 140 generates a bitstream by performing variable length encoding on the quantized image data.
  • DCT is an effective coding technique for image compression.
  • DCT converts the image from the spatial domain to the frequency domain. Since the image data is small, the low frequency, especially the zero frequency (DC) component has a large value. In addition, since the high frequency component has a relatively low value, most of the information is concentrated toward the low frequency, and if the quantization process is performed properly, a high quality compression image can be obtained at a high compression ratio.
  • DC zero frequency
  • Each DCT method typically performs one-dimensional (1-D) DCT on a column and row basis.
  • FIG. 2 shows a flow graph of four point, eight point, sixteen point, and 32 point discrete cosine transform.
  • f0 to f31 represent input values of the one-dimensional transform.
  • f0 to f31 may be output values of the one-dimensional inverse transform.
  • F0 to F31 represent output values of the one-dimensional transform and are input values of the one-dimensional inverse transform.
  • the data processing direction is from left to right during conversion, and the data processing direction is from right to left during inverse conversion.
  • the two lines intersecting at the point represent the addition of two numbers.
  • the value above each line represents the multiplication by the corresponding coefficient.
  • c ⁇ represents cos ⁇ , s ⁇ represents sin ⁇ , and '-' represents negation.
  • Reference numeral 210 denoted by a dotted line indicates a flowchart of a four point one-dimensional transform
  • reference numeral 220 denotes a flowchart of an eight point one-dimensional transform
  • reference numeral 230 denotes a flowchart of a 16 point one-dimensional transform
  • reference numeral 240 denotes a flowchart of a 32 point one-dimensional transform.
  • a disadvantage of the discrete cosine transform is that computational complexity may increase because c ⁇ and s ⁇ may be irrational numbers depending on the value of ⁇ . As a result, even if the input value is an integer, the final conversion result can be mapped to an irrational number.
  • This discrete cosine transform increases the complexity when implemented in hardware. Accordingly, the image conversion method according to an embodiment of the present invention provides an integer conversion method that has a result value as close as possible to the original discrete cosine transform by coefficients substituted with rational values instead of irrational numbers used for discrete cosine transform. do.
  • FIG. 3 is a flowchart illustrating an image conversion method according to an embodiment of the present invention.
  • step 310 elements constituting the NxN transformation matrix Original_A used for one-dimensional discrete cosine transform of a block of size NxN (where N is an integer) are N variables (ai, i are 0 to N). Substituting values based on an integer up to -1) to produce a substituted NxN transformation matrix (A).
  • cos ⁇ and sin ⁇ may be irrational numbers according to the value of ⁇
  • cos ⁇ and sin ⁇ included in elements of the transformation matrix Original_A are replaced with rational values.
  • the components cos ( ⁇ x (i / 2) / N) (i is an integer from 0 to N-1) of the elements constituting the NxN transformation matrix Original_A are replaced with rational N ai variables. .
  • FIG. 4 is a reference diagram illustrating elements of a substituted N ⁇ N transformation matrix A in which trigonometric components included in elements of a 16 ⁇ 16 transformation matrix are substituted with variables according to an embodiment of the present invention.
  • elements constituting the original 16 ⁇ 16 transformation matrix may be represented by values based on 16 variables ai.
  • a multiplication matrix AxA T of a substituted NxN transform matrix A and a transpose matrix A T of the substituted NxN transform matrix is obtained in step 320.
  • the transformation matrix A is orthogonality.
  • the values of the remaining elements except for the diagonal component of the matrix according to the multiplication result of the transformation matrix A and the transpose matrix A T must be 0.
  • the values of the remaining elements except for the diagonal component among the elements of the multiplication matrix AxA T may not be zero.
  • N variables ai are obtained such that the sum of squares of the remaining elements except the diagonal component of the multiplication matrix AxA T is minimized.
  • Ai for minimizing the value of f in the above equation may be calculated by applying various optimization algorithms.
  • the optimization algorithm it is preferable that the ai variables are rational and the denominator has a power of 2 to enable a shift operation.
  • the reason for setting the constraint that the variable ai is a dyadic rational that is a power of 2 is because the denominator can be implemented using only the light shift operation (>>) when the denominator is a power of 2. .
  • a block of size NxN is transformed using the NxN transformation matrix A substituted with values based on the N variables ai obtained in step 340. That is, if the input value is X, N point one-dimensional discrete cosine transform can be performed by calculating AX.
  • Such a transformation matrix A may be obtained in advance through the above-described process and then stored in a predetermined memory and then applied to an input block having a predetermined size so that the transformation may be performed. That is, the transformation matrix is not calculated every time for the transformation process, but the transformation matrix previously obtained and stored according to an embodiment of the present invention may be used for input blocks of various sizes.
  • X0 to X15 are input values to be transformed
  • the x >> y operation is performed as (x + (1 ⁇ (y-1)). ) >> y or (abs (x) + (1 ⁇ (y-1))) >> y.
  • N when N is 32, similarly to the case where N is 16, the elements constituting the 32x32 transform matrix Original_A used for the one-dimensional discrete cosine transform of a 32x32 block are divided into 32 variables (ai). , i is substituted with values based on an integer from 0 to 31 to generate a substituted N ⁇ N transformation matrix (A).
  • N when N is 32, i.e., when performing a one-dimensional discrete cosine transform for an input block of size 32x32, 32 row units and 32 column units of the input block according to the flowchart shown by reference numeral 240. One-dimensional discrete cosine transform is performed.
  • the transformation matrix representing the transformation process for the input value according to is Original_A
  • the components cos ( ⁇ x (i / 2) / 32) (i is an integer from 0 to 31) of the elements constituting the 32x32 transformation matrix (Original_A) are replaced with 32 rational variables.
  • a 32x32 block is transformed using a 32x32 transformation matrix A substituted with values based on the 32 acquired variables ai.
  • N is 32, that is, performing a one-dimensional discrete cosine transform using a 32x32 transform matrix A for a 32x32 input block
  • X0 to X31 are input values to be transformed
  • B31, C0 to C31, D0 to D31, E0 to E31, F0 to F31, G0 to G31, H0 to H31 are intermediate values
  • Y0 to Y31 are converted values
  • E1 (181 * (D0-D1)) >> 8;
  • E2 (236 * D3 + 97 * D2) >> 8;
  • G10 (120 * F10 + 225 * F13) >> 8;
  • G11 (244 * F11 + 74 * F12) >> 8;
  • N when N is 64, cos ( ⁇ x (i / 2) / 64) of the elements constituting the 64x64 transform matrix (Original_A) used for the one-dimensional discrete cosine transform of a 64x64 block, i is 0 to 0.
  • a 64x64 transformation matrix (A) that is substituted by substituting components of integers up to 63 with 64 ai variables, which are rational numbers, and transpose the substituted 64x64 transformation matrix (A) with the substituted 64x64 transformation matrix.
  • Applying an optimization algorithm to obtain the multiplication matrix AxA T of (A T ) and 64 variables (ai) to minimize the sum of squares of the elements of the multiplication matrix AxA T except for the diagonal component.
  • a 64x64 block is transformed using a 64x64 transformation matrix A substituted with values based on the 64 variables ai.
  • N is 64 described above, that is, performing a one-dimensional discrete cosine transform using a 64x64 transform matrix A for a 64x64 input block
  • X0 to X63 are input values to be transformed
  • Y0 to Y63 are converted values, It can be expressed as the operation process of.
  • NxN is applied by applying a scaling matrix and a shift operation to correct a difference between the original NxN transform matrix Original_A and the substituted NxN transform matrix A used for the discrete cosine transform. Quantization is performed on a transform block having a transformed block of size.
  • the original NxN transformation matrix Original_A is substituted with the transformation matrix.
  • the result value by (A) produces an error. Therefore, according to an embodiment of the present invention, the error is minimized by applying a scaling matrix in the scaling step performed with the quantization step in the quantization step.
  • FIG. 5 is a flowchart illustrating a quantization process according to an embodiment of the present invention.
  • step 510 an NxN sized transformation matrix in which an element of each i th row is substituted with each element of an NxN sized intermediate matrix S having a value of Si (i is an integer from 1 to N).
  • a conversion error matrix Original_A-S_A that is a difference between the values S_A multiplied by elements of the same position in (A) and the original NxN transformation matrix Original_A is obtained.
  • X represents an element-by-element multiplication (element-wise multiplication) operation, in which elements at the same position in the matrix are multiplied.
  • an intermediate matrix S having a size of 16 ⁇ 16 is as follows.
  • Si values are obtained such that the sum of squares of the remaining elements excluding the diagonal components of the transformation error matrix Original_A-S_A is minimized.
  • Si values can be determined using various optimization algorithms. As an example, Si values may be determined by setting an initial value of S1 to (1/4 * 2 ⁇ (1/2)) and applying an optimization algorithm such as the Nelder-Mead Sipmlex method.
  • a scaling matrix MF and a shift operation are applied to perform quantization on a transform block obtained by transforming a block of size N ⁇ N.
  • the quantization is performed by multiplying a scaling matrix MF and a transform block obtained by transforming an N ⁇ N block, and adding a predetermined offset to the following equation;
  • '.MF' means a vector product operation of multiplying elements of the same position of the matrix. As described above, the vector product operation may be expressed as x.
  • FIG. 7 shows an example of a scaling matrix MF according to the quantization parameter QP used in the conversion of a 16x16 block according to an embodiment of the present invention.
  • m 10 when calculating the scaling matrix.
  • the scaling matrix as shown in FIG. 7 is defined for the first six steps of Qstep values (0.625, 0.6875, 0.8125, 0.875, 1, 1.25) without having to be defined for all quantization steps. Because if the quantization parameter QP increases by 6, the quantization step Qstep is doubled, so the scaling matrix MF is defined for the first six steps of Qstep values, and the scaling matrix MF according to the remaining QP is (QP mod 6) can be selected according to the value.
  • Such a scaling matrix MF can be obtained through a process similar to the process of obtaining the scaling matrix for the 16x16 block described above for the 32x32 block or the 64x64 block.
  • 9 to 14 show examples of a scaling matrix MF according to a quantization parameter QP applied to a 32x32 block obtained through such a process.
  • the scaling matrix MF according to the quantization parameter QP applied to the 64x64 block may be defined as follows.
  • the # value of Q # is (QP mod 6), and ONES represents a 64x64 matrix with all elements of 1.
  • inverse quantization is performed by applying an inverse scaling matrix and a shift operation to correct a difference between an original NxN inverse transform matrix used for discrete cosine inverse transform and an NxN inverse transform matrix, which is an inverse of the substituted NxN transform matrix. do.
  • the inverse scaling matrix V is the same position of each element of the intermediate matrix S and the transpose matrix S T of the intermediate matrix, which is also used in generating the aforementioned scaling matrix MF. It can be generated based on PF which is a matrix (SxS T ) multiplied by each element of.
  • a quantization step is a Qstep, a matrix obtained by multiplying each element of the intermediate matrix S and the elements of the same position of the transpose matrix S T of the intermediate matrix, respectively, where PF and n are positive integers.
  • inverse quantization is equal to floor (QP / 6) (floor [x] is less than or equal to x for a value multiplied by the inverse scaling matrix V and the quantized transform coefficients.
  • FIG. 8 illustrates an inverse scaling matrix V according to a quantization parameter QP applied to a 16 ⁇ 16 block according to an embodiment of the present invention.
  • the inverse scaling matrix (V) does not need to be defined for all quantization steps like the scaling matrix of FIG. 7, but can also be defined for the first six steps of Qstep values (0.625, 0.6875, 0.8125, 0.875, 1, 1.25). have.
  • the inverse scaling matrix V according to the remaining QP may be selected according to the (QP mod 6) value.
  • the inverse scaling matrix V according to the quantization parameter applied to the 32x32 input block and the 64x64 block may also be obtained through a process similar to the calculation process of the inverse scaling matrix V applied to the 16x16 block described above.
  • 94A-94F illustrate an example of an inverse scaling matrix V according to the quantization parameter QP applied to a 32x32 block in accordance with one embodiment of the present invention.
  • the inverse scaling matrix V according to the quantization parameter QP applied to the 64x64 block may be defined as follows.
  • the # value of Q # is the value of (QP mod 6), and ONES represents a 64x64 matrix with all elements of 1.
  • FIG. 6 is a flowchart illustrating a quantization process according to another embodiment of the present invention.
  • the quantization process according to another embodiment of the present invention of FIG. 6 differs from the process of generating the intermediate matrix S used for generating the scaling matrix, when compared to the quantization process according to the embodiment of the present invention of FIG. 5.
  • the rest of the process is similar to the quantization process according to an embodiment of the present invention of FIG. 5 described above.
  • each element of the original N ⁇ N transform matrix Original_A used for the discrete cosine transform is divided into elements of the same position of the substituted N ⁇ N transform matrix A to form an intermediate matrix ( S) Acquire.
  • step 620 on the basis of the intermediate matrix (S) matrix (SxS T) obtained by multiplying each of the elements at the same position of the pre matrix (S T) of the elements of the intermediate matrix generated in step 610 and generates a scaling matrix .
  • the scaling matrix MF and the shift operation are applied to perform quantization on the transform block in which the N ⁇ N block is transformed.
  • the quantization is performed by the following equation for a value obtained by adding a predetermined offset to a value obtained by multiplying a scaling matrix MF and a transform block obtained by transforming an N ⁇ N block;
  • '.MF' means a vector product operation of multiplying elements of the same position of the matrix.
  • FIG. 15 shows a flow graph of a 32 point discrete cosine transform in accordance with another embodiment of the present invention.
  • x0 to x31 represent input values.
  • y0 to y31 represent output values of the discrete cosine transform.
  • the data processing direction is from left to right during conversion, and the data processing direction is from right to left during inverse conversion.
  • the two lines intersecting at the point represent the addition of two numbers. '-' Indicates negation.
  • the value R ([theta]) on each line represents a calculation process based on the butterfly structure as shown in FIG.
  • FIG. 16 is a reference diagram illustrating a calculation process of a butterfly structure constituting the 32 point discrete cosine transform of FIG. 15.
  • the operation of the butterfly structure is performed by the following equation for the input values [X1, X2]; It outputs the output value [Y1, Y2] through the same operation.
  • a total of four multiplication operations and two addition operations are performed in the process of mapping two input values to two output values.
  • the image conversion method according to another embodiment of the present invention is based on a modified butterfly structure in which four multiplication operations and two addition operations based on the butterfly structure are replaced by three multiplication operations and three addition operations. Perform image conversion.
  • FIG. 17 is a flowchart illustrating a method of converting an image, according to another exemplary embodiment.
  • trigonometric components of a multiplication factor of a butterfly structure are replaced with rational numbers.
  • cos ⁇ and sin ⁇ are used to calculate the 32 point discrete cosine transform as shown in FIG. 15 in accordance with R ( ⁇ ).
  • the following approximated rational numbers may be used as cos ⁇ and sin ⁇ values according to the ⁇ values.
  • the rational number to be approximated as described below it is preferable to use a rational ratio whose denominator is a power of two.
  • step 1720 a row of blocks of size NxN (N is an integer) based on the modified butterfly structure replacing four multiply and two add operations of the butterfly structure with three multiply and three add operations.
  • a one-dimensional discrete cosine transform is performed on either unit or column unit.
  • FIG. 18 is a view showing a modified butterfly structure according to an embodiment of the present invention.
  • the resultant values Y1 and Y2 of the input values X1 and X2 by the operation of the butterfly structure 1810 as shown on the left side may be expressed by the following equations.
  • the modified butterfly structure 1820 may improve computation speed by reducing complex multiplication operations while having the same result value.
  • the modified butterfly structure 1820 shown in the right side of FIG. 18 is applied to the 32 point discrete cosine transform of FIG. 15, there is an operation that requires a linear combination of sine and cosine. In this case, it is preferable to use the following approximated glass values.
  • FIG. 19 is a view showing a modified butterfly structure according to another embodiment of the present invention.
  • the resultant values Y1 and Y2 of the input values X1 and X2 by the operation of the butterfly structure 1910 as shown on the left side are represented by the following equations.
  • the modified butterfly structure 1920 shown on the right is left. Outputs the same result as the butterfly structure 1910 shown in FIG. In the operation of the modified butterfly structure 1920 shown in the right side, a total of three multiplication operations and three addition or subtraction operations are required. Accordingly, the modified butterfly structure 1920 may improve computation speed by reducing complex multiplication operations while having the same result value.
  • the modified butterfly structure as shown in the right side of FIG. 19 is applied to the 32-point discrete cosine transform of FIG. 15, there are operations requiring fractional and tangent values of sine and cosine. In this case, it is preferable to use the following approximated glass values.
  • each operation result is cos ⁇ and (1 / (1-cos ⁇ )) as indicated by reference numeral 2025 before the final result values Y1 and Y2 are obtained.
  • multiplication operations are performed.
  • the multiplication operation indicated by the reference numeral 2025 is not performed during the conversion process but may be reflected in the scaling matrix performed during the quantization process.
  • the multiplication operation in the transform step may be reduced, and the multiplication operation may instead be integrated into the quantization process.
  • the butterfly structure according to FIG. 20 may consist of only two multiplications and two addition operations.
  • 21 is a view showing a modified butterfly structure according to another embodiment of the present invention.
  • the calculation by the structure 2120 also shows that the same result as the calculation by the butterfly structure 2110 shown on the left side can be obtained.
  • the total number of operations may be reduced compared to the butterfly structure 2110 shown on the left side.
  • X0 to X31 are input values to be converted
  • A0 To A31, B0 to B31, C0 to C31, D0 to D31, E0 to E31, F0 to F31 are intermediate values
  • t is an auxiliary variable
  • Y0 to Y31 are converted values. It can be obtained through the operation of.
  • X0 to X31 are input values to be converted.
  • A0 to A31, B0 to B31, C0 to C31, D0 to D31, E0 to E31, F0 to F31, and G0 to G31 represent intermediate values
  • Y0 to Y31 represent converted values
  • E12 D12 + D13
  • E13 D12-D13
  • E28 ((D28 + D31) * 181) >> 8;
  • E31 ((-D28 + D31) * 181) >> 8;
  • G16 F16-((F17 * 25) >> 7);
  • G17 F17 + ((G16 * 3) >> 4);
  • G28 F28-((F29 * 171) >> 8);
  • G29 F29 + ((G28 * 59) >> 7);
  • G30 F30-((F31 * 25) >> 7);
  • G31 F31 + ((G30 * 3) >> 4);
  • A is a modified discrete cosine transform matrix for transforming a 32x32 block based on the modified butterfly structure shown in FIGS. 18 and 19, it is used for discrete cosine transform of a 32x32 block corresponding to FIG. 15.
  • a quantization may be performed on a transform block obtained by transforming an N ⁇ N block by applying a scaling matrix and a shift operation to correct a difference between the original N ⁇ N transform matrix Original_A and the modified discrete cosine transform matrix A.
  • the scaling matrix includes a discrete cosine transform matrix A of each element of an intermediate matrix S of size NxN having an i-th value of Si (i is an integer from 1 to N).
  • Obtain a transform error matrix Original_A-SxA which is the difference between the elements of the same position of S (S) A, and the original N ⁇ N transform matrix, and obtain the transform error matrix Original_A-SxA.
  • Si values are obtained such that the sum of squares of the remaining elements excluding the diagonal component is minimized, and the same position of each element of the intermediate matrix S of NxN size and the transpose matrix S T of the intermediate matrix to which the obtained Si values are applied.
  • the elements may be generated based on a matrix S x S T multiplied by the elements. Except that the original N ⁇ N transformation matrix Original_A differs, the detailed process is the same as in steps 530 and 540 of FIG.
  • inverse quantization is performed by applying an inverse scaling matrix and a shift operation to correct a difference between an original NxN inverse transform matrix used for discrete cosine inverse transform and an NxN inverse transform matrix, which is an inverse of the substituted NxN transform matrix. do.
  • the inverse scaling matrix also changes because the matrix representing the discrete cosine transform is changed.
  • Inverse scaling matrix (V) is obtained by multiplying each of the elements at the same position of the pre matrix (S T) of the medium to be used in the generation of the above-described scaling matrix (MF) matrix (S) and the intermediate matrix, the matrix (T SxS) It may be generated based on the PF corresponding to.
  • the quantization step is multiplied by Qstep, the intermediate matrix S and the elements of the same position of the transpose matrix S T of the intermediate matrix, respectively, PF and n is a positive integer
  • inverse quantization is equal to floor (QP / 6) (floor [x] is less than or equal to x for a value multiplied by the inverse scaling matrix V and the quantized transform coefficients.
  • the scaling matrix is equal to each element of the intermediate matrix obtained by dividing each element of the original N ⁇ N transform matrix used for the discrete cosine transform by the elements in the same position of the modified discrete cosine transform matrix A. It may be a matrix obtained by multiplying elements of the same position of the transpose matrix of the intermediate matrix.
  • the modified discrete cosine transform matrix A which represents the N point one-dimensional discrete cosine transform, to which the modified butterfly structure shown in the right side of FIGS. 18 and 19 is applied to the algorithm of FIG. 15 is different. 6 is the same as in FIG. 6, and thus, a detailed description thereof is omitted.
  • the scaling matrix divides each element of the intermediate matrix obtained by dividing each element of the original N ⁇ N transform matrix used for the discrete cosine transform by the elements in the same position of the modified discrete cosine transform matrix A.
  • the inverse scaling matrix uses each element of the original 32 point discrete cosine inverse transform matrix (Original_InverseA) instead of using the intermediate matrix (S), and the present invention.
  • the intermediate matrix R may be determined by directly dividing an element of the same position of the 32-point discrete cosine transform matrix InverseA corresponding to the changed butterfly structure.
  • 95 is a block diagram illustrating an image decoding apparatus according to an embodiment of the present invention.
  • an image decoding apparatus 10000 includes an entropy decoding unit 10010, an inverse quantization unit 10020, an inverse transform unit 10030, and a prediction unit 10040.
  • the entropy decoder 10010 extracts prediction mode information, reference picture information, and residual information of the current block to be decoded from the input bitstream.
  • the inverse transform unit 10030 inversely transforms the inverse quantized transform coefficients. As a result of the inverse transform, residual values for a block unit are restored.
  • the inverse transform process may be performed through N point discrete cosine inverse transform using the inverse matrix A ⁇ 1 of the N ⁇ N transform matrix A obtained through various embodiments of the present invention.
  • X0 to X15 When performing the one-dimensional discrete cosine inverse transformation using the inverse transformation matrix A -1 of the substituted 16x16 transformation matrix A with respect to the transformed 16x16 input block according to the embodiment of FIG. 3 described above, X0 to X15 must be inversely transformed.
  • B0 to B15, C0 to C15, D0 to D15, E0 to E15, F0 to F15, G0 to G15 are intermediate values
  • Y0 to Y15 are inversely converted values
  • X0 to X31 must be inverse transformed.
  • A0 to A31, B0 to B31, C0 to C31, D0 to D31, E0 to E31, F0 to F31, G0 to G31, H0 to H31 are intermediate values, and Y0 to Y31 are inversely converted values. , Can be expressed as the following operation process.
  • X0 to X63 must be inverse transformed.
  • A0 to A63, B0 to B63, C0 to C63, D0 to D63, E0 to E63, F0 to F63, G0 to G63, H0 to H63, I0 to I63, O0 to O63 are intermediate values, Y0 to Y63 Is expressed as an inversely transformed value, it can be expressed as
  • X0 to X31 are input values to be inversely transformed, A0 to A31, and B0.
  • C0 to C31, D0 to D31, E0 to E31, F0 to F31, G0 to G31, H0 to H31 are intermediate values
  • t is an auxiliary variable
  • Y0 to Y31 are inverse transformed values. It can be expressed as a process.
  • X0 to X31 are input values to be inversely transformed, A0 to A31, and B0.
  • C0 to C31, D0 to D31, E0 to E31, F0 to F31, G0 to G31, H0 to H31 are intermediate values
  • t is an auxiliary variable
  • Y0 to Y31 are inverse transformed values. It can be expressed as a process.
  • 96 is a flowchart illustrating an inverse transform method of an image according to an embodiment of the present invention.
  • quantized transform coefficients of a block of size NxN (N is an integer) constituting a decoded image are received.
  • step 10120 inverse quantizes the received quantized transform coefficients.
  • inverse quantization is the floor (QP / 6) (floor [x] is the largest integer less than or equal to x, and QP is the quantization parameter) bit for the value of the inverse scaling matrix (V) multiplied by the quantized transform coefficient. As long as the bit shift can be performed.
  • step 10130 the elements constituting the NxN transformation matrix used for the one-dimensional discrete cosine transform of the NxN size block are replaced with values based on N variables to generate a substituted NxN transformation matrix, and Obtain a multiply matrix of the transpose matrix of the substituted N ⁇ N transform matrix, obtain N variables such that the sum of squares of the elements except the diagonal component of the obtained multiply matrix is minimized, and obtain values based on the obtained N variables. using the inverse matrix of the substituted NxN transformation matrix (a) NxN inverse matrix (a -1) and inverse transformation blocks of de-quantized transform coefficients of size NxN.
  • 97 is a flowchart illustrating an inverse transform method of an image according to another embodiment of the present invention.
  • NxN (N is an integer) quantized transform coefficients of a block constituting an image to be decoded are received.
  • inverse quantization may be performed using an inverse of the transformation matrix corresponding to the modified butterfly structure corresponding to FIGS. 18 and 19.
  • the modified butterfly replaces the trigonometric component of the multiplication factor of the butterfly structure with rational numbers and replaces the four multiplication and two addition operations of the butterfly structure with three multiplication and three addition operations.
  • a one-dimensional discrete cosine inverse transform on the dequantized transform coefficients is performed based on the structure.
  • the prediction unit 10040 generates a prediction block of the current block decoded through inter prediction or intra prediction, and reconstructs the current block by adding the residual value and the prediction block output from the inverse transformer 10030.
  • 98 is a flowchart illustrating an image converting method according to another embodiment of the present invention.
  • an NxN transform matrix used for one-dimensional discrete cosine transform of a block of size NxN (N is an integer) is decomposed into a multiplication of a predetermined permutation matrix and rotation matrices.
  • the process of discrete cosine transform shown in FIG. 2 may be represented by a matrix combined with permutation and rotation.
  • the 16 point discrete cosine transform may be expressed as a multiplication of one permutation matrix and six rotation matrices.
  • the matrix In is an identity matrix of NxN size
  • Jn may be a matrix in which the (i, j) th element of the In matrix is mapped to the (i, N + 1-j) th element.
  • J4 ⁇ 0001; 0010; 0100; 1000 ⁇ .
  • On is defined as a zero matrix of size nxn in which all components are zero.
  • the matrix F16 performing the 16-point discrete cosine transform of FIG. 2 may be expressed by Equation 1 using a predetermined permutation matrix P and rotation matrices A1 to A6.
  • Equation 1 the permutation matrix P and the rotation matrices A1 to A6 are represented as shown in FIGS. 99A to 99G.
  • Equation 2 the matrix F32 performing 32-point discrete cosine transform is expressed by Equation 2 below.
  • the matrix I 16 is a unit matrix having a size of 16x16
  • J 16 is a diagonal matrix having a size of 16x16 having a value of + i or -i of the (i, j) matrix component.
  • O 16 is also a 16x16 zero matrix with all components zero.
  • F16 is a matrix for performing the 16-point discrete cosine transform of FIG.
  • G16 is a matrix defined as in Equation 3 below.
  • Equation 3 the matrixes A1 to A7 are represented as shown in FIGS. 100A to 100G.
  • the values based on the trigonometric functions sin and cos among the elements of the permutation matrix and the rotation matrices decomposed in step 9820 are replaced with predetermined rational values having a denominator of a power of 2.
  • Equations 1 to 3 described above include values based on the cos and sin functions.
  • values based on trigonometric functions such as cos and sin are replaced with dyadic rationals having a denominator of a power of 2.
  • the following cos and sin values used for the 16-point discrete cosine transform are substituted by rational numbers having the right denominator replaced by a power of two.
  • NxN-sized blocks are transformed using the product of the permutation matrix and the rotation matrices with substituted values. That is, if the input value is X, the 16-point discrete cosine transform may perform 16-point one-dimensional discrete cosine transform by calculating F16xX using F16 of Equation 1. The 32-point discrete cosine transform may perform 32-point one-dimensional discrete cosine transform by calculating F32xX using F32 of Equation 2.
  • a transformation matrix such as F16 or F32 may be acquired in advance through the above-described process and then stored in a predetermined memory and then applied to an input block having a predetermined size so that the transformation may be performed. That is, the transformation matrix is not calculated every time for the transformation process, but the transformation matrix previously obtained and stored according to an embodiment of the present invention may be used for input blocks of various sizes.
  • X0 to X15 are input values to be transformed, and B0 to B15 and C0 to When C15, D0 to D15, E0 to E15, F0 to F15, and G0 to G15 are intermediate values, and Y0 to Y15 represent converted values, they may be expressed as follows.
  • the corresponding 16 point inverse discrete cosine transform process is expressed as the following operation process.
  • Y0 to Y15 are input values to be inversely transformed
  • B0 to B15, C0 to C15, D0 to D15, E0 to E15, F0 to F15, and G0 to G15 are intermediate values
  • X0 to X15 are inversely converted values. Indicates.
  • N 32, that is, performing the one-dimensional discrete cosine transform of Equation 2 using the substituted trigonometric function value for the 32x32 input block
  • X0 to X31 are input values to be converted
  • A0 to G31 are intermediate values.
  • Y0 to Y31 may represent the converted value, and may be expressed as in the following calculation process.
  • the corresponding 32 point inverse discrete cosine transform process is expressed as the following operation process.
  • Y0 to Y31 are input values to be inversely transformed
  • A0 to G31 are intermediate values
  • X0 to X31 are inversely converted values.
  • N is 64, that is, performing a one-dimensional discrete cosine transform using a substituted trigonometric function value for a 64x64 input block
  • X0 to X63 are input values to be transformed
  • A0 to O63 are intermediate values
  • Y0 to Y63 When is a converted value, it can be expressed as the following operation process.
  • the corresponding 64-point inverse discrete cosine transform process is expressed as the following operation process.
  • X0 to X63 represent input values to be inversely transformed
  • A0 to O63 represent intermediate values
  • Y0 to Y63 represent inversely transformed values.
  • a quantization may be performed on the transform block obtained by transforming a block of size N ⁇ N by applying a scaling matrix and a shift operation to correct the N ⁇ N size.
  • FIG. 7 an example of the scaling matrix MF according to the quantization parameter QP used in the conversion of the 16 ⁇ 16 block is shown in FIG. 7.
  • the scaling matrix MF according to the quantization parameter QP applied to the 32x32 block is shown in FIGS. 9 to 14.
  • the scaling matrix MF according to the quantization parameter QP applied to the 64x64 block may be defined as follows.
  • the # value of Q # is (QP mod 6), and ONES represents a 64x64 matrix with all elements of 1.
  • the inverse quantization step includes an inverse scaling matrix for correcting a difference value between an original NxN inverse transform matrix used for discrete cosine inverse transform and an NxN inverse transform matrix that is an inverse of the substituted NxN transform matrix; Inverse quantization is performed by applying a shift operation.
  • the inverse scaling matrix V according to the quantization parameter QP applied to the 16 ⁇ 16 block is shown in FIG. 8.
  • the inverse scaling matrix V according to the quantization parameter applied to the 32x32 input block and the 64x64 block may also be obtained through a process similar to the calculation process of the inverse scaling matrix V applied to the 16x16 block described above.
  • 101A-101F illustrate an example of an inverse scaling matrix V according to quantization parameter QP applied to a 32x32 block in accordance with another embodiment of the present invention.
  • the inverse scaling matrix V according to the quantization parameter QP applied to the 64x64 block may be defined as follows.
  • the # value of Q # is the value of (QP mod 6), and ONES represents a 64x64 matrix with all elements of 1.
  • each transformation process is expressed as the product of the dyadic rational, whose denominator is a power of 2, and the median. If you decompose a constant in the form of a dyadic rational with a denominator of 2 in the form of addition and subtraction only for fractions of numerator 1, the operation can be performed by addition, subtraction, and shift operations alone without multiplication. have. In addition, if the number of terms is minimized during decomposition, the number of addition, subtraction, and shift operations can be reduced.
  • 59/64 one of the dyadic rationals whose denominator is a power of 2, can be changed to (1-1 / 16-1 / 64).
  • each multiplication operation used for the transformation and inverse transformation may be replaced with an operation as shown in the following tables to perform the transformation and operation.
  • FIG. 102A shows an alternative operation procedure of multiplication used for 16x16 transform
  • FIG. 102B shows an alternative operation procedure of multiplication used for 32x32 transform
  • FIG. 102C shows an alternative operation process of multiplication used for 64x64 transform.
  • an operation such as 63 * x shown first in FIG. 102A is replaced with only a shift operation and a subtraction operation such as (X ⁇ 6) ⁇ x.
  • the present invention reduces the complexity of the operation without degrading the performance of the transform and the inverse transform by replacing the multiplication operation requiring a large amount of computation in the hardware by the shift operation.
  • the process of replacing the multiplication operation with the shift operation can reduce the additional operation in consideration of the denominator of the value used for the transformation and inverse transformation.
  • 3/4 * x can be replaced by an operation such as ((x ⁇ 1) + x) >> 2.
  • an alternative operation of the multiplication shown in FIGS. 102A to 102C may be additionally replaced in consideration of the denominator value used for the calculation, as shown in FIGS. 103A to 103C.
  • X0 to X15 are input values to be transformed, and B0 to B15 and C0 to When C15, D0 to D15, E0 to E15, F0 to F15, and G0 to G15 are intermediate values, and Y0 to Y15 represent converted values, they may be expressed as follows.
  • the corresponding 16 point inverse discrete cosine transform process is expressed as the following operation process.
  • Y0 to Y15 are input values to be inversely transformed
  • B0 to B15, C0 to C15, D0 to D15, E0 to E15, F0 to F15, and G0 to G15 are intermediate values
  • X0 to X15 are inversely converted values. Indicates.
  • N is 32, i.e., performing a one-dimensional discrete cosine transform of Equation 2 using a substituted trigonometric function value for a 32x32 input block using the alternative multiplication procedure shown in FIGS. 103A to 103C.
  • X0 to X31 are input values to be converted
  • A0 to G31 are intermediate values
  • Y0 to Y31 are converted values, they may be expressed as in the following calculation process.
  • the corresponding 32 point inverse discrete cosine transform process is expressed as the following operation process.
  • Y0 to Y31 are input values to be inversely transformed
  • A0 to G31 are intermediate values
  • X0 to X31 are inversely converted values.
  • G16 ((y1 >> 5) + (y1 >> 6))-(y31-(y31 >> 8));
  • G17 (y17-(y17 >> 2)-(y17 >> 7)-(y17 >> 8))-((y15 >> 1) + (y15 >> 3) + (y15 >> 5) + ( y15 >> 7) + (y15 >> 8));
  • G18 ((y9 >> 1)-(y9 >> 4)-(y9 >> 7)-(y9 >> 8))-(y23-(y23 >> 4)-(y23 >> 5)-( y23 >> 8));
  • G19 (y25-(y25 >> 5)-(y25 >> 6)-(y25 >> 7)-(y25 >> 8))-((y7 >> 2) + (y7 >> 4) + ( y7 >> 6) + (y7 >> 7));
  • G20 ((y5 >> 2)-(y5 >> 7))-(y27-(y27 >> 5));
  • G21 (
  • E4 ((y4 >> 3) + (y4 >> 4) + (y4 >> 8))-(y28-(y28 >> 6)-(y28 >> 8));
  • E5 ((y20 >> 1) + (y20 >> 2) + (y20 >> 4) + (y20 >> 6))-((y12 >> 1) + (y12 >> 5) + (y12> > 6) + (y12 >> 7));
  • E6 ((y12 >> 1) + (y12 >> 2) + (y12 >> 4) + (y12 >> 6)) + ((y20 >> 1) + (y20 >> 5) + (y20> > 6) + (y20 >> 7));
  • E7 ((y28 >> 3) + (y28 >> 4) + (y28 >> 8)) + (y4-(y4 >> 6)-(y4 >> 8));
  • E8 F8 + F9;
  • E9 F8-F9;
  • E10 F11-F10;
  • E11 F11 + F10;
  • E12
  • N is 64, that is, performing a one-dimensional discrete cosine transform using a substituted trigonometric function value for a 64x64 input block using the multiplication alternative arithmetic procedure illustrated in FIGS. 103A to 103C, X0 to X63 Is an input value to be converted, A0 to O63 are intermediate values, and Y0 to Y63 are converted values.
  • y0 iTmp-(iTmp >> 2)-(iTmp >> 5)-(iTmp >> 7)-(iTmp >> 8);
  • iTmp (D0-D1);
  • y32 iTmp-(iTmp >> 2)-(iTmp >> 5)-(iTmp >> 7)-(iTmp >> 8);
  • y16 (D3-(D3 >> 4)-(D3 >> 7)-(D3 >> 8)-(D3 >> 9)) + ((D2 >> 2) + (D2 >> 3) + ( D2 >> 7));
  • y48 ((D3 >> 2) + (D3 >> 3) + (D3 >> 7))-(D2-(D2 >> 4)-(D2 >> 7)-(D2 >> 8)-( D2 >> 9));
  • the corresponding 64-point inverse discrete cosine transform process is expressed as the following operation process.
  • Y0 to Y63 are input values to be inversely transformed
  • A0 to O63 are intermediate values
  • X0 to X63 are inversely converted values.
  • F8 ((y4 >> 4) + (y4 >> 5) + (y4 >> 8))-(y60-(y60 >> 8)-(y60 >> 10));
  • F9 ((y36 >> 1) + (y36 >> 2) + (y36 >> 6) + (y36 >> 7))-((y28 >> 1) + (y28 >> 3) + (y28> > 7) + (y28 >> 9));
  • F10 ((y20 >> 2) + (y20 >> 3) + (y20 >> 4) + (y20 >> 5) + (y20 >> 9) + (y20 >> 10))-(y44-( y44 >> 4)-(y44 >> 5)-(y44 >> 6)-(y44 >> 7)-(y44 >> 10));
  • F11 (y52-(y52 >> 5)-(y52 >> 7)-(y52 >> 8))-((y12 >> 2) + (y12 >> 5) + (y12 >> 7) + ( y12 >> 10));
  • F12
  • E4 ((y8 >> 3) + (y8 >> 4) + (y8 >> 7))-(y56-(y56 >> 6)-(y56 >> 8));
  • E5 (y40-(y40 >> 3)-(y40 >> 5)-(y40 >> 7)-(y40 >> 8)-(y40 >> 10))-((y24 >> 1) + ( y24 >> 5) + (y24 >> 6) + (y24 >> 7) + (y24 >> 10));
  • E6 (y24-(y24 >> 3)-(y24 >> 5)-(y24 >> 7)-(y24 >> 8)-(y24 >> 10)) + ((y40 >> 1) + ( y40 >> 5) + (y40 >> 6) + (y40 >> 7) + (y40 >> 10));
  • E7 ((y56 >> 3) + (y56 >> 4) + (y56 >> 7)) + (y8-(y8 >> 6)-(y8 >> 8));
  • E8 F8
  • x0 to x31 represent input values.
  • y0 to y31 represent output values of the discrete cosine transform.
  • the data processing direction is from left to right during conversion, and the data processing direction is from right to left during inverse conversion.
  • the two lines intersecting at the point represent the addition of two numbers. '-' Indicates negation.
  • the value R ([theta]) on each line represents a calculation process based on the butterfly structure as shown in FIG.
  • reference numeral 10410 denotes a 4x4 point discrete cosine transform
  • reference numeral 10420 denotes an 8x8 point discrete cosine transform
  • reference numeral 10430 denotes a portion that performs 16x16 point discrete cosine transform.
  • values based on the trigonometric functions sin and cos among the elements for each point operation shown in FIG. 104 are replaced with predetermined rational values having a denominator of a power of 2.
  • the value can be used.
  • the cos and sin values used for the 16 point discrete cosine transform can be replaced by the following values.
  • X0 to X15 are input values to be converted, B0 to B15, C0 to C15, D0 to D15, and E0 to E15.
  • F0 to F15, G0 to G15 are intermediate values, and Y0 to Y15 represent converted values, they may be expressed as in the following calculation process.
  • the corresponding 16 point inverse discrete cosine transform process is expressed as the following operation process.
  • Y0 to Y15 are input values to be inversely transformed
  • B0 to B15, C0 to C15, D0 to D15, E0 to E15, F0 to F15, and G0 to G15 are intermediate values
  • X0 to X15 are inversely converted values. Indicates.
  • examples of the scaling matrix MF according to the quantization parameter QP used in the conversion of the 16 ⁇ 16 block are shown in FIGS. 105A to 105F.
  • Examples of the inverse scaling matrix V according to the quantization parameter QP used in the conversion of the 16 ⁇ 16 block are shown in FIGS. 106A to 106F.
  • the scaling matrix MF and the inverse scaling matrix V may be calculated through direct division.
  • A is a matrix that performs 16-point discrete cosine transform
  • the inverse scaling matrix V is a matrix Sx obtained by multiplying each element of the intermediate matrix S and the elements of the same position of the transpose matrix S T of the intermediate matrix, which are also used in generating the aforementioned scaling matrix MF.
  • S T may be generated based on PF.
  • a quantization step is a Qstep, a matrix obtained by multiplying each element of the intermediate matrix S and the elements of the same position of the transpose matrix S T of the intermediate matrix, respectively, where PF and n are positive integers.
  • 107A-107F show an example of the scaling matrix MF according to the quantization parameter QP used in the 16 point discrete cosine transform in accordance with another embodiment of the present invention.
  • M 10 when the scaling matrix is calculated in FIGS. 107A to 107F.
  • 108A-108F illustrate an inverse scaling matrix V according to the quantization parameter QP used in the 16 point discrete cosine transform in accordance with another embodiment of the present invention.
  • the values based on the trigonometric functions sin and cos among the elements for the 32-point operation illustrated in FIG. 104 may be replaced with the following rational values having a denominator of a power of 2.
  • X0 to X31 are input values to be converted, A0 to Z31 are intermediate values, and Y0 to Y31 are converted values. It can be expressed as the following operation process.
  • the corresponding 32 point inverse discrete cosine transform process is expressed as the following operation process.
  • Y0 to Y31 are input values to be inversely transformed
  • A0 to G31 are intermediate values
  • X0 to X31 are inversely converted values.
  • a discrete cosine transform is performed similarly to step 350 of FIG.
  • a transform block transformed with an NxN block by applying a scaling matrix and a shift operation to correct the difference between the original NxN transform matrix (Original_A) used for the discrete cosine transform and the transform using the substituted trigonometric value.
  • Quantization may be performed.
  • examples of the scaling matrix MF according to the quantization parameter QP used in the conversion of the 32x32 block are shown in FIGS. 109A to 109F.
  • Examples of the inverse scaling matrix V according to the quantization parameter QP used in the conversion of the 32x32 block are as shown in FIGS. 110A to 110F.
  • the inverse scaling matrix V is a matrix Sx obtained by multiplying each element of the intermediate matrix S and the elements of the same position of the transpose matrix S T of the intermediate matrix, which are also used in generating the aforementioned scaling matrix MF.
  • S T may be generated based on PF.
  • a quantization step is a Qstep, a matrix obtained by multiplying each element of the intermediate matrix S and the elements of the same position of the transpose matrix S T of the intermediate matrix, respectively, where PF and n are positive integers.
  • 112A-112F illustrate an inverse scaling matrix V according to the quantization parameter QP used in the 32 point discrete cosine transform in accordance with another embodiment of the present invention.
  • each conversion process may be expressed as a product of a dyadic rational having a denominator of 2 and a median.
  • FIG. 113A illustrates an alternative operation process of multiplication used for a 16x16 transform
  • FIG. 113B illustrates an alternative operation process of multiplication used for a 32x32 transform.
  • an operation such as 49 * x which is first displayed may be replaced by only a shift operation and an addition operation such as (X ⁇ 5) + (x ⁇ 4) + x. .
  • the process of replacing the multiplication operation with the shift operation can reduce the additional operation in consideration of the denominator of the value used for the transformation and inverse transformation.
  • the multiplication operation used for the 16 point discrete cosine transform based on FIG. 104 may be replaced with an operation form in which multiplication is omitted according to the table shown in FIG. 114A.
  • the multiplication operation used for the 32-point discrete cosine transform based on FIG. 104 may be replaced with an operation form in which multiplication is omitted according to the table shown in FIG. 114B.
  • the operation of the butterfly structure included in the discrete cosine transform based on FIG. 104 described above may be replaced by the operation of the modified butterfly structure as illustrated in FIG. 20. That is, the operation of the butterfly fly structure is performed by the following equation for the input value [X1, X2]; It outputs the output value [Y1, Y2] through the operation, such as the operation of the butterfly structure substantially corresponds to the rotation (rotation) transformation.
  • the operation of the butterfly structure can be replaced by Equation 4 below.
  • the operation of the butterfly structure of FIG. 104 may be replaced with the modified butterfly structure of FIG. 20 as shown in Equation 4.
  • the values based on the cos and sin functions used in the discrete cosine transform of FIG. 104, including the modified butterfly structure, are replaced by a dyadic rational with denominator powers of two.
  • the cos and sin values used for the 16-point discrete cosine transform may be substituted for rational values substituted with rational numbers of the denominator of the right side as follows.
  • X0 to X15 represent input values to be converted
  • B0 to B15, C0 to C15, D0 to D15, E0 to E15, F0 to F15, G0 to G15 are intermediate values
  • Y0 to Y15 represent converted values.
  • the corresponding 16 point inverse discrete cosine transform process is expressed as the following operation process.
  • Y0 to Y15 are input values to be inversely transformed
  • A0 to G15 are intermediate values
  • X0 to X15 are inversely converted values.
  • Examples of the scaling matrix MF according to the quantization parameter QP used in the 16 point discrete cosine transform according to another embodiment of the present invention are the same as in FIGS. 115A to 115F.
  • Examples of the inverse scaling matrix V according to the quantization parameter QP used in the 16 point inverse discrete cosine transform are shown in FIGS. 116A to 116F.
  • the inverse scaling matrix V is a matrix Sx obtained by multiplying each element of the intermediate matrix S and the elements of the same position of the transpose matrix S T of the intermediate matrix, which are also used in generating the aforementioned scaling matrix MF.
  • S T may be generated based on PF.
  • a quantization step is a Qstep, a matrix obtained by multiplying each element of the intermediate matrix S and the elements of the same position of the transpose matrix S T of the intermediate matrix, respectively, where PF and n are positive integers.
  • 118A-118F illustrate an inverse scaling matrix V according to the quantization parameter QP used in the 16 point discrete cosine transform in accordance with another embodiment of the present invention.
  • the corresponding 32 point inverse discrete cosine transform process is expressed as the following operation process.
  • Y0 to Y31 are input values to be inversely transformed
  • A0 to z31 are intermediate values
  • X0 to X31 are inversely converted values.
  • Examples of the scaling matrix MF according to the quantization parameter QP used in the 32 point discrete cosine transform according to another embodiment of the present invention are the same as in FIGS. 119A to 119F.
  • An example of an inverse scaling matrix V according to the quantization parameter QP used in the 32 point inverse discrete cosine transform is shown in FIGS. 120A to 120F.
  • the inverse scaling matrix V is a matrix Sx obtained by multiplying each element of the intermediate matrix S and the elements of the same position of the transpose matrix S T of the intermediate matrix, which are also used in generating the aforementioned scaling matrix MF.
  • S T may be generated based on PF.
  • a quantization step is a Qstep, a matrix obtained by multiplying each element of the intermediate matrix S and the elements of the same position of the transpose matrix S T of the intermediate matrix, respectively, where PF and n are positive integers.
  • 121A through 121F illustrate examples of the scaling matrix MF according to the quantization parameter QP used in the 32 point discrete cosine transform according to another embodiment of the present invention.
  • 122A-122F illustrate an inverse scaling matrix V according to the quantization parameter QP used in the 32 point discrete cosine transform in accordance with another embodiment of the present invention.
  • each conversion process may be expressed as a product of a dyadic rational having a denominator of 2 and a median.
  • FIG. 123A shows the substitution operation of the multiplication used for the 16x16 transform
  • FIG. 123B shows the substitution operation of the multiplication used for the 32x32 transform.
  • the process of replacing a multiplication operation with a shift operation may reduce an additional operation in consideration of a denominator of a value used for transformation and inverse transformation.
  • the multiplication operation used for the 16 point discrete cosine transform based on FIG.
  • Equation 4 may be replaced with an operation form in which multiplication is omitted according to the table shown in FIG. 124A.
  • the multiplication operation used for the 32-point discrete cosine transform based on FIG. 104 and Equation 4 may be replaced with an operation form in which the multiplication is omitted according to the table shown in FIG. 124B.
  • 125 shows a flowchart of a discrete cosine transform according to another embodiment of the present invention.
  • x0 to x31 represent input values.
  • y0 to y31 represent output values of the discrete cosine transform.
  • the data processing direction is from left to right during conversion, and the data processing direction is from right to left during inverse conversion.
  • the two lines intersecting at the point represent the addition of two numbers. '-' Indicates negation.
  • the value R ([theta]) on each line represents a calculation process based on the butterfly structure as shown in FIG. As shown in FIG. 125, the even (0th, 2nd, 4th ...) discrete cosine transform is symmetrical, and the odd (1st, 3rd, 5th ...) discrete cosine transform is It is negative symmetric.
  • dctmtx represents a discrete cosine transform matrix.
  • the values based on trigonometric functions among the elements for each point operation shown in FIG. 125 are substituted with predetermined rational values having a denominator of a power of 2. Can be. Specifically, R ( ⁇ ) for the discrete cosine transform of FIG.
  • FIG. 128 is a flowchart for the discrete cosine transform when R ( ⁇ ) in FIG. 125 is replaced with a rational number with a denominator of 2 according to FIG. 126.
  • Operation of the butterfly structure included in the discrete cosine transform based on FIG. 125 or 128 described above may be replaced by operation of the modified butterfly structure as shown in FIG. 20. That is, the operation of the butterfly structure may be replaced with Equation 4 described above. If ⁇ is greater than pi / 4, the calculation of the butterfly structure may be changed as shown in FIG. Accordingly, the operation of the butterfly structure provided in FIG. 125 or 128 may be replaced with the modified butterfly structure of FIG. 20 as shown in Equation 4, or the modified butterfly structure as shown in FIG. 129 when ⁇ is larger than pi / 4. Can be replaced.
  • the modified butterfly structure are replaced by a dyadic rational with denominator powers of 2.
  • the trigonometric values used for the discrete cosine transform of FIG. 125 including the modified butterfly structure may be substituted for rational values substituted with rational numbers having a denominator of 2 as shown in FIG. 130.
  • X0 to X31 are input values to be converted, A0 to Z31 are intermediate values, and Y0 to Y31 are converted values. In this case, it can be expressed as the following operation process.
  • the corresponding 32 point inverse discrete cosine transform process is expressed as the following operation process.
  • Y0 to Y31 are input values to be inversely transformed
  • A0 to G31 are intermediate values
  • X0 to X31 are inversely converted values.
  • the denominator is similar to the step 350 of FIG. 3 described above.
  • a transform block transformed with an NxN block by applying a scaling matrix and a shift operation to correct the difference between the original NxN transform matrix (Original_A) used for the discrete cosine transform and the transform using the substituted trigonometric value.
  • Quantization may be performed.
  • examples of the scaling matrix MF according to the quantization parameter QP used in the conversion of the 32x32 block are shown in FIGS. 131A to 131F.
  • Examples of the inverse scaling matrix V according to the quantization parameter QP used in the conversion of the 32x32 block are as shown in FIGS. 132A to 132F.
  • the inverse scaling matrix V is a matrix Sx obtained by multiplying each element of the intermediate matrix S and the elements of the same position of the transpose matrix S T of the intermediate matrix, which are also used in generating the aforementioned scaling matrix MF.
  • S T may be generated based on PF.
  • a quantization step is a Qstep, a matrix obtained by multiplying each element of the intermediate matrix S and the elements of the same position of the transpose matrix S T of the intermediate matrix, respectively, where PF and n are positive integers.
  • 135A to 135F illustrate an inverse scaling matrix V according to the quantization parameter QP used in the 32 point discrete cosine transform according to another embodiment of the present invention.
  • the 32-point discrete cosine transform may be performed by using X0 to X31 as an input value to be converted, A0 to Z31 as an intermediate value, and Y0 to Y31 as a converted value. have.
  • the corresponding 32 point inverse discrete cosine transform process is expressed as the following operation process.
  • Y0 to Y31 are input values to be inversely transformed
  • A0 to G31 are intermediate values
  • X0 to X31 are inversely converted values.
  • a discrete cosine transform is performed similarly to step 350 of FIG.
  • a transform block transformed with an NxN block by applying a scaling matrix and a shift operation to correct the difference between the original NxN transform matrix (Original_A) used for the discrete cosine transform and the transform using the substituted trigonometric value.
  • Quantization may be performed.
  • examples of the scaling matrix MF according to the quantization parameter QP used in the conversion of the 32x32 block are shown in FIGS. 136A to 136F.
  • Examples of the inverse scaling matrix V according to the quantization parameter QP used in the conversion of the 32x32 block are shown in FIGS. 137A to 137F.
  • the inverse scaling matrix V is a matrix Sx obtained by multiplying each element of the intermediate matrix S and the elements of the same position of the transpose matrix S T of the intermediate matrix, which are also used in generating the aforementioned scaling matrix MF.
  • S T may be generated based on PF.
  • a quantization step is a Qstep, a matrix obtained by multiplying each element of the intermediate matrix S and the elements of the same position of the transpose matrix S T of the intermediate matrix, respectively, where PF and n are positive integers.
  • 138A-138F show examples of scaling matrix MF according to quantization parameter QP used in 32 point discrete cosine transform in accordance with another embodiment of the present invention.
  • m 10.
  • 139A-139F illustrate an inverse scaling matrix V according to the quantization parameter QP used in the 32 point discrete cosine transform in accordance with another embodiment of the present invention.
  • the aforementioned 32 point transform and inverse transform process based on FIG. 128 may be changed to a form that does not include multiplication.
  • each conversion process may be expressed as a product of a dyadic rational having a denominator of 2 and a median.
  • 140 illustrates an alternative operation process of multiplication used for 32 point transformation.
  • the process of replacing a multiplication operation with a shift operation may reduce an additional operation in consideration of a denominator of a value used for transformation and inverse transformation.
  • the multiplication operation used for the 32 point discrete cosine transform based on FIG. 128 may be replaced with an operation form in which multiplication is omitted according to the table shown in FIG. 141.
  • the butterfly structure included in the discrete cosine transform of FIG. 128 is replaced with the modified butterfly structure of FIG. 20 or FIG. 129 according to the ⁇ value, and the rational number having a denominator of 2 is used as shown in FIG. 130.
  • the multiplication operation may be performed through an operation process in which the multiplication is replaced with a shift operation as illustrated in FIG. 142.
  • the process of replacing a multiplication operation with a shift operation may reduce an additional operation in consideration of a denominator of a value used for transformation and inverse transformation.
  • the multiplication operation used for the 32 point discrete cosine transform based on FIG. 142 may be replaced with the operation form according to the table shown in FIG.
  • 127 is a flowchart illustrating an image inverse transform method according to another embodiment of the present invention.
  • quantized transform coefficients of a block of size NxN (N is an integer) constituting the image to be decoded are received.
  • step 12730 triangular values based on trigonometric functions among the elements of the NxN inverse transform matrix used for the one-dimensional discrete cosine inverse transform of the NxN size block are substituted with predetermined rational values, and the matrix having the substituted values is used to determine the NxN size.
  • Inverse transform the inverse quantized transform coefficients of a block.
  • the system according to the present invention can be embodied as computer readable codes on a computer readable recording medium.
  • the computer-readable recording medium includes all kinds of recording devices in which data that can be read by a computer system is stored. Examples of the recording medium include ROM, RAM, CD-ROM, magnetic tape, floppy disk, optical data storage device and the like.
  • the computer readable recording medium can also be distributed over network coupled computer systems so that the computer readable code is stored and executed in a distributed fashion.

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Mathematical Physics (AREA)
  • Mathematical Analysis (AREA)
  • Theoretical Computer Science (AREA)
  • Computational Mathematics (AREA)
  • Pure & Applied Mathematics (AREA)
  • Mathematical Optimization (AREA)
  • Signal Processing (AREA)
  • Data Mining & Analysis (AREA)
  • Multimedia (AREA)
  • Discrete Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Databases & Information Systems (AREA)
  • Algebra (AREA)
  • Compression Or Coding Systems Of Tv Signals (AREA)
  • Complex Calculations (AREA)

Abstract

영상의 변환, 역변환 방법 및 장치가 개시된다. 본 발명에 따르면 NxN크기의 블록의 1차원 이산 코사인 변환에 이용되는 NxN 변환 행렬의 원소들 중 삼각함수에 기초한 값들을 소정의 유리수 값들로 치환하고, 치환된 값들을 갖는 행렬을 이용하여 NxN 크기의 블록을 변환하는 것을 특징으로 한다.

Description

영상의 변환 방법 및 장치, 역변환 방법 및 장치
본 발명은 영상 부호화, 복호화 방법 및 장치에 관한 것으로, 보다 상세히는 큰 크기의 블록에 대한 향상된 변환, 역변환 방법 및 장치에 관한 것이다.
H.264 및 MPEG-4와 같은, 현재 국제 비디오 코딩 표준에서, 비디오 신호는 시퀀스, 프레임, 슬라이스, 매크로 블록 및 블록으로 계층적으로 분할되며, 블록은 최소 처리 유닛이 된다. 인코딩 측면에서, 인트라-프레임 또는 인터-프레임 예측을 통하여, 블록의 예측 잔류 오류가 획득되며, 블록 변환은 에너지가 소수의 계수에 집중될 수 있도록 실행되고, 양자화, 스캐닝, 런 렝스 코딩(Run Length Coding) 및 엔트로피 코딩을 통하여, 이미지 데이터는 압축되며, 코딩된 비트스트림으로 기록된다. 디코딩 측면에서, 처리 절차는 반대가 된다. 우선, 엔트로피 코딩의 블록 변환 계수가 비트 스트림으로부터 추출된다. 그리고 나서, 역양자화 및 역변환을 통하여, 블록의 예측 잔류 오류는 재구성되며, 예측 정보는 블록의 비디오 데이터를 재구성하기 위하여 사용된다. 인코딩-디코딩 처리절차에서, 변환 모듈은 비디오 압축의 기초이며, 변환성능은 코덱의 일반적인 성능에 직접적으로 영향을 준다.
이산 코사인 변환(DCT)은 MPEG-1 및 H.261과 같은 초기 비디오 코딩 표준에서 채택되었다. 1974년 이산 코사인 변환의 제안 이후에, DCT는 이미지 및 비디오 코딩 분야에서 널리 사용되었다. 변환 도메인 내의 이미지 요소의 상관성을 제거하며, 고효율 이미지 압축을 위한 기반을 마련하기 때문에, 그것의 변환 성능은 모든 차선 변환(sub-optimal transform)중 우수하다. 그러나, DCT 변환 행렬은 부동 소수점 수(floating point number)로 표현되기 때문에, 대량의 부동 소수점 계산으로 인하여 많은 시스템 자원이 소모된다. 변환 효율을 개선하는 한편, 큰 크기의 블록에 대한 변환을 수행하기 위하여 새로운 DCT 변환 알고리즘의 필요성이 증가되었다.
본 발명이 해결하고자 하는 기술적 과제는 보다 효율적인 이산 코사인 변환을 이용하여 영상을 변환, 역변환하는 방법 및 장치를 제공하는 데 있다.
본 발명은 소정의 유리수로 치환된 값을 갖으며 곱셈 연산을 쉬프트 연산 등으로 대체한 변환 행렬을 통해 영상의 변환에 소요되는 연산량을 감소시킨다.
본 발명에 따르면 큰 크기의 블록에 대한 변환 및 역변환시에 부동 소수점 연산이 아닌 정수 기반의 연산 과정을 통해서 복잡도를 감소시키고 연산 속도를 증가시키는 영상의 변환 및 역변환 방법을 제공할 수 있다.
또한, 본 발명에 따르면 스케일링 팩터를 통해 부동 소수점 연산에 기반한 변환 과정과의 오차값을 보상함으로써 복잡도를 감소시키면서 보다 효율적인 영상의 변환 및 역변환 방법을 제공할 수 있다.
도 1은 본 발명의 일 실시예에 따른 영상 부호화 장치를 도시한다.
도 2는 4 포인트, 8 포인트, 16 포인트, 32 포인트 이산 코사인 변환의 흐름도(flow graph)를 도시한다.
도 3은 본 발명의 일 실시예에 따른 영상 변환 방법을 나타낸 플로우 차트이다.
도 4는 본 발명의 일 실시예에 따라서 16x16 변환 행렬의 원소에 구비된 삼각함수 성분을 변수들로 치환한 치환된 NxN 변환 행렬(A)의 원소들을 나타낸 참조도이다.
도 5는 본 발명의 일 실시예에 따른 양자화 과정을 나타낸 플로우 차트이다.
도 6은 본 발명의 다른 실시예에 따른 양자화 과정을 나타낸 플로우 차트이다.
도 7은 본 발명의 일 실시예에 따라서 16x16 블록의 변환시에 이용되는 양자화 파라메터(QP)에 따른 스케일링 행렬(MF)의 예를 도시한다.
도 8은 본 발명의 일 실시예에 따라서 16x16 블록에 적용되는 양자화 파라메터(QP)에 따른 역스케일링 행렬(V)을 도시한다.
도 9 내지 도 14는 본 발명의 일 실시예에 따른 32x32 블록에 적용되는 양자화 파라메터(QP)에 따른 스케일링 행렬(MF)의 예를 도시한다.
도 15는 본 발명의 다른 실시예에 따른 32 포인트 이산 코사인 변환의 흐름도(flow graph)를 도시한다.
도 16은 도 15의 32 포인트 이산 코사인 변환을 구성하는 버터플라이 구조의 연산 과정을 나타낸 참조도이다.
도 17은 본 발명의 다른 실시예에 따른 영상 변환 방법을 나타낸 플로우 차트이다.
도 18은 본 발명의 일 실시예에 따른 변경된 버터플라이 구조를 나타낸 도면이다.
도 19는 본 발명의 다른 실시예에 따른 변경된 버터플라이 구조를 나타낸 도면이다.
도 20은 본 발명의 또 다른 실시예에 따른 변경된 버터 플라이 구조를 나타낸 도면이다.
도 21은 본 발명의 또 다른 실시예에 따른 변경된 버터 플라이 구조를 나타낸 도면이다.
도 22 내지 도 27은 도 18의 우측에 도시된 변경된 버터 플라이 구조를 적용하였을 때 32x32 입력 블록에 대한 양자화 파라메터(QP)에 따른 스케일링 행렬(MF)의 예를 도시한다.
도 28 내지 도 33은 도 19의 우측에 도시된 변경된 버터 플라이 구조를 적용하였을 때 32x32 입력 블록에 대한 양자화 파라메터(QP)에 따른 스케일링 행렬(MF)의 예를 도시한다.
도 34 내지 도 39는 도 18의 우측에 도시된 변경된 버터 플라이 구조를 적용하였을 때 32x32 입력 블록에 대한 양자화 파라메터(QP)에 따른 역스케일링 행렬 (v)의 예를 도시한다.
도 40 내지 도 45는 도 19의 우측에 도시된 변경된 버터 플라이 구조를 적용하였을 때 32x32 입력 블록에 대한 양자화 파라메터(QP)에 따른 역스케일링 행렬 (V)의 예를 도시한다.
도 46 내지 도 51은 도 18의 우측에 도시된 변경된 버터 플라이 구조를 적용하였을 때 32x32 입력 블록에 대한 양자화 파라메터(QP)에 따른 스케일링 행렬(MF)의 예를 도시한다.
도 52 내지 도 57은 도 19의 우측에 도시된 변경된 버터 플라이 구조를 적용하였을 때 32x32 입력 블록에 대한 양자화 파라메터(QP)에 따른 스케일링 행렬(MF)의 예를 도시한다.
도 58 내지 도 63은 도 18의 우측에 도시된 변경된 버터 플라이 구조를 적용하였을 때 32x32 입력 블록에 대한 양자화 파라메터(QP)에 따른 역스케일링 행렬 (v)의 예를 도시한다.
도 64 내지 도 69는 도 19의 우측에 도시된 변경된 버터 플라이 구조를 적용하였을 때 32x32 입력 블록에 대한 양자화 파라메터(QP)에 따른 역스케일링 행렬 (V)의 예를 도시한다.
도 70 내지 도 75는 도 18의 우측에 도시된 변경된 버터 플라이 구조를 적용하였을 때 32x32 입력 블록에 대한 양자화 파라메터(QP)에 따른 스케일링 행렬(MF)의 예를 도시한다.
도 76 내지 도 81은 도 19의 우측에 도시된 변경된 버터 플라이 구조를 적용하였을 때 32x32 입력 블록에 대한 양자화 파라메터(QP)에 따른 스케일링 행렬(MF)의 예를 도시한다.
도 82 내지 도 87은 도 18의 우측에 도시된 변경된 버터 플라이 구조를 적용하였을 때 32x32 입력 블록에 대한 양자화 파라메터(QP)에 따른 역스케일링 행렬 (v)의 예를 도시한다.
도 88 내지 도 93은 도 19의 우측에 도시된 변경된 버터 플라이 구조를 적용하였을 때 32x32 입력 블록에 대한 양자화 파라메터(QP)에 따른 역스케일링 행렬 (V)의 예를 도시한다.
도 94a 내지 도 94f는 본 발명의 일 실시예에 따라서 32x32 블록에 적용되는 양자화 파라메터(QP)에 따른 역스케일링 행렬(V)의 예를 도시한다.
도 95은 본 발명의 일 실시예에 따른 영상 복호화 장치를 나타낸 블록도이다.
도 96은 본 발명의 일 실시예에 따른 영상의 역변환 방법을 나타낸 플로우 차트이다.
도 97는 본 발명의 다른 실시예에 다른 영상의 역변환 방법을 나타낸 플로우 차트이다.
도 98은 본 발명의 또 다른 실시예에 따른 영상 변환 방법을 나타낸 플로우 차트이다.
도 99a 내지 도 99g는 수학식 1에서 순열행렬 P 및 회전 행렬 A1 내지 A6의 일 실시예를 나타낸 도면이다.
도 100a 내지 도 100g는 수학식 3에서 행렬 A1 내지 A7의 일 실시예를 나타낸 도면이다.
도 101a 내지 도 101f는 본 발명의 또 다른 실시예에 따라서 32x32 블록에 적용되는 양자화 파라메터(QP)에 따른 역스케일링 행렬(V)의 예를 도시한다.
도 102a 내지 도 102c는 각각 16x16, 32x32, 64x64 변환에 이용되는 곱셈의 대체 연산 과정을 나타낸다.
도 103a 내지 103c는 도 102a 내지 도 102c에 도시된 곱셈의 대체 연산 과정을 변경하는 다른 실시예에 따른 대체 연산 과정을 나타낸다.
도 104은 본 발명의 또 다른 실시예에 따른 이산 코사인 변환의 흐름도(flow graph)를 도시한다.
도 105a 내지 도 105f는 본 발명의 또 다른 실시예에 따라서 16x16 블록의 변환시에 이용되는 양자화 파라메터(QP)에 따른 스케일링 행렬(MF)의 일 예를 도시한다.
도 106a 내지 도 106f는 16x16 블록의 변환시에 이용되는 양자화 파라메터(QP)에 따른 역스케일링 행렬(V)의 일 예를 도시한다.
도 107a 내지 도 107f는 본 발명의 또 다른 실시예에 따라서 16 포인트 이산 코사인 변환시에 이용되는 양자화 파라메터(QP)에 따른 스케일링 행렬(MF)의 다른 예를 도시한다.
도 108a 내지 도 108f는 본 발명의 또 다른 실시예에 따라서 16 포인트 이산 코사인 변환시에 이용되는 양자화 파라메터(QP)에 따른 역스케일링 행렬(V)을 도시한다.
도 109a 내지 도 109f는 본 발명의 또 다른 실시예에 따라서 32x32 블록의 변환시에 이용되는 양자화 파라메터(QP)에 따른 스케일링 행렬(MF)의 일 예를 도시한다.
도 110a 내지 도 110f는 본 발명의 또 다른 실시예에 따라서 32x32 블록의 변환시에 이용되는 양자화 파라메터(QP)에 따른 역스케일링 행렬(V)의 일 예를 도시한다.
도 111a 내지 도 111f는 본 발명의 또 다른 실시예에 따라서 32 포인트 이산 코사인 변환시에 이용되는 양자화 파라메터(QP)에 따른 스케일링 행렬(MF)의 예를 도시한다.
도 112a 내지 도 112f는 본 발명의 또 다른 실시예에 따라서 32 포인트 이산 코사인 변환시에 이용되는 양자화 파라메터(QP)에 따른 역스케일링 행렬(V)을 도시한다.
도 113a는 16x16 변환에 이용되는 곱셈의 대체 연산 과정, 도 113b는 32x32 변환에 이용되는 곱셈의 대체 연산 과정을 나타낸다.
도 114a 내지 도 114b는 도 104에 기초한 산 코사인 변환에 이용되는 곱셈 연산을 대체하는 대체 연산의 일 예를 나타낸다.
도 115a 내지 도 115f는 본 발명의 또 다른 실시예에 따라서 16 포인트 이산 코사인 변환시에 이용되는 양자화 파라메터(QP)에 따른 스케일링 행렬(MF)의 다른 예이다.
도 116a 내지 도 116f는 본 발명의 또 다른 실시예에 따라서 16 포인트 역 이산 코사인 변환시에 이용되는 양자화 파라메터(QP)에 따른 역스케일링 행렬(V)의 다른 예를 도시한다.
도 117a 내지 도 117f는 본 발명의 또 다른 실시예에 따라서 16 포인트 이산 코사인 변환시에 이용되는 양자화 파라메터(QP)에 따른 스케일링 행렬(MF)의 예를 도시한다.
도 118a 내지 도 118f는 본 발명의 또 다른 실시예에 따라서 16 포인트 이산 코사인 변환시에 이용되는 양자화 파라메터(QP)에 따른 역스케일링 행렬(V)을 도시한다.
도 119a 내지 도 119f는 본 발명의 또 다른 실시예에 따라서 32 포인트 이산 코사인 변환시에 이용되는 양자화 파라메터(QP)에 따른 스케일링 행렬(MF)의 예를 도시한다.
도 120a 내지 도 120f는 32 포인트 역 이산 코사인 변환시에 이용되는 양자화 파라메터(QP)에 따른 역스케일링 행렬(V)의 예를 도시한다.
도 121a 내지 도 121f는 본 발명의 또 다른 실시예에 따라서 32 포인트 이산 코사인 변환시에 이용되는 양자화 파라메터(QP)에 따른 스케일링 행렬(MF)의 예를 도시한다.
도 122a 내지 도 122f는 본 발명의 또 다른 실시예에 따라서 32 포인트 이산 코사인 변환시에 이용되는 양자화 파라메터(QP)에 따른 역스케일링 행렬(V)을 도시한다.
도 123a는 16x16 변환에 이용되는 곱셈의 대체 연산 과정, 도 123b는 32x32 변환에 이용되는 곱셈의 대체 연산 과정을 나타낸다.
도 124a 내지 도 124b는 각각 도 123a 및 도 123b의 대체 연산 과정에서 추가적으로 연산을 감소시킨 대체 연산 과정을 나타낸다.
도 125는 본 발명의 또 다른 실시예에 따른 이산 코사인 변환의 흐름도를 도시한다.
도 126은 도 125의 이산코사인 변환을 위한 R(θ)를 소정의 유리수값들로 치환한 흐름도를 나타낸다.
도 127은 본 발명의 또 다른 실시예에 따른 영상 역변환 방법을 나타낸 플로우 차트이다.
도 128은 도 126에 따라서 도 125의 R(θ)를 분모가 2의 거듭제곱인 유리수 형태로 치환하였을 때의 이산 코사인 변환을 위한 흐름도를 나타낸다.
도 129는 θ가 pi/4보다 큰 경우, 변경된 버터 플라이 구조를 나타낸다.
도 130은 변경된 버터플라이 구조를 포함하는 도 125의 이산 코사인 변환에 이용되는 삼각함수값들을 대체하기 위한 대체표를 나타낸다.
도 131a 내지 131f는 본 발명의 또 다른 실시예에 따라서 32x32 블록의 변환시에 이용되는 양자화 파라메터(QP)에 따른 스케일링 행렬(MF)의 예이다.
도 132a 내지 도 132f는 32x32 블록의 변환시에 이용되는 양자화 파라메터(QP)에 따른 역스케일링 행렬(V)의 예이다.
도 133은 도 142에 기초한 32 포인트 이산 코사인 변환에 이용되는 곱셈 연의 대체표이다.
도 134a 내지 도 134f는 본 발명의 또 다른 실시예에 따라서 32 포인트 이산 코사인 변환시에 이용되는 양자화 파라메터(QP)에 따른 스케일링 행렬(MF)의 예를 도시한다.
도 135a 내지 도 135f는 본 발명의 또 다른 실시예에 따라서 32 포인트 이산 코사인 변환시에 이용되는 양자화 파라메터(QP)에 따른 역스케일링 행렬(V)을 도시한다.
도 136a 내지 도 136f는 본 발명의 또 다른 실시예에 따라서 32x32 블록의 변환시에 이용되는 양자화 파라메터(QP)에 따른 스케일링 행렬(MF)의 예이다.
도 137a 내지 도 136f는 32x32 블록의 변환시에 이용되는 양자화 파라메터(QP)에 따른 역스케일링 행렬(V)의 예이다.
도 138a 내지 도 138f는 본 발명의 또 다른 실시예에 따라서 32 포인트 이산 코사인 변환시에 이용되는 양자화 파라메터(QP)에 따른 스케일링 행렬(MF)의 예를 도시한다.
도 139a 내지 도 139f는 본 발명의 또 다른 실시예에 따라서 32 포인트 이산 코사인 변환시에 이용되는 양자화 파라메터(QP)에 따른 역스케일링 행렬(V)을 도시한다.
도 140는 32 포인트 변환에 이용되는 곱셈의 대체 연산 과정을 나타낸다.
도 141은 도 128에 기초한 32 포인트 이산 코사인 변환에 이용되는 곱셈 연산을 대체하기 위한 대체표이다.
도 142는 도 130의 분모가 2의 거듭제곱 형태인 유리수를 이용하여 32 포인트 이산 코사인 변환을 수행할 때 곱셈 연산을 대체하기 위한 대체표이다.
본 발명의 실시예에 따른 영상의 변환 방법은 NxN(N은 정수) 크기의 블록의 1차원 이산 코사인 변환에 이용되는 NxN 변환 행렬의 원소들 중 삼각함수에 기초한 값들을 소정의 유리수 값들로 치환하는 단계; 및 상기 치환된 값들을 갖는 행렬을 이용하여 상기 NxN 크기의 블록을 변환하는 단계를 포함하는 것을 특징으로 한다.
본 발명의 실시예에 따른 영상 변환 장치는 NxN(N은 정수) 크기의 블록의 1차원 이산 코사인 변환에 이용되는 NxN 변환 행렬의 원소들 중 삼각함수에 기초한 값들을 소정의 유리수 값들로 치환하고, 치환된 값들을 갖는 행렬을 이용하여 상기 NxN 크기의 블록을 변환하는 변환부를 포함하는 것을 특징으로 한다.
본 발명의 실시예에 따른 영상의 역변환 방법은 복호화되는 영상을 구성하는 NxN(N은 정수) 크기의 블록의 양자화된 변환 계수들을 수신하는 단계; 상기 수신된 양자화된 변환 계수들을 역양자화하는 단계; 및 상기 NxN 크기의 블록의 1차원 이산 코사인 역변환에 이용되는 NxN 역변환 행렬의 원소들 중 삼각함수에 기초한 값들을 소정의 유리수 값들로 치환하고, 치환된 값들을 갖는 행렬을 이용하여 상기 NxN 크기의 블록의 역양자화된 변환 계수들을 역변환하는 단계를 포함하는 것을 특징으로 한다.
본 발명의 실시예에 따른 영상의 역변환 장치는 복호화되는 영상을 구성하는 NxN(N은 정수) 크기의 블록의 1차원 이산 코사인 역변환에 이용되는 NxN 역변환 행렬의 원소들 중 삼각함수에 기초한 값들을 소정의 유리수 값들로 치환하고, 치환된 값들을 갖는 행렬을 이용하여 상기 NxN 크기의 블록의 역양자화된 변환 계수들을 역변환하는 역변환부를 포함하는 것을 특징으로 한다.
이하, 첨부된 도면을 참조하여 본 발명의 바람직한 실시예들에 대하여 구체적으로 설명한다.
도 1은 본 발명의 일 실시예에 따른 영상 부호화 장치를 도시한다.
도 1을 참조하면, 본 발명의 일 실시예에 따른 영상 부호화 장치(100)는 예측부(110), 감산부(115), 변환부(120), 양자화부(130) 및 엔트로피 부호화부(140)를 포함한다.
예측부(110)는 입력 영상을 소정 크기의 블록들로 분할하고, 분할된 각 블록에 대하여 인터 예측 또는 인트라 예측을 통해 예측 블록을 생성한다. 구체적으로, 예측부(110)는 이전에 부호화된 후 복원된 참조 픽처의 소정 탐색 범위 내에서 현재 블록과 유사한 영역을 가리키는 움직임 벡터를 생성하는 움직임 예측 및 보상 과정을 통해 예측 블록을 생성하는 인터 예측 및 현재 블록에 인접한 주변 블록의 데이터를 이용하여 예측 블록을 생성하는 인트라 예측을 수행한다.
감산부(115)는 현재 블록의 예측 블록과 원 영상 데이터를 감산한 레지듀얼을 생성한다.
변환부(120)는 레지듀얼을 주파수 영역으로 변환한다. 특히, 본 발명의 실시예들에서는 기존의 4x4, 8x8의 상대적으로 작은 크기에 대해서 정의되었던 이산 코사인 변환 행렬을 확장하여 16x16 이상의 큰 크기의 블록에도 적용될 수 있는 새로운 이산 코사인 변환 방식을 제공한다. 후술되는 바와 같이 본 발명의 일 실시예에 따른 변환부(120)는 기존의 이산 코사인 변환에 이용되는 변환 행렬의 원소들을 유리수 값으로 치환함으로써, 부동 소수점 연산이 아닌 정수 기반의 덧셈 및 뺄셈 연산과 시프트 연산에 의하여 이산 코사인 변환을 수행함으로써 연산의 복잡도를 감소시키는 한편 연산 속도를 증가시킨다. 또한, 본 발명의 다른 실시예에 따른 변환부(120)는 버터 플라이 구조의 1차원 이산 코사인 변환시에 버터플라이 구조의 곱셈 인수 중 삼각 함수 성분을 유리수로 치환하고, 버터플라이 구조의 4개의 곱셈 연산과 2개의 덧셈 연산 과정을 3개의 곱셈 연산과 3개의 덧셈 연산 과정으로 대체한 변경된 버터플라이 구조에 기초하여 변환을 수행함으로써 하드웨어적으로 복잡도가 큰 곱셈의 연산을 감소시키며 전체적인 연산 복잡도를 감소시킨다.
양자화부(130)는 변환된 레지듀얼을 양자화한다. 특히, 본 발명의 일 실시예에 따른 양자화부(130)는 변환부(120)에서 근사화된 변환 행렬을 이용하여 변환된 값과 실제 부동 소수점 연산에 기반한 이산 코사인 변환 사이의 오차값을 감소시키기 위하여 소정의 스케일링 팩터를 변환값에 적용한다. 이와 같이 본 발명의 일 실시예에 따른 양자화부(130)는 스케일링 팩터를 이용하여 부동 소수점 연산에 기반한 이산 코사인 변환에 의한 결과값과 유리수 기반의 근사화된 이산 코사인 변환에 의한 결과값 사이의 오차값을 감소시킨다. 구체적인 스케일링 및 양자화 과정에 대해서는 후술한다.
엔트로피 부호화부(140)는 양자화된 영상 데이터에 대하여 가변 길이 부호화를 수행하여 비트스트림을 생성한다.
이하, 본 발명의 일 실시예에 따른 영상 변환 방법에 대하여 구체적으로 설명한다.
DCT는 영상 압축을 위한 효과적인 코딩 기술인데, DCT를 이용하면 영상을 공간 영역에서 주파수 영역으로 변환할 수 있으며, 영상 데이터는 변화가 적으므로 낮은 주파수, 특히 0 주파수(DC) 성분이 큰 값을 가지게 되고, 높은 주파수 성분은 상대적으로 낮은 값을 갖게 되므로서, 대부분의 정보가 낮은 주파수 쪽으로 몰리게 되어 양자화 과정을 적절히 거치면 높은 압축율로 우수한 화질의 압축 이미지를 얻을 수 있다.
영상 부호화시에 다양한 DCT 방법이 있다. 그 종류로는 처리 속도면에서는 빠르지만 정확성이 조금 떨어지는 정수(integer)를 사용하는 방법, 그리고 처리 속도는 느리지만 정확성이 뛰어난 부동 소수점(floating-point) 연산을 사용하는 방법 등이 있다. 각각의 DCT 방법은 열 단위 및 행 단위로, 즉 1차원(1-D) DCT를 수행하는 것이 일반적이다.
도 2는 4 포인트, 8 포인트, 16 포인트, 32 포인트 이산 코사인 변환의 흐름도(flow graph)를 도시한다.
도 2를 참조하면, f0 내지 f31은 일차원 변환의 입력값들을 나타낸다. 동시에 f0 내지 f31은 일차원 역변환의 출력값이 될 수 있다. F0 내지 F31은 일차원 변환의 출력값들을 나타내는 동시에 일차원 역변환의 입력값이다. 변환시에 데이터 처리 방향은 좌측에서 우측이며, 역변환시에 데이터 처리 방향은 우측에서 좌측이다. 점에서 교차하는 2개의 라인은 2개의 수의 덧셈을 나타낸다. 각 라인 위의 값은 해당 계수에 의한 곱셈을 나타낸다. cθ는 cosθ, sθ는 sinθ를 나타내며, '-'는 부정(negation)을 나타낸다. 점선으로 표시된 도면 부호 210은 4 포인트 일차원 변환의 흐름도, 도면 부호 220은 8 포인트 일차원 변환의 흐름도, 도면 부호 230은 16 포인트 일차원 변환의 흐름도, 도면 부호 240은 32 포인트 일차원 변환의 흐름도를 나타낸다.
흐름도(200)에 도시된 바와 같이 이산 코사인 변환의 단점은 cθ 및 sθ가 θ의 값에 따라서 무리수(irrational number)가 될 수 있기 때문에 연산 복잡도가 증가할 수 있다는 것이다. 이로 인해서 입력값이 정수라고 하더라도 최종 변환 결과값은 무리수로 매핑될 수 있다. 이러한 이산 코사인 변환 과정은 하드웨어로 구현시에 복잡도를 증가시킨다. 따라서, 본 발명의 일 실시예에 따른 영상 변환 방법은 이산 코사인 변환에 이용되는 무리수 대신에 유리수 값으로 치환된 계수들에 의하여 원래의 이산 코사인 변환과 최대한 유사한 결과값을 갖도록 하는 정수 변환 방법을 제공한다.
도 3은 본 발명의 일 실시예에 따른 영상 변환 방법을 나타낸 플로우 차트이다.
도 3을 참조하면, 단계 310에서 NxN(N은 정수) 크기의 블록의 1차원 이산 코사인 변환에 이용되는 NxN 변환 행렬(Original_A)을 구성하는 원소들을 N개의 변수들(ai, i는 0부터 N-1까지의 정수)에 기초한 값들로 치환하여 치환된 NxN 변환 행렬(A)을 생성한다.
다시 도 2를 참조하면, N이 16인 경우, 즉 16x16 크기의 입력 블록에 대한 1차원 이산 코사인 변환 수행시에 도면 부호 230으로 도시된 흐름도를 따라서 입력 블록의 16개의 행 단위 및 16개의 열 단위 별로 1차원 이산 코사인 변환이 수행된다. 16개의 입력값을 f=[f0, f1, f2, ..., f14, f15]T, 변환 결과값을 F=[F0, F1, F2, ..., F14, F15]T, 도면 부호 230에 따른 입력값에 대한 변환 과정을 나타낸 변환 행렬을 Original_A라고 한다면 1차원 이산 코사인 변환은 F=Original_Axf 로 표현된다.
전술한 바와 같이, cosθ 및 sinθ는 θ의 값에 따라서 무리수가 될 수 있기 때문에, 본 발명의 일 실시예에 따르면 변환 행렬(Original_A)의 원소들에 포함된 cosθ 및 sinθ를 유리수 값으로 치환한다. 구체적으로, NxN 변환 행렬(Original_A)을 구성하는 원소들의 cos(πx(i/2)/N)(i는 0부터 N-1까지의 정수)인 성분을 유리수인 N개의 ai 변수들로 치환된다. 전술한 예에서, N=16인 경우라면, cos 0은 a0으로, cos(πx(1/2)/16)은 a1으로, cos(πx(2/2)/16)은 a2로, cos(πx(3/2)/16)은 a3로, cos(πx(4/2)/16)는 a4로, cos(πx(5/2)/16)는 a5로, cos(πx(6/2)/16)는 a6로, cos(πx(7/2)/16)는 a7, cos(πx(8/2)/16)는 a8, cos(πx(9/2)/16)는 a9, cos(πx(10/2)/16)는 a10, cos(πx(11/2)/16)는 a11, cos(πx(12/2)/16)는 a12, cos(πx(13/2)/16)는 a13, cos(πx(14/2)/16)는 a14, cos(πx(15/2)/16)는 a15로 치환된다. sinθ 성분은 sinθ=cos(90-θ)와 같은 관계를 이용하여 마찬가지로 ai 변수들로 치환될 수 있다.
도 4는 본 발명의 일 실시예에 따라서 16x16 변환 행렬의 원소에 구비된 삼각함수 성분을 변수들로 치환한 치환된 NxN 변환 행렬(A)의 원소들을 나타낸 참조도이다. 도 4를 참조하면, 원래의 16x16 변환 행렬을 구성하는 원소들은 16개의 변수들 ai에 기초한 값들로 표현될 수 있다.
다시 도 3을 참조하면, 단계 320에서 치환된 NxN 변환 행렬(A)과 치환된 NxN 변환 행렬의 전치 행렬(transpose)(AT)의 곱셈 행렬(AxAT)을 획득한다.
변환 행렬(A)이 갖추어야 할 조건 중 하나는 직교성(orthogonality)이다. 변환 행렬(A)이 직교성을 갖기 위해서는 변환 행렬(A)과 그 전치 행렬(AT)의 곱셈 결과에 따른 행렬의 원소들 중 대각 성분을 제외한 나머지 원소의 값이 0이어야 한다. 본 발명의 일 실시예에서는 원래 무리수였던 값을 유리수인 변수들 ai로 치환하였기 때문에 곱셈 행렬(AxAT)의 원소들 중 대각 성분을 제외한 나머지 원소의 값이 0이 아닐 수 있다. 그러나, 최대한 직교성을 갖도록 하기 위해서, 단계 330에서 곱셈 행렬(AxAT)의 대각 성분을 제외한 나머지 원소들의 제곱합이 최소가 되도록 하는 N개의 변수들(ai)을 획득한다. 전술한 도 4와 같은 16x16 크기의 블록에 대한 변환 행렬과 그 전치 행렬과의 곱셈 행렬(AxAT)을 계산한 다음, 곱셈 행렬(AxAT)의 대각 성분을 제외한 나머지 원소들의 제곱합은 다음의 수학식 f와 같다.
f = 128*a8^4*a15^2*a4^2*a11^2*a12^2+128*a8^4*a1^2*a4^2*a5^2*a12^2-64*a8^2*a13^2*a9^2-64*a5^2*a4^4*a7^2*a8^2+32*a11^2*a12^2*a9^2*a4^2+128*a8^4* a15^2*a12^2*a3^2*a4^2+64*a8^4*a5^2*a12^4*a7^2+64*a8^4*a5^2*a4^4*a7^2+128*a1^2*a4^2*a7^2*a8^2*a12^2+32*a15^2*a12^2*a9^2*a4^2-256*a8^2*a2^2*a6^2+256*a8^4 *a14^2*a10^2-256*a14^2*a10^2*a8^2+16*a15^2*a13^2+16*a7^2*a12^4*a11^2+ 16*a9^2*a4^4*a5^2+16*a11^2*a4^4*a7^2+16*a5^2*a12^4*a9^2-64*a8^2*a11^2*a9^2-64*a8^2*a5^2*a7^2+64*a8^4*a5^2*a7^2+64*a8^2*a13^2*a11^2+64*a8^4*a13^2*a11^2-32*a11^2*a12^2*a13^2+16*a11^2*a12^4*a13^2-32*a5^2*a4^2*a3^2+16 *a5^2*a4^4*a3^2-32*a3^2*a12^2*a5^2+16*a3^2*a12^4*a5^2-32*a13^2*a4^2 *a11^2+64*a8^2*a3^2*a5^2+64*a8^4*a3^2*a5^2+16*a15^2*a11^2+16*a1^2*a5^2+64*a2^2*a10^2-32*a7^2*a12^2*a1^2+16*a7^2*a12^4*a1^2-32*a9^2*a4^2*a15^2+16*a9^2*a4^4 *a15^2-32*a15^2*a12^2*a9^2+16*a15^2*a12^4*a9^2-32*a1^2*a4^2*a7^2+16*a1^2 *a4^4*a7^2+64*a8^2*a15^2*a9^2+64*a8^4*a15^2*a9^2+64*a8^2*a1^2*a7^2+64*a8^4*a1^2*a7^2+64*a8^4*a13^2*a9^2+16*a15^2*a12^4*a11^2+16*a1^2*a4^4*a5^2+16*a15^2*a4^4*a11^2+16*a1^2*a12^4*a5^2-64*a8^2*a15^2*a5^2-64*a8^2*a1^2*a11^2+64*a8^4 *a1^2*a11^2+64*a8^2*a13^2*a5^2+64*a8^4*a13^2*a5^2-32*a3^2*a12^2*a11^2+16 *a3^2*a12^4*a11^2-32*a3^2*a4^2*a11^2+16*a3^2*a4^4*a11^2-32*a13^2*a4^2*a5^2+16 *a13^2*a4^4*a5^2-32*a13^2*a12^2*a5^2+16*a13^2*a12^4*a5^2+16*a3^2* a12^4*a7^2+16*a13^2*a4^4*a9^2+16*a3^2*a4^4*a7^2+16*a13^2*a12^4*a9^2-64*a8^2*a3^2*a9^2+64*a8^4*a3^2*a9^2+64*a8^4*a13^2*a7^2+64*a8^4*a3^2*a11^2+16*a11^2*a9^2+16*a3^2*a7^2-64*a8^2*a15^2*a3^2+64*a8^4*a15^2*a3^2-64*a8^2* a1^2*a13^2+64*a8^4*a1^2*a13^2+16*a1^2*a4^4*a3^2+16*a15^2*a4^4*a13^2+16*a1^2*a12^4*a3^2+16*a15^2*a12^4*a13^2-256*a2^2*a10^2*a8^2+16*a15^2*a7^2+ 128*a8^4*a1^2*a4^2*a13^2*a12^2+16*a5^2*a9^2+16*a3^2*a5^2-64*a7^2*a12^4* a11^2*a8^2+64*a8^4*a7^2*a12^4*a11^2+64*a13^2*a4^4*a5^2*a8^2+32*a3^2*a4^2*a11^2*a12^2+64*a3^2*a4^4*a11^2*a8^2+64*a3^2*a12^4*a11^2*a8^2-128*a8^4*a13^2* a5^2*a4^2-128*a8^4*a13^2*a5^2*a12^2+32*a13^2*a12^2*a7^2*a4^2+ 64*a2^2*a6^2+64*a8^4*a11^2*a4^4*a7^2-128*a8^4*a15^2*a7^2*a12^2 +32*a1^2*a4^2*a9^2*a12^2+64*a1^2*a4^4*a9^2*a8^2+64*a1^2*a12^4*a9^2*a8^2+32*a15^2*a12^2*a7^2*a4^2+64*a15^2*a12^4*a7^2*a8^2+64*a8^4*a15^2*a4^4*a7^2+16*a1^2*a4^4*a9^2-128*a1^2*a12^2*a5^2*a8^2*a4^2-128*a15^2*a4^2*a11^2*a8^2*a12^2-64*a1^2*a4^4*a5^2*a8^2+16*a15^2*a5^2+16*a13^2*a11^2+64*a14^2*a10^2+128*a3^2*a4^2*a11^2*a8^2*a12^2+16*a1^2*a12^4*a13^2+128*a13^2*a4^2*a11^2*a8^2*a12^2+128*a3^2*a12^2*a5^2*a8^2*a4^2-128*a3^2*a4^2*a7^2*a8^2*a12^2 +16*a3^2*a9^2+32*a5^2*a4^2*a7^2*a12^2-128*a1^2*a12^2*a3^2*a8^2* a4^2+128*a1^2*a4^2*a9^2*a8^2*a12^2-128*a15^2*a12^2*a13^2*a8^2*a4^2+ 16*a15^2*a3^2+64*a5^2*a4^4*a3^2*a8^2-128*a11^2*a12^2*a13^2*a8^2+64*a11^2* a12^4*a13^2*a8^2-128*a8^4*a13^2*a11^2*a4^2-128*a8^4*a13^2*a11^2 *a12^2+64*a8^4*a3^2*a12^4*a5^2-128*a3^2*a4^2*a9^2*a8^2*a12^2-128*a8^2*a1^2*a9^2*a4^2+64*a8^4*a5^2*a9^2+64*a8^4*a11^2*a7^2-64*a8^2*a11^2*a7^2+16*a5^2*a4^4*a7^2+16*a5^2*a12^4*a7^2+16*a11^2*a12^4*a9^2+128*a8^4*a3^2*a12^2*a11^2*a4^2+64*a8^4*a3^2*a4^4*a11^2+64*a8^4*a3^2*a12^4*a11^2+16*a13^2*a5^2+64*a8^4*a5^2*a4^4*a3^2+128*a8^4*a3^2*a12^2*a5^2*a4^2+256*a8^4*a14^2*a6^2+64*a8^4*a3^2*a12^4*a7^2+64*a8^4*a3^2*a4^4*a7^2-256*a8^2*a14^2*a6^2+32*a5^2*a12^2*a9^2*a4^2+128*a15^2*a12^2*a7^2*a8^2*a4^2+16*a15^2*a4^4*a7^2-32*a15^2*a4^2*a7^2+64*a15^2*a4^4*a7^2*a8^2+ 256*a8^4*a2^2*a10^2+64*a8^4*a15^2*a12^4*a3^2+64*a8^4*a15^2*a4^4*a3^2+64*a8^4*a1^2*a4^4*a13^2+64*a8^4*a1^2*a12^4*a13^2+32*a1^2*a12^2*a5^2*a4^2-64*a1^2*a12^4*a5^2*a8^2+32*a15^2*a4^2*a11^2*a12^2-64*a15^2*a4^4*a11^2*a8^2-64*a15^2*a12^4*a11^2*a8^2+64*a8^4*a15^2*a4^4*a11^2+64*a8^4*a1^2*a4^4*a5^2+64*a8^4*a1^2*a12^4*a5^2-64*a8^2*a15^2*a13^2+64*a8^4*a15^2*a13^2-64*a8^2*a1^2*a3^2+64*a8^4*a1^2*a3^2+16*a15^2*a12^4*a3^2+16*a15^2*a4^4*a3^2+16*a1^2*a4^4*a13^2-128*a1^2*a12^2*a11^2*a8^2*a4^2-64*a1^2*a4^4*a11^2*a8^2-64*a13^2*a12^4*a7^2*a8^2-64*a13^2*a4^4*a7^2*a8^2+64*a8^4*a3^2*a7^2-64*a8^2*a3^2*a7^2+16*a13^2*a12^4*a7^2+16*a3^2*a4^4*a9^2+16*a3^2*a12^4*a9^2-64*a15^2*a4^4*a5^2*a8^2-64*a15^2*a12^4*a5^2*a8^2+64*a8^4*a15^2*a12^4*a5^2 +64*a8^4*a15^2*a4^4*a5^2-128*a1^2*a12^2*a13^2*a8^2*a4^2-64*a1^2*a12^4*a13^2*a8^2-64*a1^2*a4^4*a13^2*a8^2+16*a1^2*a3^2-64*a8^2*a5^2*a9^2+16*a13^2*a7^2-64*a1^2*a5^2*a8^2-64*a15^2*a11^2*a8^2 +64*a8^4*a1^2*a5^2+64*a8^4*a15^2*a11^2+16*a1^2*a12^4*a11^2+16*a1^2*a4^4*a11^2-128*a5^2*a12^2*a9^2*a8^2*a4^2-128*a11^2*a4^2*a7^2*a8^2*a12^2-64*a5^2*a12^4*a9^2*a8^2+32*a11^2*a4^2*a7^2*a12^2-64*a11^2*a4^4*a7^2*a8^2-64*a9^2*a4^4*a5^2*a8^2+64*a8^4*a15^2*a5^2-128*a8^2*a1^2*a7^2*a4^2-128*a8^2*a1^2*a7^2*a12^2-128*a8^4*a1^2*a7^2*a12^2-128*a8^4*a1^2*a7^2*a4^2-128*a8^2*a15^2*a9^2*a12^2-128*a8^2*a15^2*a9^2*a4^2-128*a8^4*a15^2*a9^2*a4^2-128*a8^4*a15^2*a9^2*a12^2+32*a1^2*a4^2*a7^2*a12^2+64*a1^2*a4^4*a7^2*a8^2+128*a8^4*a5^2*a12^2*a7^2*a4^2+128*a8^4*a15^2*a12^2*a13^2*a4^2+64*a8^4*a9^2*a4^4*a15^2+64*a8^4*a15^2*a12^4*a9^2+64*a8^4*a3^2*a12^4*a9^2+128*a8^4*a3^2*a4^2*a9^2*a12^2+128*a8^4*a13^2*a4^2*a7^2*a12^2+16*a13^2*a9^2+128*a8^4*a7^2*a12^2*a11^2*a4^2+64*a8^4*a5^2*a12^4*a9^2+64*a8^4*a9^2*a4^4*a5^2+16*a5^2*a7^2+64*a14^2*a6^2+32*a15^2*a4^2*a3^2*a12^2-64*a15^2*a4^4*a3^2*a8^2-64*a15^2*a12^4*a3^2*a8^2+ 16*a15^2*a4^4*a5^2+16*a15^2*a12^4*a5^2+32*a15^2*a4^2*a5^2*a12^2+64*a8^4*a1^2*a4^4*a3^2+64*a8^4*a1^2*a12^4*a3^2+64*a8^4*a7^2*a12^4*a1^2+128*a8^4*a7^2*a12^2*a1^2*a4^2+32*a1^2*a12^2*a13^2*a4^2-128*a8^2*a3^2*a11^2*a12^2-128*a8^4* a3^2*a11^2*a12^2-128*a8^4*a3^2*a11^2*a4^2+32*a13^2*a12^2*a5^2*a4^2-128*a13^2*a12^2*a5^2*a8^2+64*a13^2*a12^4*a5^2*a8^2+64*a8^2*a3^2*a11^2-128*a8^2*a3^2*a11^2*a4^2+128*a8^4*a9^2*a4^2*a15^2*a12^2+64*a8^4*a15^2*a12^4*a11^2-64*a1^2*a4^4*a3^2*a8^2+64*a8^4*a15^2*a12^4*a13^2+64*a8^4*a15^2 *a4^4*a13^2+16*a1^2*a13^2+64*a8^4*a11^2*a9^2+128*a8^4*a15^2*a4^2*a7^2*a12^2+64*a8^4*a15^2*a12^4*a7^2+64*a8^4*a1^2*a12^4*a9^2+64*a8^4*a1^2*a4^4*a9^2-128*a15^2*a4^2*a5^2*a8^2*a12^2+32*a15^2*a12^2*a13^2*a4^2-64*a15^2*a12^4*a13^2*a8^2+32*a1^2*a12^2*a3^2*a4^2-64*a1^2*a12^4*a3^2*a8^2-64*a15^2*a4^4*a13^2*a8^2+64*a8^4*a13^2*a4^4*a5^2+64*a8^4*a13^2*a12^4*a5^2+16*a3^2*a11^2-64*a13^2*a12^4*a9^2*a8^2+64*a8^4*a13^2*a4^4*a11^2+64*a8^4 *a11^2*a12^4*a13^2-128*a11^2*a12^2*a9^2*a8^2*a4^2-64*a11^2*a12^4*a9^2*a8^2-64*a11^2*a4^4*a9^2*a8^2+64*a8^4*a11^2*a4^4*a9^2+64*a8^4*a11^2*a12^4*a9^2+16*a11^2*a4^4*a9^2-128*a5^2*a4^2*a7^2*a8^2*a12^2-64*a5^2*a12^4*a7^2*a8^2 +128*a8^4*a15^2*a12^2*a5^2*a4^2+128*a8^4*a11^2*a4^2*a9^2*a12^2+16*a11^2*a7^2+128*a8^4*a13^2*a4^2*a5^2*a12^2+64*a8^4*a1^2*a4^4*a7^2-128*a15^2 *a4^2*a3^2*a8^2*a12^2+16*a15^2*a9^2-128*a8^2*a3^2*a5^2*a12^2-128*a8^2 *a3^2*a5^2*a4^2-128*a8^4*a3^2*a5^2*a12^2-128*a8^4*a3^2*a5^2*a4^2 +32*a13^2*a4^2*a11^2*a12^2-128*a13^2*a4^2*a11^2*a8^2+64*a13^2*a4^4*a11^2*a8^2 +32*a3^2*a12^2*a5^2*a4^2+64*a3^2*a12^4*a5^2*a8^2-128*a13^2*a12^2*a7^2*a8^2 *a4^2+16*a13^2*a4^4*a7^2+128*a8^4*a1^2*a4^2*a3^2*a12^2+256*a8^4*a2^2*a6^2+16*a1^2*a11^2-64*a3^2*a12^4*a7^2*a8^2+64*a8^4*a13^2*a4^4*a9^2 +64*a8^4*a13^2*a12^4*a9^2+128*a8^4*a1^2*a12^2*a9^2*a4^2+16*a1^2*a7^2+128*a15^2*a12^2*a9^2*a8^2*a4^2+64*a15^2*a12^4*a9^2*a8^2+64*a9^2*a4^4*a15^2*a8^2+64*a7^2*a12^4*a1^2*a8^2+128*a13^2*a12^2*a5^2*a8^2*a4^2-128*a13^2*a4^2*a5^2*a8^2 +128*a8^4*a1^2*a4^2*a11^2*a12^2+128*a8^4*a13^2*a4^2*a9^2*a12^2+64*a8^4*a1^2*a9^2+64*a8^2*a1^2*a9^2+64*a8^4*a15^2*a7^2+64*a8^2*a15^2*a7^2-32*a1^2*a4^2*a9^2+16*a1^2*a12^4*a9^2-32*a1^2*a12^2*a9^2+16*a15^2*a12^4*a7^2-32*a15^2*a12^2*a7^2-128*a13^2*a12^2*a9^2*a8^2*a4^2+64*a8^4*a1^2*a4^4*a11^2 +64*a8^4*a1^2*a12^4*a11^2-64*a8^2*a13^2*a7^2+32*a13^2*a12^2*a9^2 *a4^2+32*a3^2*a4^2*a9^2*a12^2-64*a3^2*a4^4*a9^2*a8^2-64*a3^2*a12^4*a9^2*a8^2+64*a8^4*a3^2*a4^4*a9^2+64*a8^4*a13^2*a4^4*a7^2+64*a8^4*a13^2*a12^4*a7^2+128*a8^4*a13^2*a4^2*a11^2*a12^2+128*a8^4*a5^2*a12^2*a9^2*a4^2+16*a13^2*a4^4*a11^2+32*a1^2*a12^2*a11^2*a4^2-64*a1^2*a12^4*a11^2*a8^2-128*a8^2*a1^2*a9^2*a12^2-128*a8^4*a1^2*a9^2*a12^2-128*a8^4*a1^2*a9^2*a4^2-128*a8^2*a15^2*a7^2*a12^2-128*a8^2*a15^2*a7^2*a4^2+16*a1^2*a9^2-128*a8^4*a15^2*a7^2*a4^2+32*a3^2*a4^2*a7^2*a12^2-64*a3^2*a4^4*a7^2*a8^2-64*a13^2*a4^4*a9^2*a8^2+128*a8^4*a3^2*a12^2*a7^2*a4^2
전술한 수학식의 f값이 최소가 되도록 하는 ai는 다양한 최적화 알고리즘을 적용하여 계산될 수 있다. 최적화 알고리즘 적용시에 ai 변수들은 유리수이면서, 분모는 쉬프트(shift) 연산이 가능한 2의 거듭제곱 형태의 값을 갖는 것이 바람직하다. 이와 같이 변수 ai가 2의 거듭제곱 형태인 유리수(dyadic rational)인 제한 조건을 설정하는 이유는, 분모가 2의 거듭제곱 형태인 경우 라이트 쉬프트 연산(>>)만을 이용하여 구현될 수 있기 때문이다.
일 예로, N은 16인 경우, 최적화 알고리즘을 적용하면 16개의 변수들 ai는 다음의 값들; a1=63/64, a2= 62/64, a3= 61/64, a4 = 59/64, a5 = 56/64, a6 = 53/64, a7 = 49/64, a8 = 45/64, a9 = 40/64, a10 = 35/64, a11 = 30/64, a12 = 24/64, a13 = 18/64, a14 = 12/64 및 a15 = 6/64을 갖을 수 있다.
단계 340에서 획득된 N개의 변수들(ai)에 기초한 값들로 치환된 NxN 변환 행렬(A)을 이용하여 NxN 크기의 블록을 변환한다. 즉, 입력값이 X라면 AX를 계산함으로써 N 포인트 1차원 이산 코사인 변환을 할 수 있다. 이와 같은 변환 행렬(A)는 전술한 과정을 통해 미리 획득된 다음 소정의 메모리에 저장된 후 소정 크기의 입력 블록에 적용되어 변환이 수행되도록 할 수 있다. 즉, 변환 과정을 위해서 매번 변환 행렬이 계산되는 것이 아니라, 다양한 크기의 입력 블록에 대하여 본 발명의 일 실시예에 따라서 미리 획득되어 저장된 변환 행렬이 이용되도록 할 수 있다.
전술한 예와 같이 N이 16인 경우, 즉 16x16 입력 블록에 대하여 치환된 16x16 변환 행렬(A)를 이용한 1차원 이산 코사인 변환을 수행하는 단계는, X0 내지 X15은 변환되어야 할 입력값, B0 내지 B15, C0 내지 C15, D0 내지 D15, E0 내지 E15, F0 내지 F15, G0 내지 G15은 중간값, Y0 내지 Y15은 변환된 값을 나타낸다고 할 때, 다음의 연산 과정과 같이 표현될 수 있다.
B0 = X0+X15; B15 = X0-X15; B1 = X1+X14; B14 = X1-X14; B2 = X2+X13;
B13 = X2-X13; B3 = X3+X12; B12 = X3-X12; B4 = X4+X11; B11 = X4-X11;
B5 = X5+X10; B10 = X5-X10; B6 = X6+X9; B9 = X6-X9; B7 = X7+X8;
B8 = X7-X8; C7 = B0-B7; C1 = B1+B6; C6 = B1-B6; C2 = B2+B5; C5 = B2-B5;
C3 = B3+B4; C4 = B3-B4; C8 = B8; C14 = B14; C10 = (45*(B13-B10)) >> 6;
C13 = (45*(B13+B10)) >> 6; C9 = B9;C15 = B15; C11 = (45*(B12-B11)) >> 6
C12 = (45*(B12+B11)) >> 6; D0 = C0+C3 ;D3 = C0-C3; D8 = C8+C11;
*D11 = C8-C11; D12 = C15-C12; D15 = C15+C12; D1 = C1+C2; D2 = C1-C2;
D9 = C9+C10; D10 = C9-C10; D13 = C14-C13; D14 = C14+C13; D4 = C4;
D5 = (45*(C6-C5)) >> 6; D6 = (45*(C6+C5)) >> 6;
D7 = C7; E0 = (45*(D0+D1)) >> 6; E1 = (45*(D0-D1)) >> 6;
E2 = (59*D3+24*D2) >> 6; E3 = (24*D3-59*D2) >> 6; E4 = D4+D5;
E5 = D4-D5; E6 = D7-D6; E7 = D7+D6; E8 = D8; E9 = (24*D14-59*D9) >> 6;
E10 = (-59*D13-24*D10) >> 6; E11 = D11; E12 = D12;
E13 = (24*D13-59*D10) >> 6; E14 = (59*D14+24*D9) >> 6; E15 = D15
F0 = E0; F1 = E1; F2 = E2; F3 = E3; F4 = (12*E4+62*E7) >> 6
F5 = (53*E5+35*E6) >> 6; F6 = (53*E6-35*E5) >> 6
F7 = (12*E7-62*E4) >> 6; F8 = E8+E9; F9 = E8-E9; F10 = E11-E10
F11 = E11+E10; F12 = E12+E13; F13 = E12-E13; F14 = E15-E14;
F15 = E15+E14; G0 = F0; G1 = F1; G2 = F2; G3 = F3; G4 = F4
G5 = F5; G6 = F6; G7 = F7; G8 = (6*F8+63*F15) >> 6
G9 = (49*F9+40*F14) >> 6; G10 = (30*F10+56*F13) >> 6
G11 = (61*F11+18*F12) >> 6; G12 = (61*F12-18*F11) >> 6
G13 = (30*F13-56*F10) >> 6; G14 = (49*F14-40*F9) >> 6
G15 = (6*F15-63*F8) >> 6
Y0 = G0; Y1 = G8; Y2 = G4; Y3 = G12; Y4 = G2; Y5 = G10; Y6 = G6
Y7 = G14; Y8 = G1; Y9 = G9; Y10 = G5; Y11 = G13; Y12 = G3
Y13 = G11; Y14 = G7; Y15 = G15;
상기 연산 과정에서 결과값이 변함없는 연산 과정, 예를 들어 F0=E0=GO=Y0와 같이 동일한 값이 계속 매핑되는 것에 불과한 연산 과정의 경우 중간 과정을 생략하고 바로 F0가 결과값 Y0로 매핑되도록 할 수 있다.
또한, 전술한 연산 과정에서 나눗셈에 대응되는 라이트 쉬프트 연산(>>)과 관련하여, 반올림 오차(rounding error)를 감소시키기 위하여 x>>y 연산은 (x+(1<<(y-1)))>>y 또는 (abs(x)+(1<<(y-1)))>>y 연산 형태로 대체될 수 있다.
다른 예로서 N이 32인 경우도 전술한 N이 16인 경우와 유사하게, 32x32 크기의 블록의 1차원 이산 코사인 변환에 이용되는 32x32 변환 행렬(Original_A)을 구성하는 원소들을 32개의 변수들(ai, i는 0부터 31까지의 정수)에 기초한 값들로 치환하여 치환된 NxN 변환 행렬(A)을 생성한다. 도 2를 다시 참조하면, N이 32인 경우, 즉 32x32 크기의 입력 블록에 대한 1차원 이산 코사인 변환 수행시에 도면 부호 240으로 도시된 흐름도를 따라서 입력 블록의 32개의 행 단위 및 32개의 열 단위 별로 1차원 이산 코사인 변환이 수행된다. 32개의 입력값을 f=[f0, f1, f2, ..., f30, f31]T, 변환 결과값을 F=[F0, F1, F2, ..., F30, F31]T, 도면 부호 240에 따른 입력값에 대한 변환 과정을 나타낸 변환 행렬을 Original_A라고 한다면 1차원 이산 코사인 변환은 F=Original_Axf 로 표현된다. 32x32 변환 행렬(Original_A)을 구성하는 원소들의 cos(πx(i/2)/32)(i는 0부터 31까지의 정수)인 성분을 유리수인 32개의 ai 변수들로 치환된다. 치환된 32x32 변환 행렬(A)과 치환된 32x32 변환 행렬의 전치 행렬(transpose)(AT)의 곱셈 행렬(AxAT)을 획득하고, 곱셈 행렬(AxAT)의 원소들 중 대각 성분을 제외한 나머지 원소들의 제곱합이 최소가 되도록 하는 32개의 변수들(ai)을 최적화 알고리즘을 적용하여 획득한다.
N이 32인 경우, 최적화 알고리즘을 적용하면 32개의 변수들 ai는 다음의 값들; a1 = 255/256, a2 = 254/256, a3 = 253/256, a4 = 251/256, a5 = 248/256, a6 = 244/256, a7 = 241/256, a8 = 236/256, a9 = 231/256, a10 = 225/256, a11 = 219/256, a12 = 212/256, a13 = 205/256, a14 = 197/256, a15 = 189/256, a16 = 181/256, a17 = 171/256, a18 = 162/256, a19 = 152/256, a20 = 142/256, a21 = 131/256, a22 = 120/256, a23 = 109/256, a24 = 97/256, a25 = 86/256, a26 = 74/256, a27 = 62/256, a28 = 49/256, a29 = 37/256, a30 = 25/256 및 a31 = 12/256 을 갖을 수 있다.
다음 획득된 32개의 변수들(ai)에 기초한 값들로 치환된 32x32 변환 행렬(A)을 이용하여 32x32 크기의 블록을 변환한다.
전술한 N이 32인 경우, 즉 32x32 입력 블록에 대하여 치환된 32x32 변환 행렬(A)를 이용한 1차원 이산 코사인 변환을 수행하는 단계는 X0 내지 X31은 변환되어야 할 입력값, A0내지 B31, B0 내지 B31, C0 내지 C31, D0 내지 D31, E0 내지 E31, F0 내지 F31, G0 내지 G31, H0 내지 H31은 중간값, Y0 내지 Y31은 변환된 값을 나타낸다고 할 때, 다음의 연산 과정과 같이 표현될 수 있다.
A0 = X0+X31; A31 = X0-X31; A1 = X1+X30; A30 = X1-X30; A2 = X2+X29;
A29 = X2-X29; A3 = X3+X28; A28 = X3-X28; A4 = X4+X27; A27 = X4-X27
A5 = X5+X26; A26 = X5-X26; A6 = X6+X25; A25 = X6-X25; A7 = X7+X24;
A24 = X7-X24; A8 = X8+X23; A23 = X8-X23; A9 = X9+X22; A22 = X9-X22;
A10 = X10+X21; A21 = X10-X21; A11 = X11+X20; A20 = X11-X20;
A12 = X12+X19; A19 = X12-X19; A13 = X13+X18; A18 = X13-X18;
A14 = X14+X17; A17 = X14-X17; A15 = X15+X16; A16 = X15-X16;
B0 = A0+A15; B15 = A0-A15; B1 = A1+A14; B14 = A1-A14; B2 = A2+A13;
B13 = A2-A13; B3 = A3+A12; B12 = A3-A12; B4 = A4+A11; B11 = A4-A11;
B5 = A5+A10; B10 = A5-A10; B6 = A6+A9; B9 = A6-A9; B7 = A7+A8;
B8 = A7-A8; B16 = A16; B28 = A28; B20 = (181*(A27-A20)) >> 8;
B27 = (181*(A27+A20)) >> 8; B17 = A17; B29 = A29;
B21 = (181*(A26-A21)) >> 8; B26 = (181*(A26+A21)) >> 8;
B18 = A18; B30 = A30; B22 = (181*(A25-A22)) >> 8;
B25 = (181*(A25+A22)) >> 8; B19 = A19; B31 = A31;
B23 = (181*(A24-A23)) >> 8; B24 = (181*(A24+A23)) >> 8;
C0 = B0+B7; C7 = B0-B7; C1 = B1+B6; C6 = B1-B6; C2 = B2+B5;
C5 = B2-B5; C3 = B3+B4; C4 = B3-B4; C8 = B8; C14 = B14;
C10 = (181*(B13-B10)) >> 8; C13 = (181*(B13+B10)) >> 8;
C9 = B9; C15 = B15; C11 = (181*(B12-B11)) >> 8;
C12 = (181*(B12+B11)) >> 8; C16 = B16+B23; C23 = B16-B23;
C24 = B31-B24; C31 = B31+B24; C17 = B17+B22; C22 = B17-B22;
C25 = B30-B25; C30 = B30+B25; C18 = B18+B21; C21 = B18-B21;
C26 = B29-B26; C29 = B29+B26; C19 = B19+B20; C20 = B19-B20;
C27 = B28-B27; C28 = B28+B27; D0 = C0+C3; D3 = C0-C3; D8 = C8+C11;
D11 = C8-C11; D12 = C15-C12; D15 = C15+C12; D1 = C1+C2; 2 = C1-C2;
D9 = C9+C10; D10 = C9-C10; D13 = C14-C13; D14 = C14+C13; D4 = C4;
D5 = (181*(C6-C5)) >> 8; D6 = (181*(C6+C5)) >> 8; D7 = C7;
D16 = C16; D18 = (97*C29-236*C18) >> 8; D20 = (-236*C27-97*C20) >> 8;
D22 = C22; D24 = C24; D26 = (-236*C21+97*C26) >> 8;
D28 = (97*C19+236*C28) >> 8; D30 = C30; D17 = C17;
D19 = (97*C28-236*C19) >> 8; D21 = (-236*C26-97*C21) >> 8;
D23 = C23; D25 = C25; D27 = (-236*C20+97*C27) >> 8;
D29 = (97*C18+236*C29) >> 8; D31 = C31; E0 = (181*(D0+D1)) >> 8;
E1 = (181*(D0-D1)) >> 8; E2 = (236*D3+97*D2) >> 8;
E3 = (97*D3-236*D2) >> 8; E4 = D4+D5; E5 = D4-D5; E6 = D7-D6;
E7 = D7+D6; E8 = D8; E9 = (97*D14-236*D9) >> 8;
E10 = (-236*D13-97*D10) >> 8; E11 = D11; E12 = D12;
E13 = (97*D13-236*D10) >> 8; E14 = (236*D14+97*D9) >> 8;
E15 = D15; E16 = D16+D19; E19 = D16-D19; E20 = D23-D20;E23 = D23+D20;
E24 = D24+D27; E27 = D24-D27; E28 = D31-D28; E31 = D31+D28;
E17 = D17+D18; E18 = D17-D18; E21 = D22-D21; E22 = D22+D21;
E25 = D25+D26; E26 = D25-D26; E29 = D30-D29; E30 = D30+D29;
F0 = E0; F1 = E1; F2 = E2; F3 = E3; F4 = (49*E4+251*E7) >> 8;
F5 = (212*E5+142*E6) >> 8; F6 = (212*E6-142*E5) >> 8
F7 = (49*E7-251*E4) >> 8; F8 = E8+E9; F9 = E8-E9; F10 = E11-E10;
F11 = E11+E10; F12 = E12+E13; F13 = E12-E13; F14 = E15-E14;
F15 = E15+E14; F16 = E16; F17 = (49*E30-251*E17) >> 8;
F18 = (-251*E29-49*E18) >> 8; F19 = E19; F20 = E20;
F21 = (212*E26-142*E21) >> 8; F22 = (-142*E25-212*E22) >> 8;
F23 = E23; F24 = E24; F25 = (212*E25-142*E22) >> 8;
F26 = (142*E26+212*E21) >> 8;
F27 = E27; F28 = E28; F29 = (49*E29-251*E18) >> 8;
F30 = (251*E30+49*E17) >> 8; F31 = E31; G0 = F0; G1 = F1;
G2 = F2; G3 = F3; G4 = F4; G5 = F5; G6 = F6; G7 = F7;
G8 = (25*F8+254*F15) >> 8; G9 = (197*F9+162*F14) >> 8;
G10 = (120*F10+225*F13) >> 8; G11 = (244*F11+74*F12) >> 8;
G12 = (244*F12-74*F11) >> 8; G13 = (120*F13-225*F10) >> 8;
G14 = (197*F14-162*F9) >> 8; G15 = (25*F15-254*F8) >> 8;
G16 = F16+F17; G17 = F16-F17; G18 = F19-F18; G19 = F19+F18;
G20 = F20+F21; G21 = F20-F21; G22 = F23-F22; G23 = F23+F22;
G24 = F24+F25; G25 = F24-F25; G26 = F27-F26; G27 = F27+F26;
G28 = F28+F29; G29 = F28-F29; G30 = F31-F30; G31 = F31+F30;
H0 = G0; H1 = G1; H2 = G2; H3 = G3; H4 = G4; H5 = G5; H6 = G6;
H7 = G7; H8 = G8; H9 = G9; H10 = G10; H11 = G11; H12 = G12;
H13 = G13; H14 = G14; H15 = G15; H16 = (12*G16+255*G31) >> 8;
H17 = (189*G17+171*G30) >> 8; H18 = (109*G18+231*G29) >> 8;
H19 = (241*G19+86*G28) >> 8; H20 = (62*G20+248*G27) >> 8;
H21 = (219*G21+131*G26) >> 8; H22 = (152*G22+205*G25) >> 8;
H23 = (253*G23+37*G24) >> 8; H24 = (253*G24-37*G23) >> 8;
H25 = (152*G25-205*G22) >> 8; H26 = (219*G26-131*G21) >> 8;
H27 = (62*G27-248*G20) >> 8; H28 = (241*G28-86*G19) >> 8;
H29 = (109*G29-231*G18) >> 8; H30 = (189*G30-171*G17) >> 8;
H31 = (12*G31-255*G16) >> 8;
Y0 = H0; Y1 = H16; Y2 = H8; Y3 = H24; Y4 = H4; Y5 = H20;
Y6 = H12; Y7 = H28; Y8 = H2; Y9 = H18; Y10 = H10; Y11 = H26
Y12 = H6; Y13 = H22; Y14 = H14; Y15 = H30; Y16 = H1;
Y17 = H17; Y18 = H9; Y19 = H25; Y20 = H5; Y21 = H21;
Y22 = H13; Y23 = H29; Y24 = H3; Y25 = H19; Y26 = H11;
Y27 = H27; Y28 = H7; Y29 = H23; Y30 = H15; Y31 = H31
또 다른 예로서 N이 64인 경우, 64x64 크기의 블록의 1차원 이산 코사인 변환에 이용되는 64x64 변환 행렬(Original_A)을 구성하는 원소들의 cos(πx(i/2)/64)(i는 0부터 63까지의 정수)인 성분을 유리수인 64개의 ai 변수들로 치환하여 치환된 64x64 변환 행렬(A)을 생성하고, 치환된 64x64 변환 행렬(A)과 치환된 64x64 변환 행렬의 전치 행렬(transpose)(AT)의 곱셈 행렬(AxAT)을 획득하고, 곱셈 행렬(AxAT)의 원소들 중 대각 성분을 제외한 나머지 원소들의 제곱합이 최소가 되도록 하는 64개의 변수들(ai)을 최적화 알고리즘을 적용하여 획득한다.
N이 64인 경우, 최적화 알고리즘을 적용하면 64개의 변수들 ai는 다음의 값들; a1 =1024/1024, a2 = 1023/1024, a3 = 1021/1024, a4 = 1019/1024, a5 = 1016/1024, a6 = 1013/1024, a7 = 1009/1024, a8 = 1004/1024, a9 = 999 /1024, a10 =993 /1024, a11 =987 /1024, a12 =980 /1024, a13 =972 /1024, a14 =964 /1024, a15 =955 /1024, a16 =946 /1024, a17 =936 /1024, a18 =926 /1024, a19 =915 /1024, a20 =903 /1024, a21 =891 /1024, a22 =878 /1024, a23 =865 /1024, a24 =851 /1024, a25 =837 /1024, a26 =822 /1024, a27 =807 /1024, a28 =792 /1024, a29 =775 /1024, a30 =759 /1024, a31 =742 /1024, a32 =724 /1024, a33 =706 /1024, a34 =688 /1024, a35 =669 /1024, a36 =650 /1024, a37 =630 /1024, a38 =610 /1024, a39 =590 /1024, a40 =569 /1024, a41 =548 /1024, a42 =526 /1024, a43 =505 /1024, a44 =483 /1024, a45 =460 /1024, a46 =438 /1024, a47 =415 /1024, a48 =392 /1024, a49 =369 /1024, a50 =345 /1024, a51 =321 /1024, a52 =297 /1024, a53 =273 /1024, a54 =249 /1024, a55 =224 /1024, a56 =200 /1024, a57 =175 /1024, a58 =150/1024, a59 =125 /1024, a60 =100 /1024, a61 =75 /1024, a62 =50/1024 및 a63 =25/1024 을 갖을 수 있다.
다음 획득된 64개의 변수들(ai)에 기초한 값들로 치환된 64x64 변환 행렬(A)을 이용하여 64x64 크기의 블록을 변환한다.
전술한 N이 64인 경우, 즉 64x64 입력 블록에 대하여 치환된 64x64 변환 행렬(A)를 이용한 1차원 이산 코사인 변환을 수행하는 단계는 X0 내지 X63은 변환되어야 할 입력값, A0내지 B63, B0 내지 B63, C0 내지 C63, D0 내지 D63, E0 내지 E63, F0 내지 F63, G0 내지 G63, H0 내지 H63, I0내지 I63, O0내지 O63은 중간값, Y0 내지 Y63은 변환된 값을 나타낸다고 할 때, 다음의 연산 과정과 같이 표현될 수 있다.
O0 = X0+X63; O63 = X0-X63; O1 = X1+X62; O62 = X1-X62; O2 = X2+X61; O61 = X2-X61; O3 = X3+X60; O60 = X3-X60; O4 = X4+X59; O59 = X4-X59; O5 = X5+X58; O58 = X5-X58; O6 = X6+X57; O57 = X6-X57; O7 = X7+X56; O56 = X7-X56; O8 = X8+X55; O55 = X8-X55; O9 = X9+X54; O54 = X9-X54; O10 = X10+X53; O53 = X10-X53; O11 = X11+X52; O52 = X11-X52; O12 = X12+X51; O51 = X12-X51; O13 = X13+X50; O50 = X13-X50; O14 = X14+X49; O49 = X14-X49; O15 = X15+X48; O48 = X15-X48; O16 = X16+X47; O47 = X16-X47; O17 = X17+X46; O46 = X17-X46; O18 = X18+X45; O45 = X18-X45; O19 = X19+X44; O44 = X19-X44; O20 = X20+X43; O43 = X20-X43; O21 = X21+X42; O42 = X21-X42; O22 = X22+X41; O41 = X22-X41; O23 = X23+X40; O40 = X23-X40; O24 = X24+X39; O39 = X24-X39; O25 = X25+X38; O38 = X25-X38; O26 = X26+X37; O37 = X26-X37; O27 = X27+X36; O36 = X27-X36; O28 = X28+X35; O35 = X28-X35; O29 = X29+X34; O34 = X29-X34; O30 = X30+X33; O33 = X30-X33; O31 = X31+X32; O32 = X31-X32; ; A0 = O0+O31; A31 = O0-O31; A1 = O1+O30; A30 = O1-O30; A2 = O2+O29; A29 = O2-O29; A3 = O3+O28; A28 = O3-O28; A4 = O4+O27; A27 = O4-O27; A5 = O5+O26; A26 = O5-O26; A6 = O6+O25; A25 = O6-O25; A7 = O7+O24; A24 = O7-O24; A8 = O8+O23; A23 = O8-O23; A9 = O9+O22; A22 = O9-O22; A10 = O10+O21; A21 = O10-O21; A11 = O11+O20; A20 = O11-O20; A12 = O12+O19; A19 = O12-O19; A13 = O13+O18; A18 = O13-O18; A14 = O14+O17; A17 = O14-O17; A15 = O15+O16; A16 = O15-O16; A32 = O32; A56 = O56; A40 = (724*(O55-O40))>>10; A55 = (724*(O55+O40))>>10; A33 = O33; A57 = O57; A41 = (724*(O54-O41))>>10; A54 = (724*(O54+O41))>>10; A34 = O34; A58 = O58; A42 = (724*(O53-O42))>>10; A53 = (724*(O53+O42))>>10; A35 = O35; A59 = O59; A43 = (724*(O52-O43))>>10; A52 = (724*(O52+O43))>>10; A36 = O36; A60 = O60; A44 = (724*(O51-O44))>>10; A51 = (724*(O51+O44))>>10; A37 = O37; A61 = O61; A45 = (724*(O50-O45))>>10; A50 = (724*(O50+O45))>>10; A38 = O38; A62 = O62; A46 = (724*(O49-O46))>>10; A49 = (724*(O49+O46))>>10; A39 = O39; A63 = O63; A47 = (724*(O48-O47))>>10; A48 = (724*(O48+O47))>>10; B0 = A0+A15; B15 = A0-A15; B1 = A1+A14; B14 = A1-A14; B2 = A2+A13; B13 = A2-A13; B3 = A3+A12; B12 = A3-A12; B4 = A4+A11; B11 = A4-A11; B5 = A5+A10; B10 = A5-A10; B6 = A6+A9; B9 = A6-A9; B7 = A7+A8; B8 = A7-A8; B16 = A16; B28 = A28; B20 = (724*(A27-A20))>>10; B27 = (724*(A27+A20))>>10; B17 = A17; B29 = A29; B21 = (724*(A26-A21))>>10; B26 = (724*(A26+A21))>>10; B18 = A18; B30 = A30; B22 = (724*(A25-A22))>>10; B25 = (724*(A25+A22))>>10; B19 = A19; B31 = A31; B23 = (724*(A24-A23))>>10; B24 = (724*(A24+A23))>>10; B32 = A32+A47; B47 = A32-A47; B48 = A63-A48; B63 = A63+A48; B33 = A33+A46; B46 = A33-A46; B49 = A62-A49; B62 = A62+A49; B34 = A34+A45; B45 = A34-A45; B50 = A61-A50; B61 = A61+A50; B35 = A35+A44; B44 = A35-A44; B51 = A60-A51; B60 = A60+A51; B36 = A36+A43; B43 = A36-A43; B52 = A59-A52; B59 = A59+A52; B37 = A37+A42; B42 = A37-A42; B53 = A58-A53; B58 = A58+A53; B38 = A38+A41; B41 = A38-A41; B54 = A57-A54; B57 = A57+A54; B39 = A39+A40; B40 = A39-A40; B55 = A56-A55; B56 = A56+A55; C0 = B0+B7; C7 = B0-B7; C1 = B1+B6; C6 = B1-B6; C2 = B2+B5; C5 = B2-B5; C3 = B3+B4; C4 = B3-B4; C8 = B8; C14 = B14; C10 = (724*(B13-B10))>>10 ; C13 = (724*(B13+B10))>>10; C9 = B9; C15 = B15; C11 = (724*(B12-B11))>>10; C12 = (724*(B12+B11))>>10; C16 = B16+B23; C23 = B16-B23; C24 = B31-B24; C31 = B31+B24; C17 = B17+B22; C22 = B17-B22; C25 = B30-B25; C30 = B30+B25; C18 = B18+B21; C21 = B18-B21; C26 = B29-B26; C29 = B29+B26; C19 = B19+B20; C20 = B19-B20; C27 = B28-B27; C28 = B28+B27; C32 = B32; C36 = (392*B59-946*B36)>>10; C40 = (-946*B55-392*B40)>>10; C44 = B44; C48 = B48; ;C52 = (-946*B43+392*B52)>>10; C56 = (392*B39+946*B56)>>10; C60 = B60; C33 = B33; C37 = (392*B58-946*B37)>>10; C41 = (-946*B54-392*B41)>>10; C45 = B45; C49 = B49; C53 = (-946*B42+392*B53)>>10; C57 = (392*B38+946*B57)>>10; C61 = B61; C34 = B34; C38 = (392*B57-946*B38)>>10; C42 = (-946*B53-392*B42)>>10; C46 = B46; C50 = B50; C54 = (-946*B41+392*B54)>>10; C58 = (392*B37+946*B58)>>10; C62 = B62; C35 = B35; C39 = (392*B56-946*B39)>>10; C43 = (-946*B52-392*B43)>>10; C47 = B47; C51 = B51; C55 = (-946*B40+392*B55)>>10; C59 = (392*B36+946*B59)>>10; C63 = B63; D0 = C0+C3; D3 = C0-C3; D8 = C8+C11; D11 = C8-C11; D12 = C15-C12; D15 = C15+C12; D1 = C1+C2; D2 = C1-C2; D9 = C9+C10; D10 = C9-C10; D13 = C14-C13; D14 = C14+C13; D4 = C4; D5 = (724*(C6-C5))>>10; D6 = (724*(C6+C5))>>10; D7 = C7; D16 = C16; D18 = (392*C29-946*C18)>>10; D20 = (-946*C27-392*C20)>>10; D22 = C22; D24 = C24; D26 = (-946*C21+392*C26)>>10; D28 = (392*C19+946*C28)>>10; D30 = C30; D17 = C17; D19 = (392*C28-946*C19)>>10; D21 = (-946*C26-392*C21)>>10; D23 = C23; D25 = C25; D27 = (-946*C20+392*C27)>>10; D29 = (392*C18+946*C29)>>10; D31 = C31; D32 = C32+C39; D39 = C32-C39; D40 = C47-C40; D47 = C47+C40; D48 = C48+C55; D55 = C48-C55; D56 = C63-C56; D63 = C63+C56; D33 = C33+C38; D38 = C33-C38; D41 = C46-C41; D46 = C46+C41; D49 = C49+C54; D54 = C49-C54; D57 = C62-C57; D62 = C62+C57; D34 = C34+C37; D37 = C34-C37; D42 = C45-C42; D45 = C45+C42; D50 = C50+C53; D53 = C50-C53; D58 = C61-C58; D61 = C61+C58; D35 = C35+C36; D36 = C35-C36; D43 = C44-C43; D44 = C44+C43; D51 = C51+C52; D52 = C51-C52; D59 = C60-C59; D60 = C60+C59; E0 = (724*(D0+D1))>>10; E1 = (724*(D0-D1))>>10; E2 = (946*D3+392*D2)>>10; E3 = (392*D3-946*D2)>>10; E4 = D4+D5; E5 = D4-D5; E6 = D7-D6; E7 = D7+D6; E8 = D8; E9 = (392*D14-946*D9)>>10; E10 = (-946*D13-392*D10)>>10; E11 = D11; E12 = D12; E13 = (392*D13-946*D10)>>10; E14 = (946*D14+392*D9)>>10; E15 = D15; E16 = D16+D19; E19 = D16-D19; E20 = D23-D20; E23 = D23+D20; E24 = D24+D27; E27 = D24-D2; E28 = D31-D28; E31 = D31+D28; E17 = D17+D18; E18 = D17-D18; E21 = D22-D21; E22 = D22+D21; E25 = D25+D26; E26 = D25-D26; E29 = D30-D29; E30 = D30+D29; E32 = D32; E33 = D33; E34 = (200*D61-1004*D34)>>10; E35 = (200*D60-1004*D35)>>10; E36 = (-1004*D59-200*D36)>>10; E37 = (-1004*D58-200*D37)>>10; E38 = D38; E39 = D39; E40 = D40; E41 = D41; E42 = (851*D53-569*D42)>>10; E43 = (851*D52-569*D43)>>10; E44 = (-569*D51-851*D44)>>10; E45 = (-569*D50-851*D45)>>10; E46 = D46; E47 = D47; E48 = D48; E49 = D49; E50 = (851*D50-569*D45)>>10; E51 = (851*D51-569*D44)>>10; E52 = (569*D52+851*D43)>>10; E53 = (569*D53+851*D42)>>10; E54 = D54; E55 = D55; E56 = D56; E57 = D57; E58 = (200*D58-1004*D37)>>10; E59 = (200*D59-1004*D36)>>10; E60 = (1004*D60+200*D35)>>10; E61 = (1004*D61+200*D34)>>10; E62 = D62; E63 = D63; F0 = E0; F1 = E1; F2 = E2; F3 = E3; F4 = (200*E4+1004*E7)>>10; F5 = (851*E5+569*E6)>>10; F6 = (851*E6-569*E5)>>10; F7 = (200*E7-1004*E4)>>10; F8 = E8+E9; F9 = E8-E9; F10 = E11-E10; F11 = E11+E10; F12 = E12+E13; F13 = E12-E13; F14 = E15-E14; F15 = E15+E14; F16 = E16; F17 = (200*E30-1004*E17)>>10; F18 = (-1004*E29-200*E18)>>10; F19 = E19; F20 = E20; F21 = (851*E26-569*E21)>>10; F22 = (-569*E25-851*E22)>>10; F23 = E23; F24 = E24; F25 = (851*E25-569*E22)>>10; F26 = (569*E26+851*E21)>>10; F27 = E27; F28 = E28; F29 = (200*E29-1004*E18)>>10; F30 = (1004*E30+200*E17)>>10; F31 = E31; F32 = E32+E35; F33 = E33+E34; F34 = E33-E34; F35 = E32-E35; F36 = E39-E36; F37 = E38-E37; F38 = E38+E37; F39 = E39+E36; F40 = E40+E43; F41 = E41+E42; F42 = E41-E42; F43 = E40-E43; F44 = E47-E44; F45 = E46-E45; F46 = E46+E45; F47 = E47+E44; F48 = E48+E51; F49 = E49+E50; F50 = E49-E50; F51 = E48-E51; F52 = E55-E52; F53 = E54-E53; F54 = E54+E53; F55 = E55+E52; F56 = E56+E59; F57 =; E57+E58; F58 = E57-E58; F59 = E56-E59; F60 = E63-E60; F61 = E62-E61; F62 = E62+E61; F63 = E63+E60; G0 = F0; G1 = F1; G2 = F2; G3 = F3; G4 = F4; G5 = F5; G6 = F6; G7 = F7; G8 = (100*F8+1019*F15)>>10; G9 = (792*F9+650*F14)>>10; G10 = (483*F10+903*F13)>>10; G11 = (980*F11+297*F12)>>10; G12 = (980*F12-297*F11)>>10; G13 = (483*F13-903*F10)>>10; G14 = (792*F14-650*F9)>>10; G15 = (100*F15-1019*F8)>>10; G16 = F16+F17; G17 = F16-F17; G18 = F19-F18; G19 = F19+F18; G20 = F20+F21; G21 = F20-F21 ; G22 = F23-F22; G23 = F23+F22; G24 = F24+F25; G25 = F24-F25; G26 = F27-F26; G27 = F27+F26; G28 = F28+F29; G29 = F28-F29; G30 = F31-F30; G31 = F31+F30; G32 = F32; G33 = (100*F62-1019*F33)>>10; G34 = (-1019*F61-100*F34)>>10; G35 = F35; G36 = F36; G37 = (792*F58-650*F37)>>10; G38 = (-650*F57-792*F38)>>10; G39 = F39; G40 = F40; G41 = (483*F54-903*F41)>>10; G42 = (-903*F53-483*F42)>>10; G43 = F43; G44 = F44; G45 = (980*F50-297*F45)>>10; G46 = (-297*F49-980*F46)>>10; G47 = F47; G48 = F48; G49 = (980*F49-297*F46)>>10; G50 = (297*F50+980*F45)>>10; G51 = F51; G52 = F52; G53 = (483*F53-903*F42)>>10; G54 = (903*F54+483*F41)>>10; G55 = F55; G56 = F56; G57 = (792*F57-650*F38)>>10; G58 = (650*F58+792*F37)>>10; G59 = F59; G60 = F60; G61 = (100*F61-1019*F34)>>10; G62 = (1019*F62+100*F33)>>10; G63 = F63; H0 = G0;H1 = G1;H2 = G2;H3 = G3;H4 = G4;H5 = G5;H6 = G6;H7 = G7;H8 = G8;H9 = G9;H10 = G10;H11 = G11;H12 = G12;H13 = G13;H14 = G14;H15 = G15;H16 = (50*G16+1023*G31)>>10;H17 = (759*G17+688*G30)>>10;H18 = (438*G18+926*G29)>>10;H19 = (964*G19+345*G28)>>10;H20 = (249*G20+993*G27)>>10;H21 = (878*G21+526*G26)>>10;H22 = (610*G22+822*G25)>>10;H23 = (1013*G23+150*G24)>>10;H24 = (1013*G24-150*G23)>>10;H25 = (610*G25-822*G22)>>10;H26 = (878*G26-526*G21)>>10;H27 = (249*G27-993*G20)>>10;H28 = (964*G28-345*G19)>>10;H29 = (438*G29-926*G18)>>10;H30 = (759*G30-688*G17)>>10;H31 = (50*G31-1023*G16)>>10;H32 = G32+G33;H33 = G32-G33;H34 = G35-G34;H35 = G35+G34;H36 = G36+G37;H37 = G36-G37;H38 = G39-G38;H39 = G39+G38;H40 = G40+G41;H41 = G40-G41;H42 = G43-G42;H43 = G43+G42;H44 = G44+G45;H45 = G44-G45;H46 = G47-G46;H47 = G47+G46;H48 = G48+G49;H49 = G48-G49;H50 = G51-G50;H51 = G51+G50;H52 = G52+G53;H53 = G52-G53;H54 = G55-G54;H55 = G55+G54;H56 = G56+G57;H57 = G56-G57;H58 = G59-G58;H59 = G59+G58;H60 = G60+G61;H61 = G60-G61;H62 = G63-G62;H63 = G63+G62;;I0 = H0;I1 = H1;I2 = H2;I3 = H3;I4 = H4;I5 = H5;I6 = H6;I7 = H7;I8 = H8;I9 = H9;I10 = H10;I11 = H11;I12 = H12;I13 = H13;I14 = H14;I15 = H15;I16 = H16;I17 = H17;I18 = H18;I19 = H19;I20 = H20;I21 = H21;I22 = H22;I23 = H23;I24 = H24;I25 = H25;I26 = H26;I27 = H27;I28 = H28;I29 = H29;I30 = H30;I31 = H31;I32 = (25*H32+1024*H63)>>10;I33 = (742*H33+706*H62)>>10;I34 = (415*H34+936*H61)>>10;I35 = (955*H35+369*H60)>>10;I36 = (224*H36+999*H59)>>10;I37 = (865*H37+548*H58)>>10;I38 = (590*H38+837*H57)>>10;I39 = (1009*H39+175*H56)>>10;I40 = (125*H40+1016*H55)>>10;I41 = (807*H41+630*H54)>>10;I42 = (505*H42+891*H53)>>10;I43 = (987*H43+273*H52)>>10;I44 = (321*H44+972*H51)>>10;I45 = (915*H45+460*H50)>>10;I46 = (669*H46+775*H49)>>10;I47 = (1021*H47+75*H48)>>10;I48 = (1021*H48-75*H47)>>10;I49 = (669*H49-775*H46)>>10;I50 = (915*H50-460*H45)>>10;I51 = (321*H51-972*H44)>>10;I52 = (987*H52-273*H43)>>10;I53 = (505*H53-891*H42)>>10;I54 = (807*H54-630*H41)>>10;I55 = (125*H55-1016*H40)>>10;I56 = (1009*H56-175*H39)>>10;I57 = (590*H57-837*H38)>>10;I58 = (865*H58-548*H37)>>10;I59 = (224*H59-999*H36)>>10;I60 = (955*H60-369*H35)>>10;I61 = (415*H61-936*H34)>>10;I62 = (742*H62-706*H33)>>10;I63 = (25*H63-1024*H32)>>10;;Y0 = I0;Y1 = I32;Y2 = I16;Y3 = I48;Y4 = I8;Y5 = I40;Y6 = I24;Y7 = I56;Y8 = I4;Y9 = I36;Y10 = I20;Y11 = I52;Y12 = I12;Y13 = I44;Y14 = I28;Y15 = I60;Y16 = I2;Y17 = I34;Y18 = I18;Y19 = I50;Y20 = I10;Y21 = I42;Y22 = I26;Y23 = I58;Y24 = I6;Y25 = I38;Y26 = I22;Y27 = I54;Y28 = I14;Y29 = I46;Y30 = I30;Y31 = I62;Y32 = I1;Y33 = I33;Y34 = I17;Y35 = I49;Y36 = I9;Y37 = I41;Y38 = I25;Y39 = I57;Y40 = I5;Y41 = I37;Y42 = I21;Y43 = I53;Y44 = I13;Y45 = I45;Y46 = I29;Y47 = I61;Y48 = I3;Y49 = I35;Y50 = I19;Y51 = I51;Y52 = I11;Y53 = I43;Y54 = I27;Y55 = I59;Y56 = I7;Y57 = I39;Y58 = I23;Y59 = I55;Y60 = I15;Y61 = I47;Y62 = I31;Y63 = I63
다시 도 3을 참조하면, 단계 350에서 이산 코사인 변환에 이용되는 원래의 NxN 변환 행렬(Original_A)과 치환된 NxN 변환 행렬(A) 사이의 차이값을 보정하기 위한 스케일링 행렬 및 시프트 연산을 적용하여 NxN 크기의 블록을 변환한 변환 블록에 대한 양자화를 수행한다.
전술한 바와 같이, 본 발명의 일 실시예에 따르면 원래의 NxN 변환 행렬(Original_A)에 포함된 cosθ, sinθ 성분들을 유리수인 변수 ai로 치환하였기 때문에 원래의 NxN 변환 행렬(Original_A)과 치환된 변환 행렬(A)에 의한 결과값은 오차가 발생한다. 따라서, 본 발명의 일 실시예에 따르면 양자화 단계에서 양자화와 함께 수행되는 스케일링 단계에서 스케일링 행렬을 적용하여 이러한 오차를 최소화한다.
도 5는 본 발명의 일 실시예에 따른 양자화 과정을 나타낸 플로우 차트이다.
도 5를 참조하면, 단계 510에서 각 i번째 행의 원소가 Si(i는 1부터 N까지의 정수)의 값을 갖는 NxN 크기의 중간 행렬(S)의 각 원소와 치환된 NxN 크기의 변환 행렬(A)의 동일 위치의 원소들을 각각 곱한 값(SⓧA)과, 원래의 NxN 변환 행렬(Original_A) 사이의 차이인 변환 오차 행렬(Original_A-SⓧA )을 획득한다. ⓧ는 원소 단위 곱셈(element-by-element multiplication, element-wise multiplication) 연산을 나타내는 것으로, 행렬의 동일 위치의 원소가 곱해진다.
예를 들어, 16x16 크기의 중간 행렬(S)는 다음과 같다.
Figure PCTKR2011003006-appb-I000001
단계 520에서 변환 오차 행렬(Original_A-SⓧA)의 대각 성분을 제외한 나머지 원소들의 제곱합이 최소가 되도록 하는 Si 값들을 획득한다. Si 값들은 다양한 최적화 알고리즘을 이용하여 결정될 수 있다. 일 예로 S1의 초기값을 (1/4*2^(1/2))로 하고 Nelder-Mead Sipmlex 방법과 같은 최적화 알고리즘을 적용하여 Si값들을 결정할 수 있다.
단계 530에서 획득된 Si값들을 적용한 NxN 크기의 중간 행렬(S)의 각 원소와 중간 행렬(S)의 전치 행렬(ST)의 동일 위치의 원소들을 각각 곱한 행렬(SⓧST)에 기초하여 스케일링 행렬을 생성한다.
중간 행렬(S)의 각 원소와 중간 행렬의 전치 행렬(ST)의 동일 위치의 원소를 곱한 행렬(SⓧST)을 PF라고 하면, 스케일링 행렬(MF)는 다음의 수학식; MF=PF*2^m/Qstep 과 같이 계산될 수 있다. 여기서, Qstep은 양자화 스텝, m은 양의 정수이다.
단계 540에서, 스케일링 행렬(MF) 및 시프트 연산을 적용하여 NxN 크기의 블록을 변환한 변환 블록에 대한 양자화를 수행한다. 구체적으로 양자화는 스케일링 행렬(MF)와 NxN 크기의 블록을 변환한 변환 블록을 곱한 값에 소정의 오프셋을 더한 값을 다음의 수학식; q=floor(QP/6)+m 의 q 비트만큼 비트 시프트 연산함으로써 수행된다. Zij를 양자화된 계수값, Wij를 변환 계수, f를 오프셋이라고 하면,
Figure PCTKR2011003006-appb-I000002
이고,
Figure PCTKR2011003006-appb-I000003
이다. 여기서, '.MF'는 행렬의 동일 위치의 원소를 곱하는 벡터곱 연산을 의미한다. 전술한 바와 같이, 벡터곱 연산은 ⓧ와 같이 표현될 수도 있다.
도 7은 본 발명의 일 실시예에 따라서 16x16 블록의 변환시에 이용되는 양자화 파라메터(QP)에 따른 스케일링 행렬(MF)의 예를 도시한다. 도 7에서는 스케일링 행렬 계산시 m=10인 경우이다.
도 7에 도시된 바와 같은 스케일링 행렬은 모든 양자화 스텝에 대하여 정의될 필요없이 처음의 6단계의 Qstep 값인 (0.625, 0.6875, 0.8125, 0.875, 1, 1.25)에 대해서 정의된다. 왜냐하면 양자화 파라메터(QP)가 6 증가하면 양자화 스텝(Qstep)이 2배로 증가하기 때문에, 스케일링 행렬(MF)는 처음의 6단계의 Qstep 값에 대해서 정의되고, 나머지 QP에 따른 스케일링 행렬(MF)는 (QP mod 6) 값에 따라서 선택될 수 있다.
이와 같은 스케일링 행렬(MF)는 32x32 블록이나 64x64 블록에 대해서도 전술한 16x16 블록에 대한 스케일링 행렬을 구하는 과정과 유사한 과정을 통해 획득될 수 있다. 도 9 내지 도 14는 이와 같은 과정을 통해 획득된 32x32 블록에 적용되는 양자화 파라메터(QP)에 따른 스케일링 행렬(MF)의 예를 도시한다. 64x64 블록에 적용되는 양자화 파라메터(QP)에 따른 스케일링 행렬(MF)는 다음과 같이 정의될 수 있다.
< 64x64 입력 블록에 대한 스케일링 행렬(MF)의 예>
m = 11 일 때, Q0 = 102*ONES / Q1 = 93*ONES / Q2 = 79*ONES / Q3 = 73*ONES / Q4 = 64*ONES / Q5 = 57*ONES
m = 10 일 때, Q0 = 51*ONES / Q1 = 47*ONES / Q2 = 39*ONES /
Q3 = 37*ONES / Q4 = 32*ONES / Q5 = 28*ONES
m = 9일 때, Q0 = 26*ONES / Q1 = 23*ONES / Q2 = 20*ONES /
Q3 = 18*ONES / Q4 = 16*ONES / Q5 = 14*ONES
상기 예에서 Q#의 #값은 (QP mod 6)이며, ONES는 모든 원소가 1인 64x64 행렬을 나타낸다.
한편, 역양자화 단계에서는 이산 코사인 역변환에 이용되는 원래의 NxN 역변환 행렬과 치환된 NxN 변환 행렬의 역행렬인 NxN 역변환 행렬 사이의 차이값을 보정하기 위한 역스케일링 행렬 및 시프트 연산을 적용하여 역양자화를 수행한다.
본 발명의 일 실시예에 따르면, 역스케일링 행렬(V)는 전술한 스케일링 행렬(MF)의 생성시에도 이용되는 중간 행렬(S)의 각 원소와 중간 행렬의 전치 행렬(ST)의 동일 위치의 원소를 각각 곱한 행렬(SⓧST)인 PF에 기초하여 생성될 수 있다. 구체적으로, 양자화 스텝을 Qstep, 중간 행렬(S)의 각 원소와 중간 행렬의 전치 행렬(ST)동일 위치의 원소들을 각각 곱한 행렬을 PF, n은 양의 정수라고 할 때, 역스케일링 행렬(V)은 다음의 수학식; V=Qstep*PF*2^n 을 통해 획득된다.
전술한 바와 같이 역스케일링 행렬(V)가 결정되면, 역양자화는 역스케일링 행렬(V)와 양자화된 변환 계수를 곱한 값에 대해서 floor(QP/6)(floor[x]는 x보다 작거나 같은 최대 정수, QP는 양자화 파라메터) 비트만큼 비트 시프트 연산을 통해 수행될 수 있다. 즉, Zij를 양자화된 계수값, Wij를 변환 계수라고 하면 다음의 수학식; Wij=(Zij)<<floor(QP/6)을 통해 양자화된 계수 Zij를 역양자화한 Wij를 획득할 수 있다.
도 8은 본 발명의 일 실시예에 따라서 16x16 블록에 적용되는 양자화 파라메터(QP)에 따른 역스케일링 행렬(V)을 도시한다. 도 8에서는 역스케일링 행렬 계산시 m=10인 경우를 나타낸다. 역스케일링 행렬(V) 역시 도 7의 스케일링 행렬과 같이 모든 양자화 스텝에 대하여 정의될 필요는 없고, 처음의 6단계의 Qstep 값인 (0.625, 0.6875, 0.8125, 0.875, 1, 1.25)에 대해서 정의될 수 있다. 나머지 QP에 따른 역스케일링 행렬(V)는 (QP mod 6) 값에 따라서 선택될 수 있다.
유사하게, 32x32 입력 블록 및 64x64 블록에 적용되는 양자화 파라메터에 따른 역스케일링 행렬(V)도 전술한 16x16 블록에 적용되는 역스케일링 행렬(V) 계산 과정과 유사한 과정을 통해 획득될 수 있다. 도 94a 내지 도 94f는 본 발명의 일 실시예에 따라서 32x32 블록에 적용되는 양자화 파라메터(QP)에 따른 역스케일링 행렬(V)의 예를 도시한다.
64x64 블록에 적용되는 양자화 파라메터(QP)에 따른 역스케일링 행렬(V)는 다음과 같이 정의될 수 있다.
< 64x64 입력 블록에 대한 역스케일링 행렬(V)의 예>
n = 11 일 때, Q0 = 40*ONES / Q1 = 44*ONES / Q2 = 52*ONES / Q3 = 56*ONES / Q4 = 64*ONES / Q5 = 72*ONES
n = 10 일 때, Q0 = 20*ONES / Q1 = 22*ONES / Q2 = 26*ONES /
Q3 = 28*ONES / Q4 = 32*ONES / Q5 = 36*ONES
n = 9일 때, Q0 = 10*ONES / Q1 = 11*ONES / Q2 = 13*ONES /
Q3 = 14*ONES / Q4 = 16*ONES / Q5 = 18*ONES
상기 예에서 Q#의 #값은 (QP mod 6)의 값이며, ONES는 모든 원소가 1인 64x64 행렬을 나타낸다.
도 6은 본 발명의 다른 실시예에 따른 양자화 과정을 나타낸 플로우 차트이다. 도 6의 본 발명의 다른 실시예에 따른 양자화 과정은 도 5의 본 발명의 일 실시예에 따른 양자화 과정과 비교할 때, 스케일링 행렬 생성에 이용되는 중간 행렬(S) 생성 과정에 있어서 차이가 나고, 나머지 과정은 전술한 도 5의 본 발명의 일 실시예에 따른 양자화 과정과 유사하다.
구체적으로, 도 6을 참조하면, 단계 610에서 이산 코사인 변환에 이용되는 원래의 NxN 변환 행렬(Original_A)의 각 원소를 치환된 NxN 변환 행렬(A)의 동일 위치의 원소들로 나눔으로써 중간 행렬(S) 획득한다.
단계 620에서, 단계 610에서 생성된 중간 행렬(S)의 각 원소와 중간 행렬의 전치 행렬(ST)의 동일 위치의 원소들을 각각 곱한 행렬(SⓧST)에 기초하여 스케일링 행렬을 생성한다. 구체적으로, 중간 행렬(S)과 중간 행렬의 전치 행렬(ST)의 동일 위치의 원소들을 각각 곱한 행렬(SⓧST)을 PF라고 하면, 스케일링 행렬(MF)는 다음의 수학식; MF=PF*2^m/Qstep 과 같이 계산될 수 있다. 여기서, Qstep은 양자화 스텝, m은 양의 정수이다.
단계 630에서, 스케일링 행렬(MF) 및 시프트 연산을 적용하여 NxN 크기의 블록을 변환한 변환 블록에 대한 양자화를 수행한다. 구체적으로 양자화는 스케일링 행렬(MF)와 NxN 크기의 블록을 변환한 변환 블록을 곱한 값에 소정의 오프셋을 더한 값에 대해서 다음의 수학식; q=floor(QP/6)+m 의 q 비트만큼 비트 시프트 연산을 통해 수행된다. Zij를 양자화된 계수값, Wij를 변환 계수, f를 오프셋이라고 하면,
Figure PCTKR2011003006-appb-I000004
이고,
Figure PCTKR2011003006-appb-I000005
이다. 여기서, '.MF'는 행렬의 동일 위치의 원소를 곱하는 벡터곱 연산을 의미한다.
도 15는 본 발명의 다른 실시예에 따른 32 포인트 이산 코사인 변환의 흐름도(flow graph)를 도시한다.
도 15를 참조하면, x0 내지 x31은 입력값들을 나타낸다. y0 내지 y31은 이산 코사인 변환의 출력값들을 나타낸다. 변환시에 데이터 처리 방향은 좌측에서 우측이며, 역변환시에 데이터 처리 방향은 우측에서 좌측이다. 점에서 교차하는 2개의 라인은 2개의 수의 덧셈을 나타낸다. '-'는 부정(negation)을 나타낸다. 각 라인 위의 값 R(θ)는 도 16에 도시된 바와 같은 버터플라이 구조에 기초한 연산 과정을 나타낸다.
도 16은 도 15의 32 포인트 이산 코사인 변환을 구성하는 버터플라이 구조의 연산 과정을 나타낸 참조도이다.
도 16을 참조하면, 버터 플라이 구조의 연산은 입력값 [X1,X2]에 대해서 다음의 수학식;
Figure PCTKR2011003006-appb-I000006
과 같은 연산을 통해 출력값 [Y1, Y2]를 출력하는 것이다. 이러한 버터 플라이 구조의 연산 과정은 2개의 입력값을 2개의 출력값에 매핑시키는 과정에서 총 4개의 곱셈 연산과 2개의 덧셈 연산을 하게 된다.
일반적으로 곱셈 연산은 덧셈, 뺄셈 및 쉬프트 연산에 비하여 연산이 복잡하고 연산 시간 역시 많이 소요되므로 전체적인 연산을 느리게 한다. 따라서, 본 발명의 다른 실시예에 따른 영상 변환 방법에서는 버터 플라이 구조에 기초한 4개의 곱셈 연산과 2개의 덧셈 연산 과정을 3개의 곱셈 연산과 3개의 덧셈 연산 과정으로 대체한 변경된 버터플라이 구조에 기초하여 영상 변환을 수행한다.
도 17은 본 발명의 다른 실시예에 따른 영상 변환 방법을 나타낸 플로우 차트이다. 도 17을 참조하면, 단계 1710에서 버터플라이 구조의 곱셈 인수 중 삼각 함수 성분을 유리수로 치환한다. 전술한 바와 같이 도 15에 도시된 바와 같은 32 포인트 이산 코사인 변환의 계산에는 R(θ)에 따라서, cosθ 및 sinθ가 이용된다. 본 발명의 다른 실시예에서는 상기 θ값에 따른 cosθ 및 sinθ 값으로서 다음과 같은 근사화된 유리수를 이용할 수 있다. 하기 기재된 바와 같이 근사화되는 유리수는 분모가 2의 거듭제곱꼴인 유리수(dyadic rational)를 이용하는 것이 바람직하다.
cos(pi/64) = 255/256;sin(pi/64) = 3/64;cos(pi*5/64) = 31/32;sin(pi*5/64) = 31/128;cos(pi*9/64) = 231/256 ;sin(pi*9/64) = 109/256;cos(pi*13/64) = 205/256;sin(pi*13/64) = 19/32;cos(pi*17/64) = 171/256;sin(pi*17/64) = 189/256;cos(pi*21/64) = 131/256;sin(pi*21/64) = 219/256 ;cos(pi*25/64) = 43/128 ;sin(pi*25/64) = 241/256;cos(pi*29/64) = 37/256;sin(pi*29/64) = 253/256;cos(pi*3/32) = 61/64;sin(pi*3/32) = 37/128;cos(pi*7/32) = 197/256;sin(pi*7/32) = 81/128;cos(pi*11/32) = 15/32;sin(pi*11/32) = 225/256;cos(pi*15/32) = 25/256;sin(pi*15/32) = 127/128;cos(pi/16) = 251/256;sin(pi/16) = 49/256;cos(pi*3/16) = 53/64 ;sin(pi*3/16) = 71/128;cos(pi*5/16) = 71/128;sin(pi*5/16) = 53/64;cos(pi*7/16) = 49/256;sin(pi*7/16) = 251/256;cos(pi/8) = 59/64;sin(pi/8) = 97/256;cos(pi*3/8) = 97/256;sin(pi*3/8) = 59/64;cos(pi/4) = 181/256;sin(pi/4) = 181/256;
단계 1720에서, 버터플라이 구조의 4개의 곱셈 연산과 2개의 덧셈 연산 과정을 3개의 곱셈 연산과 3개의 덧셈 연산 과정으로 대체한 변경된 버터플라이 구조에 기초하여 NxN 크기(N은 정수)의 블록의 행 단위 및 열 단위 중 어느 하나에 대한 1차원 이산 코사인 변환을 수행한다.
도 18은 본 발명의 일 실시예에 따른 변경된 버터플라이 구조를 나타낸 도면이다. 도 18을 참조하면, 좌측에 도시된 바와 같은 버터플라이 구조(1810)의 연산에 의한 입력값 X1, X2에 대한 결과값 Y1, Y2는 다음의 수학식과 같다.
Y1=a*X1+b*X2; Y2=b*X1-a*X2
도 18의 좌측에 도시된 바와 같은 버터플라이 구조(1810)의 연산에서는 결과값 Y1, Y2를 얻기 위해서 총 4번의 곱셈 연산과 2번의 덧셈 또는 뺄셈 연산이 필요하다. 우측에 도시된 변경된 버터플라이 구조(1820)의 연산에 의한 입력값 X1, X2에 대한 결과값 Y1, Y2는 다음의 수학식과 같다.
Y1=X1*(a-b)+b*(X1+X2)=a*X1+b*X2;
Y2=b*(X1+X2)-X2*(a+b)=b*X1-a*X2
우측에 도시된 변경된 버터플라이 구조(1820)의 연산 과정에서는 b*(X1+X2)의 계산에서 1번의 곱셈 연산이 수행되고 그 결과값이 Y1과 Y2의 계산에 모두 이용되므로 총 3번의 곱셈 연산과 3번의 덧셈 또는 뺄셈 연산이 필요하다. 따라서, 변경된 버터플라이 구조(1820)을 통해서 동일한 결과값을 가지면서도 복잡한 곱셈 연산 과정을 줄임으로써 연산 속도를 향상시킬 수 있다. 한편, 도 18의 우측에 도시된 바와 같은 변경된 버터플라이 구조(1820)를 도 15의 32 포인트 이산 코사인 변환에 적용할 때, sine과 cosine의 선형 조합값이 필요한 연산이 있다. 이 경우, 다음과 같은 근사화된 유리값을 이용하는 것이 바람직하다.
cos(pi*30/64) = 25/256;cos(pi*30/64)+sin(pi*30/64) = 279/256;cos(pi*30/64)-sin(pi*30/64) = -229/256;cos(pi*12/64) = 53/64;cos(pi*12/64)+sin(pi*12/64) = 355/256;cos(pi*12/64)-sin(pi*12/64) = 35/128;cos(pi*4/64) = 251/256;cos(pi*4/64)+sin(pi*4/64) = 301/256;cos(pi*4/64)-sin(pi*4/64) = 201/256;cos(pi*24/64) = 97/256;cos(pi*24/64)+sin(pi*24/64) = 167/128;cos(pi*24/64)-sin(pi*24/64) = -69/128;cos(pi*8/64) = 59/64;cos(pi*8/64)+sin(pi*8/64) = 167/128;cos(pi*8/64)-sin(pi*8/64) = 69/128; ;cos(pi*28/64) = 49/256;cos(pi*28/64)+sin(pi*28/64) = 301/256;cos(pi*28/64)-sin(pi*28/64) = -201/256;cos(pi*20/64) = 71/128;cos(pi*20/64)+sin(pi*20/64) = 355/256;cos(pi*20/64)-sin(pi*20/64) = -35/128;
도 19는 본 발명의 다른 실시예에 따른 변경된 버터플라이 구조를 나타낸 도면이다. 도 19를 참조하면, 좌측에 도시된 바와 같은 버터플라이 구조(1910)의 연산에 의한 입력값 X1, X2에 대한 결과값 Y1, Y2는 다음의 수학식과 같다.
Y1=cosθ*X1+sinθ*X2; Y2=-sinθ*X1+cosθ*X2
도 19의 좌측에 도시된 바와 같은 버터플라이 구조(1910)의 연산에서는 결과값 Y1, Y2를 얻기 위해서 총 4번의 곱셈 연산과 2번의 덧셈 또는 뺄셈 연산이 필요하다.
우측에 도시된 변경된 버터플라이 구조(1920)의 연산에 의한 입력값 X1, X2에 대한 결과값 Y1, Y2를 삼각함수 공식을 이용하여 정리하면, 우측에 도시된 변경된 버터플라이 구조(1920)는 좌측에 도시된 버터플라이 구조(1910)와 동일한 결과값을 출력한다. 우측에 도시된 변경된 버터플라이 구조(1920)의 연산 과정에서는 총 3번의 곱셈 연산과 3번의 덧셈 또는 뺄셈 연산이 필요하다. 따라서, 변경된 버터플라이 구조(1920)을 통해서 동일한 결과값을 가지면서도 복잡한 곱셈 연산 과정을 줄임으로써 연산 속도를 향상시킬 수 있다. 한편, 도 19의 우측에 도시된 바와 같은 변경된 버터플라이 구조를 도 15의 32 포인트 이산 코사인 변환에 적용할 때, sine과 cosine의 분수값 및 tangent 값이 필요한 연산이 있다. 이 경우, 다음과 같은 근사화된 유리값을 이용하는 것이 바람직하다.
(1-cos(pi*17/64))/sin(pi*17/64) = 113/256;(1-cos(pi*13/64))/sin(pi*13/64) = 21/64;(1-cos(pi*21/64))/sin(pi*21/64) = 145/256;(1-cos(pi*9/64))/sin(pi*9/64) = 57/256;(1-cos(pi*25/64))/sin(pi*25/64) = 45/64;(1-cos(pi*5/64))/sin(pi*5/64) = 31/256;(1-cos(pi*29/64))/sin(pi*29/64) = 55/64 ;(1-cos(pi*1/64))/sin(pi*1/64) = 3/128;(1-cos(pi*16/64))/sin(pi*16/64) = 53/128;tan(pi*8/64) = 53/128;sin(pi*8/64)*cos(pi*8/64) = 45/128;tan(pi*4/64) = 25/128 ;sin(pi*4/64)*cos(pi*4/64) = 3/16;tan(pi*12/64) = 171/256;sin(pi*12/64)*cos(pi*12/64) = 59/128 ;tan(pi*16/64) = 255/256;sin(pi*16/64)*cos(pi*16/64) = 1/2; ;(1-cos(pi*7/32))/sin(pi*7/32) = 91/256 ;sin(pi*7/32) = 81/128;(1-cos(pi*11/32))/sin(pi*11/32) = 153/256;sin(pi*11/32) = 225/256; ;(1-cos(pi*3/32))/sin(pi*3/32) = 37/256;sin(pi*3/32) = 37/128;;(1-cos(pi*15/32))/sin(pi*15/32) = 29/32;sin(pi*15/32) = 127/128;;(1-cos(pi*6/32))/sin(pi*6/32) = 77/256;sin(pi*6/32) = 71/128;;(1-cos(pi*2/32))/sin(pi*2/32) = 25/256;sin(pi*2/32) = 49/256; ;1/tan(pi*3/8) = 53/128 ;sin(pi*3/8)*cos(pi*3/8) = 45/128;
도 20은 본 발명의 또 다른 실시예에 따른 변경된 버터 플라이 구조를 나타낸 도면이다. 도 20을 참조하면, 좌측의 버터 플라이 구조(2010)는 동일한 결과값을 출력하는 우측의 버터 플라이 구조(2020)으로 변경될 수 있다. 본 발명의 또 다른 실시예에 따른 변경된 버터 플라이 구조(2020)에서는 최종 결과값인 Y1과 Y2가 획득되기 전에 도면 부호 2025로 표시된 바와 같이 각 연산 결과가 cosα 및 (1/(1-cosα))와 곱셈 연산이 수행된다. 이러한 도면 부호 2025로 표시된 곱셈 연산은 변환 과정에서 수행되지 않고, 양자화 과정에서 수행되는 스케일링 행렬에 반영될 수 있다. 다시 말해서, 도면 부호 2025에 표시된 곱셈 인자를 스케일링 행렬의 각 원소에 곱해줌으로써 변환 단계에서의 곱셈 연산을 감소시키고, 대신에 곱셈 연산을 양자화 과정에 통합시킬 수도 있다. 이와 같이, 도면 부호 2025에 표시된 곱셈 인자를 양자화 과정에 통합시키고 변환 단계에서 생략하는 경우, 도 20에 따른 버터 플라이 구조에서는 총 2회의 곱셈 및 2회의 덧셈 연산만으로 구성될 수 있다.
도 21은 본 발명의 또 다른 실시예에 따른 변경된 버터 플라이 구조를 나타낸 도면이다. 도 21에서는 버터 플라이 구조의 연산에서 변수에 해당하는 R(θ)의 θ가 특수한 값을 갖을 때, 예를 들어 도시된 바와 같이 θ=π/4일 때, 우측에 도시된 바와 같은 변경된 버터 플라이 구조(2120)에 의한 연산에 의해서도 좌측에 도시된 버터 플라이 구조(2110)에 의한 연산과 동일한 결과를 얻을 수 있는 것을 도시한다. 우측에 도시된 버터 플라이 구조(2120)에 의한 연산 과정에서는 좌측에 도시된 버터 플라이 구조(2110)에 비하여 전체 연산 횟수를 감소시킬 수 있다.
도 18의 우측에 도시된 바와 같은 변경된 버터 플라이 구조(1820)의 연산을 도 15의 버터 플라이 구조 각각에 적용하여 32 포인트 이산 코사인 변환을 수행하는 경우, X0 내지 X31는 변환되어야 할 입력값, A0 내지 A31, B0 내지 B31, C0 내지 C31, D0 내지 D31, E0 내지 E31, F0 내지 F31은 중간값, t는 보조 변수, Y0 내지 Y31은 변환된 값을 나타낸다고 할 때, 변환 결과 Y0 내지 Y31은 다음의 연산 과정을 통해 획득될 수 있다.
A0 = X0 + X31; A31 = X0 - X31; A1 = X1 + X30; A30 = X1 - X30; A2 = X2 + X29; A29 = X2 - X29; A3 = X3 + X28; A28 = X3 - X28; A4 = X4 + X27; A27 = X4 - X27; A5 = X5 + X26; A26 = X5 - X26; A6 = X6 + X25; A25 = X6 - X25; A7 = X7 + X24; A24 = X7 - X24; A8 = X8 + X23; A23 = X8 - X23; A9 = X9 + X22; A22 = X9 - X22; A10 = X10 + X21; A21 = X10 - X21; A11 = X11 + X20; A20 = X11 - X20; A12 = X12 + X19; A19 = X12 - X19; A13 = X13 + X18; A18 = X13 - X18; A14 = X14 + X17; A17 = X14 - X17; A15 = X15 + X16; A16 = X15 - X16;
B0 = A0 + A15; B15 = A0 - A15; B1 = A1 + A14; B14 = A1 - A14; B2 = A2 + A13; B13 = A2 - A13; B3 = A3 + A12; B12 = A3 - A12; B4 = A4 + A11; B11 = A4 - A11; B5 = A5 + A10; B10 = A5 - A10; B6 = A6 + A9; B9 = A6 - A9; B7 = A7 + A8; B8 = A7 - A8;
t = ((171*(A16 + A31) >> 8); B16 = t - ((361*A31) >> 8); B31 = t - ((-17*A16) >> 8);
t = ((205*(A17 + A30) >> 8); B17 = t - ((53*A30) >> 8); B30 = t - ((358*A17) >> 8);
t = ((131*(A18 + A29) >> 8); B18 = t - ((351*A29) >> 8); B29 = t - ((-87*A18) >> 8);
t = ((231*(A19 + A28) >> 8); B19 = t - ((121*A28) >> 8); B28 = t - ((340*A19) >> 8);
*t = ((86*(A20 + A27) >> 8); B20 = t - ((327*A27) >> 8); B27 = t - ((-77*A20) >> 8);
t = ((248*(A21 + A26) >> 8); B21 = t - ((186*A26) >> 8); B26 = t - ((310*A21) >> 8);
t = ((37*(A22 + A25) >> 8); B22 = t - ((290*A25) >> 8); B25 = t - ((-215*A22) >> 8);
t = ((255*(A23 + A24) >> 8); B23 = t - ((243*A24) >> 8); B24 = t - ((268*A23) >> 8);
C0 = B0 + B7; C7 = B0 - B7; C1 = B1 + B6; C6 = B1 - B6; C2 = B2 + B5; C5 = B2 - B5; C3 = B3 + B4; C4 = B3 - B4;
t = ((197*(B8 + B15) >> 8); C8 = t - ((35*B15) >> 8); C15 = t - ((360*B8) >> 8);
t = ((120*(B9 + B14) >> 8); C9 = t - ((346*B14) >> 8); C14 = t - ((-105*B9) >> 8);
t = ((244*(B10 + B13) >> 8); C10 = t - ((170*B13) >> 8); C13 = t - ((319*B10) >> 8);
t = ((25*(B11 + B12) >> 8); C11 = t - ((279*B12) >> 8); C12 = t - ((-229*B11) >> 8);
C16 = B16 + B23; C23 = B16 - B23; C17 = B17 + B22; C22 = B17 - B22; C18 = B18 + B21; C21 = B18 - B21; C19 = B19 + B20; C20 = B19 - B20; C24 = B24 + B31; C31 = B24 - B31; C25 = B25 + B30; C30 = B25 - B30; C26 = B26 + B29; C29 = B26 - B29; C27 = B27 + B28; C28 = B27 - B28;
D0 = C0 + C3; D3 = C0 - C3; D1 = C1 + C2; D2 = C1 - C2; t = ((49*(C4 + C7) >> 8); D4 = t - ((-201*C7) >> 8); D7 = t - ((301*C4) >> 8);
t = ((142*(C5 + C6) >> 8); D5 = t - ((-70*C6) >> 8); D6 = t - ((355*C5) >> 8); D8 = C8 + C11; D11 = C8 - C11; D9 = C9 + C10; D10 = C9 - C10; D12 = C12 + C15; D15 = C12 - C15; D13 = C13 + C14; D14 = C13 - C14; D16 = C16 + C28; D28 = C16 - C28; D17 = C17 + C29; D29 = C17 - C29; D18 = C18 + C30; D30 = C18 - C30; D19 = C19 + C31; D31 = C19 - C31; D20 = C20 + C23; D23 = C20 - C23; D21 = C21 + C22; D22 = C21 - C22; D24 = C24 + C27; D27 = C24 - C27; D25 = C25 + C26; D26 = C25 - C26;
E0 = ((D0 + D1)*181 >> 8); E1 = ((D0 - D1)*181 >> 8);
t = (97*(D2 + D3) >> 8); E2 = t - ((-138*D3) >> 8); E3 = t - ((334*D2) >> 8); E4 = D4 + D5; E5 = D4 - D5; E6 = -D6 + D7; E7 = D6 + D7; E8 = D8 + D14; E14 = D8 - D14; E9 = D9 + D15; E15 = D9 - D15; E10 = D10 + D11; E11 = D10 - D11; E12 = D12 + D13; E13 = D12 - D13; E16 = ((D16 + D19)*181 >> 8); E19 = ((D16 - D19)*181 >> 8); E20 = D20 + D26; E26 = D20 - D26; E21 = D21 + D27; E27 = D21 - D27; E22 = D22 + D23; E23 = D22 - D23; E24 = D24 + D25; E25 = D24 - D25; E28 = ((D28 + D31)*181 >> 8); E31 = ((D28 - D31)*181 >> 8);
F5 = ((E5 + E7)*181 >> 8); F7 = ((E5 - E7)*181 >> 8);
t = (97*(E8 + E9) >> 8); F8 = t - ((334*E9) >> 8); F9 = t - ((-138*E8) >> 8); F11 = ((E11 + E12)*181 >> 8); F12 = ((E12 - F11)*181 >> 8);
t = (97*(E14 + E15) >> 8); F14 = t - ((334*E15) >> 8); F15 = t - ((-138*E14) >> 8); F16 = E16 + D18; F18 = E16 - D18; F17 = D17 + E19; F19 = D17 - E19;
t = (236*(E20 + E21) >> 8); F20 = t - ((138*E21) >> 8); F21 = t - ((334*E20) >> 8); F23 = ((E23 + E24)*181 >> 8); F24 = ((E23 - E24)*181 >> 8);
t = ((236*(E26 + E27)) >> 8); F26 = t - ((138*E27) >> 8); F27 = t - ((334*E26) >> 8); F28 = -E28 + D30; F30 = E28 + D30; F29 = -D29 + E31; F31 = D29 + E31;
t = (251*(F16 + F17) >> 8); G16 = t - ((301*F17) >> 8); G17 = t - ((201*F16) >> 8);
t = (212*(F18 + F19) >> 8); G18 = t - ((355*F19) >> 8); G19 = t - ((70*F18) >> 8);
t = (212*(F28 + F29) >> 8); G28 = t - ((355*F29) >> 8); G29 = t - ((70*F28) >> 8);
t = (251*(F30 + F31) >> 8); G30 = t - ((301*F31) >> 8); G31 = t - ((201*F30) >> 8);
Y0 = E0; Y1 = F24; Y2 = -F12; Y3 = -G16; Y4 = E4; Y5 = G31; Y6 = F8; Y7 = -F26; Y8 = E2; Y9 = F21; Y10 = F15; Y11 = G29; Y12 = F5; Y13 = -G18; Y14 = E13; Y15 = E22; Y16 = E1; Y17 = E25; Y18 = E10; Y19 = -G19; Y20 = F7; Y21 = -G28; Y22 = F14; Y23 = -F20; Y24 = E3; Y25 = -F27; Y26 = F9; Y27 = -G30; Y28 = E6; Y29 = -G17; Y30 = F11; Y31 = -F23
만약, 도 19의 우측에 도시된 바와 같은 변경된 버터 플라이 구조(1920)의 연산을 도 15의 버터 플라이 구조 각각에 적용하여 32 포인트 이산 코사인 변환을 수행하는 경우, X0 내지 X31는 변환되어야 할 입력값, A0 내지 A31, B0 내지 B31, C0 내지 C31, D0 내지 D31, E0 내지 E31, F0 내지 F31, G0내지 G31은 중간값, Y0 내지 Y31은 변환된 값을 나타낸다고 할 때, 변환 결과 Y0 내지 Y31은 다음의 연산 과정을 통해 획득될 수 있다.
A0 = X0 + X31; A31 = X0 - X31; A1 = X1 + X30; A30 = X1 - X30; A2 = X2 + X29; A29 = X2 - X29; A3 = X3 + X28; A28 = X3 - X28; A4 = X4 + X27; A27 = X4 - X27; A5 = X5 + X26; A26 = X5 - X26; A6 = X6 + X25; A25 = X6 - X25; A7 = X7 + X24; A24 = X7 - X24; A8 = X8 + X23; A23 = X8 - X23; A9 = X9 + X22; A22 = X9 - X22; A10 = X10 + X21; A21 = X10 - X21; A11 = X11 + X20; A20 = X11 - X20; A12 = X12 + X19; A19 = X12 - X19; A13 = X13 + X18; A18 = X13 - X18; A14 = X14 + X17; A17 = X14 - X17; A15 = X15 + X16; A16 = X15 - X16;
B0 = A0 + A15; B15 = A0 - A15; B1 = A1 + A14; B14 = A1 - A14; B2 = A2 + A13; B13 = A2 - A13; B3 = A3 + A12; B12 = A3 - A12; B4 = A4 + A11; B11 = A4 - A11; B5 = A5 + A10; B10 = A5 - A10; B6 = A6 + A9; B9 = A6 - A9; B7 = A7 + A8; B8 = A7 - A8; B16 = A16 - ((113*A31)>> 8); B31 = A31 + ((189*B16)>> 8); B16 = B16 - ((113*B31)>> 8); B17 = A17 + ((21*A30) >> 6); B30 = A30 - ((152*B17) >> 8); B17 = B17 + ((21*B30) >> 6); B18 = A18 - ((145*A29) >> 8); B29 = A29 + ((219*B18) >> 8); B18 = B18 - ((145*B29) >> 8); B19 = A19 + ((57*A28) >> 8); B28 = A28 - ((109*B19) >> 8); B19 = B19 + ((57*B28) >> 8); B20 = A20 - ((45*A27) >> 6); B27 = A27 + ((241*B20) >> 8); B20 = B20 - ((45*B27) >> 6); B21 = A21 + ((31*A26) >> 8); B26 = A26 - ((31*B21) >> 7); B21 = B21 + ((31*B26) >> 8); B22 = A22 - ((55*A25) >> 6); B25 = A25 + ((253*B22) >> 8); B22 = B22 - ((55*B25) >> 6); B23 = A23 + ((3*A24) >> 7); B24 = A24 - ((3*B23) >> 6); B23 = B23 + ((3*B24) >> 7);
C0 = B0 + B7; C7 = B0 - B7; C1 = B1 + B6; C6 = B1 - B6;
C2 = B2 + B5; C5 = B2 - B5; C3 = B3 + B4; C4 = B3 - B4;
C15 = B15 - ((B8*91) >> 8); C8 = B8 + ((C15*81) >> 7);
C15 = C15 - ((C8*91) >> 8); C9 = B9 - ((B14*153) >> 8);
C14 = B14 + ((C9*225) >> 8); C9 = C9 - ((C14*153) >> 8);
C13 = B13 - ((B10*37) >> 8); C10 = B10 + ((C13*37) >> 7);
*C13 = C13 - ((C10*37) >> 8); C11 = B11 - ((B12*29) >> 5);
C12 = B12 + ((C11*127) >> 7); C11 = C11 - ((C12*29) >> 5);
C16 = B16 + B23; C23 = B16 - B23; C17 = B17 + B22;
C22 = B17 - B22; C18 = B18 + B21; C21 = B18 - B21;
C19 = B19 + B20; C20 = B19 - B20; C24 = B24 + B31;
C31 = B24 - B31; C25 = B25 + B30; C30 = B25 - B30;
C26 = B26 + B29; C29 = B26 - B29; C27 = B27 + B28;
C28 = B27 - B28;
D0 = C0 + C3; D3 = C0 - C3; D1 = C1 + C2; D2 = C1 - C2;
D7 = C7 - ((C4*77) >> 8); D4 = C4 + ((D7*71) >> 7);
D7 = D7 - ((D4*77) >> 8); D6 = C6 - ((C5*25) >> 8);
D5 = C5 + ((D6*49) >> 8); D6 = D6 - ((D5*25) >> 8);
D8 = C8 + C11; D11 = C8 - C11; D9 = C9 + C10;
D10 = C9 - C10; D12 = C12 + C15; D15 = C12 - C15;
D13 = C13 + C14; D14 = C13 - C14; D16 = C16 + C28;
D28 = C16 - C28; D17 = C17 + C29; D29 = C17 - C29;
D18 = C18 + C30; D30 = C18 - C30; D19 = C19 + C31;
D31 = C19 - C31; D20 = C20 + C23; D23 = C20 - C23;
D21 = C21 + C22; D22 = C21 - C22; D24 = C24 + C27;
D27 = C24 - C27; D25 = C25 + C26; D26 = C25 - C26;
E0 = D0 + D1; E1 = (E0>>1) - D1;
E2 = -D2 + ((D3*53) >> 7); E3 = D3 - ((E2*45) >> 7);
E4 = D4 + D6; E6 = D4 - D6; E5 = D7 - D5; E7 = D7 + D5;
E8 = D8 + D14; E14 = D8 - D14; E9 = D9 + D15;
E15 = D9 - D15; E10 = D10 + D11; E11 = D10 - D11;
E12 = D12 + D13; E13 = D12 - D13;
E16 = ((D16 + D19)*181) >> 8; E19 = ((-D16 + D19)*181) >> 8;
E20 = D20 + D26; E26 = D20 - D26; E21 = D21 + D27;
E27 = D21 - D27; E22 = D22 + D23; E23 = D22 - D23;
E24 = D24 + D25; E25 = D24 - D25;
E28 = ((D28 + D31)*181) >> 8; E31 = ((-D28 + D31)*181) >> 8;
F7 = E7 + E4; F4 = (F7>>1) - E4;
F8 = E8 + ((E9*53) >> 7); F9 = -E9 + ((F8*45) >> 7);
F11 = E11 + E12; F12 = E12 - (F11 >> 1);
F14 = E14 + ((E15*53) >> 7); F15 = E15 - ((F14*45) >> 7);
F16 = E16 + D18; F18 = E16 - D18; F17 = D17 + E19;
F19 = D17 - E19; F20 = E20 + ((E21*53) >> 7);
F21 = E21 - ((F20*45) >> 7); F23 = E23 + ((E24*255) >> 8);
F24 = E24 - (F23 >> 1); F26 = E26 + ((E27*53) >> 7);
F27 = E27 - ((F26*45) >> 7); F28 = -E28 + D30;
F30 = E28 + D30; F29 = -D29 +E31; F31 = D29 + E31;
*
G16 = F16 - ((F17*25) >> 7); G17 = F17 + ((G16*3) >> 4);
G18 = F18 - ((F19*171) >> 8); G19 = F19 + ((G18*59) >> 7);
G28 = F28 - ((F29*171) >> 8); G29 = F29 + ((G28*59) >> 7);
G30 = F30 - ((F31*25) >> 7); G31 = F31 + ((G30*3) >> 4);
Y0 = E0; Y1 = F24; Y2 = F12; Y3 = -G16; Y4 = F7; Y5 = G31; Y6 = F9; Y7 = -F26; Y8 = E3; Y9 = F21; Y10 = F14; Y11 = G29; Y12 = E5; Y13 = -G18; Y14 = E13; Y15 = E22; Y16 = E1; Y17 = E25; Y18 = E10; Y19 = -G19; Y20 = E6; Y21 = -G28; Y22 = F15; Y23 = -F20; Y24 = E2; Y25 = -F27; Y26 = F8; Y27 = -G30; Y28 = F4; Y29 = -G17; Y30 = F11; Y31 = -F23
한편, 도 18 및 도 19에 도시된 변경된 버터플라이 구조에 기초한 32x32 크기의 블록의 변환을 위한 변경된 이산 코사인 변환 행렬을 A라고 할 때, 도 15에 대응되는 32x32 크기의 블록의 이산 코사인 변환에 이용되는 원래의 NxN 변환 행렬(Original_A)과 변경된 이산 코사인 변환 행렬 A 사이의 차이값을 보정하기 위한 스케일링 행렬 및 시프트 연산을 적용하여 NxN 크기의 블록을 변환한 변환 블록에 대한 양자화를 수행할 수 있다.
전술한 도 5과 같이, 스케일링 행렬은 각 i번째 행의 원소가 Si(i는 1부터 N까지의 정수)의 값을 갖는 NxN 크기의 중간 행렬(S)의 각 원소와 변경된 이산 코사인 변환 행렬 A의 동일 위치의 원소들을 각각 곱한 값(SⓧA)과, 원래의 NxN 변환 행렬 사이의 차이인 변환 오차 행렬(Original_A-SⓧA)을 획득하고, 변환 오차 행렬(Original_A- SⓧA)의 대각 성분을 제외한 나머지 원소들의 제곱합이 최소가 되도록 하는 Si 값들을 획득하며, 획득된 Si값들을 적용한 NxN 크기의 중간 행렬(S)의 각 원소와 중간 행렬의 전치 행렬(ST)의 동일 위치의 원소들을 각각 곱한 행렬(SⓧST)에 기초하여 생성될 수 있다. 원래의 NxN 변환 행렬(Original_A)이 차이가 난다는 점을 제외하고는 구체적인 과정은 전술한 도 5의 단계 530 및 540과 동일하므로 구체적인 설명은 생략한다. 도 18의 우측에 도시된 변경된 버터 플라이 구조를 적용하였을 때 32x32 입력 블록에 대한 양자화 파라메터(QP)에 따른 스케일링 행렬(MF)의 예는 도 22 내지 도 27과 같다. 도 22 내지 도 27에서는 m=10인 경우이다. 또한, 도 19의 우측에 도시된 변경된 버터 플라이 구조를 적용하였을 때 32x32 입력 블록에 대한 양자화 파라메터(QP)에 따른 스케일링 행렬(MF)의 예는 도 28 내지 도33과 같다. 도 28 내지 도 33에서는 m=10인 경우이다.
한편, 역양자화 단계에서는 이산 코사인 역변환에 이용되는 원래의 NxN 역변환 행렬과 치환된 NxN 변환 행렬의 역행렬인 NxN 역변환 행렬 사이의 차이값을 보정하기 위한 역스케일링 행렬 및 시프트 연산을 적용하여 역양자화를 수행한다. 전술한 도 18 및 도 19의 우측에 도시된 변경된 버터 플라이 구조를 적용하는 경우 이산 코사인 변환을 나타내는 행렬이 변화되기 때문에 역스케일링 행렬 역시 변화된다.
역스케일링 행렬(V)는 전술한 스케일링 행렬(MF)의 생성시에도 이용되는 중간 행렬(S)과 중간 행렬의 전치 행렬(ST)의 동일 위치의 원소들을 각각 곱한 행렬(SⓧST)에 해당하는 PF에 기초하여 생성될 수 있다. 구체적으로, 양자화 스텝을 Qstep, 중간 행렬(S)과 중간 행렬의 전치 행렬(ST)동일 위치의 원소들을 각각 곱한 행렬을 PF, n은 양의 정수라고 할 때, 역스케일링 행렬(V)은 다음의 수학식; V=Qstep*PF*2^n 을 통해 획득된다.
전술한 바와 같이 역스케일링 행렬(V)가 결정되면, 역양자화는 역스케일링 행렬(V)와 양자화된 변환 계수를 곱한 값에 대해서 floor(QP/6)(floor[x]는 x보다 작거나 같은 최대 정수, QP는 양자화 파라메터) 비트만큼 비트 시프트 연산을 통해 수행될 수 있다. 즉, Zij를 양자화된 계수값, Wij를 변환 계수라고 하면 다음의 수학식; Wij=(Zij)<<floor(QP/6)을 통해 양자화된 계수를 역양자화한 Wij를 획득할 수 있다.
도 18의 우측에 도시된 변경된 버터 플라이 구조를 적용하였을 때 32x32 입력 블록에 대한 양자화 파라메터(QP)에 따른 역스케일링 행렬(v)의 예는 도 34 내지 도 39과 같다. 도 34 내지 도 39에서는 n=10인 경우이다. 또한, 도 19의 우측에 도시된 변경된 버터 플라이 구조를 적용하였을 때 32x32 입력 블록에 대한 양자화 파라메터(QP)에 따른 역스케일링 행렬(V)의 예는 도 40 내지 도 45과 같다. 도 40내지 도 45에서는 n=10인 경우이다.
또한, 전술한 도 6과 유사하게 스케일링 행렬은 이산 코사인 변환에 이용되는 원래의 NxN 변환 행렬의 각 원소를 변경된 이산 코사인 변환 행렬 A의 동일 위치의 원소들로 나눔으로써 획득된 중간 행렬의 각 원소와 중간 행렬의 전치 행렬의 동일 위치의 원소를 곱하여 획득된 행렬일 수 있다. 도 18 및 도 19의 우측에 도시된 변경된 버터플라이 구조를 도 15의 알고리즘에 적용한 N 포인트 1차원 이산 코사인 변환을 나타내는 변경된 이산 코사인 변환 행렬(A)이 차이가 난다는 점을 제외하고는 구체적인 과정은 전술한 도 6과 동일하므로 구체적인 설명은 생략한다. 도 18의 우측에 도시된 변경된 버터 플라이 구조를 적용하였을 때 32x32 입력 블록에 대한 양자화 파라메터(QP)에 따른 스케일링 행렬(MF)의 예는 도 46 내지 도 51과 같다. 도 46 내지 도 51에서는 m=10인 경우이다. 또한, 도 19의 우측에 도시된 변경된 버터 플라이 구조를 적용하였을 때 32x32 입력 블록에 대한 양자화 파라메터(QP)에 따른 스케일링 행렬(MF)의 예는 도 52 내지 도 57과 같다. 도 52 내지 도 57에서는 m=10인 경우이다.
스케일링 행렬을 도 46 내지 57에 적용된 바와 같이 이산 코사인 변환에 이용되는 원래의 NxN 변환 행렬의 각 원소를 변경된 이산 코사인 변환 행렬 A의 동일 위치의 원소들로 나눔으로써 중간 행렬을 획득하고, 획득된 중간 행렬의 각 원소를 중간 행렬의 전치 행렬의 동일 위치의 원소와 곱하여 획득하는 경우, 원래의 NxN 변환 행렬이 차이가 나기 때문에 역스케일링 행렬(V) 역시 변경된다. 도 18의 우측에 도시된 변경된 버터 플라이 구조를 적용하였을 때 32x32 입력 블록에 대한 양자화 파라메터(QP)에 따른 역스케일링 행렬(v)의 예는 도 58 내지 도 63과 같다. 도 58 내지 도 63에서는 n=10인 경우이다. 또한, 도 19의 우측에 도시된 변경된 버터 플라이 구조를 적용하였을 때 32x32 입력 블록에 대한 양자화 파라메터(QP)에 따른 역스케일링 행렬(V)의 예는 도 64 내지 도 69과 같다. 도 64 내지 도 69에서는 n=10인 경우이다.
한편, 전술한 도 6과 유사하게 스케일링 행렬은 이산 코사인 변환에 이용되는 원래의 NxN 변환 행렬의 각 원소를 변경된 이산 코사인 변환 행렬 A의 동일 위치의 원소들로 나눔으로써 획득된 중간 행렬의 각 원소를 중간 행렬의 전치 행렬의 동일 위치의 원소들을 곱하여 획득된 행렬을 이용하는 한편, 역스케일링 행렬은 중간 행렬(S)을 이용하는 대신에 원래의 32 포인트 이산 코사인 역변환 행렬(Original_InverseA)의 각 원소와, 본 발명의 일 실시예에 따른 변경된 버터 플라이 구조에 대응되는 32 포인트 이산 코사인 변환 행렬(InverseA)의 동일 위치의 원소를 직접 나눔으로써 획득된 중간 행렬(R)을 이용하여 결정될 수 있다. 이 경우, 중간 행렬(R)의 각 원소와 중간 행렬(R)의 전치 행렬(RT)의 동일 위치의 원소들을 각각 곱한 행렬(RⓧRT)에 기초하여 역스케일링 행렬(V)을 생성한다. 구체적으로, 중간 행렬(R)과 중간 행렬의 전치 행렬(RT)의 동일 위치의 원소들을 각각 곱한 행렬(RⓧRT)을 BF, n은 양의 정수라고 할 때, 역스케일링 행렬(V)은 다음의 수학식; V=Qstep*BF*2^n 을 통해 획득된다. 도 18의 우측에 도시된 변경된 버터 플라이 구조를 적용하였을 때 32x32 입력 블록에 대한 양자화 파라메터(QP)에 따른 스케일링 행렬(MF)의 예는 도 70 내지 도 75과 같다. 도 70 내지 도 75에서는 m=10인 경우이다. 또한, 도 19의 우측에 도시된 변경된 버터 플라이 구조를 적용하였을 때 32x32 입력 블록에 대한 양자화 파라메터(QP)에 따른 스케일링 행렬(MF)의 예는 도 76 내지 도 81과 같다. 도 76 내지 도 81에서는 m=10인 경우이다. 도 18의 우측에 도시된 변경된 버터 플라이 구조를 적용하였을 때 32x32 입력 블록에 대한 양자화 파라메터(QP)에 따른 역스케일링 행렬(v)의 예는 도 82 내지 도 87과 같다. 도 82 내지 도 87에서는 n=10인 경우이다. 또한, 도 19의 우측에 도시된 변경된 버터 플라이 구조를 적용하였을 때 32x32 입력 블록에 대한 양자화 파라메터(QP)에 따른 역스케일링 행렬(V)의 예는 도 88 내지 도 93과 같다. 도 88 내지 도 93에서는 n=10인 경우이다.
도 95은 본 발명의 일 실시예에 따른 영상 복호화 장치를 나타낸 블록도이다.
도 95을 참조하면, 본 발명의 일 실시예에 따른 영상 복호화 장치(10000)는 엔트로피 복호화부(10010), 역양자화부(10020), 역변환부(10030) 및 예측부(10040)를 포함한다.
엔트로피 복호화부(10010)는 입력 비트스트림으로부터 복호화되는 현재 블록의 예측 모드 정보, 참조 픽처 정보 및 레지듀얼 정보를 추출한다.
역양자화부(10020)는 엔트로피복호화부(10010)에서 엔트로피 복호화된 양자화된 변환 계수들을 역양자화한다. 전술한 바와 같이 본 발명의 다양한 실시예를 통해서 역스케일링 행렬(V)이 결정되면, 역양자화부(10020)는 역스케일링 행렬(V)와 양자화된 변환 계수를 곱한 값에 대해서 floor(QP/6)(floor[x]는 x보다 작거나 같은 최대 정수, QP는 양자화 파라메터) 비트만큼 비트 시프트 연산을 통해 역양자화를 수행한다. 즉, Zij를 양자화된 계수값, Wij를 변환 계수라고 하면 다음의 수학식; Wij=(Zij)<<floor(QP/6)을 통해 양자화된 계수를 역양자화한 Wij를 획득할 수 있다.
역변환부(10030)는 역양자화된 변환 계수들을 역변환한다. 역변환 결과, 블록 단위에 대한 레지듀얼 값들이 복원된다. 역변환 과정은 본 발명의 다양한 실시예를 통해서 획득된 NxN 변환 행렬(A)의 역행렬(A-1)을 이용한 N 포인트 이산 코사인 역변환을 통해 수행될 수 있다.
전술한 도 3의 실시예에 따라서 변환된 16x16 입력 블록에 대하여 치환된 16x16 변환 행렬(A)의 역변환 행렬(A-1)를 이용한 1차원 이산 코사인 역변환을 수행하는 경우, X0 내지 X15은 역변환되어야 할 입력값, B0 내지 B15, C0 내지 C15, D0 내지 D15, E0 내지 E15, F0 내지 F15, G0 내지 G15은 중간값, Y0 내지 Y15은 역변환된 값을 나타낸다고 할 때, 다음의 연산 과정과 같이 표현될 수 있다.
G0 = X0;G8 = X1;G4 = X2;G12 = X3;G2 = X4;G10 = X5;G6 = X6;G14 = X7;G1 = X8;G9 = X9;G5 = X10;G13 = X11;G3 = X12;G11 = X13;G7 = X14;G15 = X15;F0 = G0;F1 = G1;F2 = G2;F3 = G3;F4 = G4;F5 = G5;F6 = G6;F7 = G7;F8 = (6*G8-63*G15) >> 6;F9 = (49*G9-40*G14) >> 6;F10 = (30*G10-56*G13) >> 6;F11 = (61*G11-18*G12) >> 6;F12 = (61*G12+18*G11) >> 6;F13 = (30*G13+56*G10) >> 6;F14 = (49*G14+40*G9) >> 6;F15 = (6*G15+63*G8) >> 6;E0 = F0;E1 = F1;E2 = F2;E3 = F3;E4 = (12*F4-62*F7) >> 6;E5 = (53*F5-35*F6) >> 6;E6 = (53*F6+35*F5) >> 6;E7 = (12*F7+62*F4) >> 6;E8 = F8+F9;E9 = F8-F9;E10 = F11-F10;E11 = F11+F10;E12 = F12+F13;E13 = F12-F13;E14 = F15-F14;E15 = F15+F14;D0 = (45*(E0+E1)) >> 6;D1 = (45*(E0-E1)) >> 6;D2 = (24*E2-59*E3) >> 6;D3 = (59*E2+24*E3) >> 6;D4 = E4+E5;D5 = E4-E5;D6 = E7-E6;D7 = E7+E6;D8 = E8;D9 = (24*E14-59*E9) >> 6;D10 = (-59*E13-24*E10) >> 6;D11 = E11;D12 = E12;D13 = (24*E13-59*E10) >> 6;D14 = (59*E14+24*E9) >> 6;D15 = E15;C0 = D0+D3;C3 = D0-D3;C8 = D8+D11;C11 = D8-D11;C12 = D15-D12;C15 = D15+D12;C1 = D1+D2;C2 = D1-D2;C9 = D9+D10;C10 = D9-D10;C13 = D14-D13;C14 = D14+D13;C4 = D4;C5 = (45*(D6-D5)) >> 6;C6 = (45*(D6+D5)) >> 6;C7 = D7;B0 = C0+C7;B7 = C0-C7;B1 = C1+C6;B6 = C1-C6;B2 = C2+C5;B5 = C2-C5;B3 = C3+C4;B4 = C3-C4;B8 = C8;B14 = C14;B10 = (45*(C13-C10)) >> 6;B13 = (45*(C13+C10)) >> 6;B9 = C9;B15 = C15;B11 = (45*(C12-C11)) >> 6;B12 = (45*(C12+C11)) >> 6;Y0 = B0+B15;Y15 = B0-B15;Y1 = B1+B14;Y14 = B1-B14;Y2 = B2+B13;Y13 = B2-B13;Y3 = B3+B12;Y12 = B3-B12;Y4 = B4+B11;Y11 = B4-B11;Y5 = B5+B10;Y10 = B5-B10;Y6 = B6+B9;Y9 = B6-B9;Y7 = B7+B8;Y8 = B7-B8
전술한 도 3의 실시예에 따라서 변환된 32x32 입력 블록에 대하여 치환된 32x32 변환 행렬(A)의 역변환 행렬(A-1)를 이용한 1차원 이산 코사인 역변환을 수행하는 경우, X0 내지 X31은 역변환되어야 할 입력값, A0 내지 A31, B0 내지 B31, C0 내지 C31, D0 내지 D31, E0 내지 E31, F0 내지 F31, G0 내지 G31, H0 내지 H31은 중간값, Y0 내지 Y31은 역변환된 값을 나타낸다고 할 때, 다음의 연산 과정과 같이 표현될 수 있다.
H0 = X0;H16 = X1;H8 = X2;H24 = X3;H4 = X4;H20 = X5;H12 = X6;H28 = X7;H2 = X8;H18 = X9;H10 = X10;H26 = X11;H6 = X12;H22 = X13;H14 = X14;H30 = X15;H1 = X16;H17 = X17;H9 = X18;H25 = X19;H5 = X20;H21 = X21;H13 = X22;H29 = X23;H3 = X24;H19 = X25;H11 = X26;H27 = X27;H7 = X28;H23 = X29;H15 = X30;H31 = X31;G0 = H0;G1 = H1;G2 = H2;G3 = H3;G4 = H4;G5 = H5;G6 = H6;G7 = H7;G8 = H8;G9 = H9;G10 = H10;G11 = H11;G12 = H12;G13 = H13;G14 = H14;G15 = H15;G16 = (12*H16-255*H31) >> 8;G17 = (189*H17-171*H30) >> 8;G18 = (109*H18-231*H29) >> 8;G19 = (241*H19-86*H28) >> 8;G20 = (62*H20-248*H27) >> 8;G21 = (219*H21-131*H26) >> 8;G22 = (152*H22-205*H25) >> 8;G23 = (253*H23-37*H24) >> 8;G24 = (253*H24+37*H23) >> 8;G25 = (152*H25+205*H22) >> 8;G26 = (219*H26+131*H21) >> 8;G27 = (62*H27+248*H20) >> 8;G28 = (241*H28+86*H19) >> 8;G29 = (109*H29+231*H18) >> 8;G30 = (189*H30+171*H17) >> 8;G31 = (12*H31+255*H16) >> 8;F0 = G0;F1 = G1;F2 = G2;F3 = G3;F4 = G4;F5 = G5;F6 = G6;F7 = G7;F8 = (25*G8-254*G15) >> 8;F9 = (197*G9-162*G14) >> 8;F10 = (120*G10-225*G13) >> 8;F11 = (244*G11-74*G12) >> 8;F12 = (244*G12+74*G11) >> 8;F13 = (120*G13+225*G10) >> 8;F14 = (197*G14+162*G9) >> 8;F15 = (25*G15+254*G8) >> 8;F16 = G16+G17;F17 = G16-G17;F18 = G19-G18;F19 = G19+G18;F20 = G20+G21;F21 = G20-G21;F22 = G23-G22;F23 = G23+G22;F24 = G24+G25;F25 = G24-G25;F26 = G27-G26;F27 = G27+G26;F28 = G28+G29;F29 = G28-G29;F30 = G31-G30;F31 = G31+G30;E0 = F0;E1 = F1;E2 = F2;E3 = F3;E4 = (49*F4-251*F7) >> 8;E5 = (212*F5-142*F6) >> 8;E6 = (212*F6+142*F5) >> 8;E7 = (49*F7+251*F4) >> 8;E8 = F8+F9;E9 = F8-F9;E10 = F11-F10;E11 = F11+F10;E12 = F12+F13;E13 = F12-F13;E14 = F15-F14;E15 = F15+F14;E16 = F16;E17 = (49*F30-251*F17) >> 8;E18 = (-251*F29-49*F18) >> 8;E19 = F19;E20 = F20;E21 = (212*F26-142*F21) >> 8;E22 = (-142*F25-212*F22) >> 8;E23 = F23;E24 = F24;E25 = (212*F25-142*F22) >> 8;E26 = (142*F26+212*F21) >> 8;E27 = F27;E28 = F28;E29 = (49*F29-251*F18) >> 8;E30 = (251*F30+49*F17) >> 8;E31 = F31;D0 = (181*(E0+E1)) >> 8;D1 = (181*(E0-E1)) >> 8;D2 = (97*E2-236*E3) >> 8;D3 = (236*E2+97*E3) >> 8;D4 = E4+E5;D5 = E4-E5;D6 = E7-E6;D7 = E7+E6;D8 = E8;D9 = (97*E14-236*E9) >> 8;D10 = (-236*E13-97*E10) >> 8;D11 = E11;D12 = E12;D13 = (97*E13-236*E10) >> 8;D14 = (236*E14+97*E9) >> 8;D15 = E15;D16 = E16+E19;D19 = E16-E19;D20 = E23-E20;D23 = E23+E20;D24 = E24+E27;D27 = E24-E27;D28 = E31-E28;D31 = E31+E28;D17 = E17+E18;D18 = E17-E18;D21 = E22-E21;D22 = E22+E21;D25 = E25+E26;D26 = E25-E26;D29 = E30-E29;D30 = E30+E29;C0 = D0+D3;C3 = D0-D3;C8 = D8+D11;C11 = D8-D11;C12 = D15-D12;C15 = D15+D12;C1 = D1+D2;C2 = D1-D2;C9 = D9+D10;C10 = D9-D10;C13 = D14-D13;C14 = D14+D13;C4 = D4;C5 = (181*(D6-D5)) >> 8;C6 = (181*(D6+D5)) >> 8;C7 = D7;C16 = D16;C18 = (97*D29-236*D18) >> 8;C20 = (-236*D27-97*D20) >> 8;C22 = D22;C24 = D24;C26 = (-236*D21+97*D26) >> 8;C28 = (97*D19+236*D28) >> 8;C30 = D30;C17 = D17;C19 = (97*D28-236*D19) >> 8;C21 = (-236*D26-97*D21) >> 8;C23 = D23;C25 = D25;C27 = (-236*D20+97*D27) >> 8;C29 = (97*D18+236*D29) >> 8;C31 = D31;B0 = C0+C7;B7 = C0-C7;B1 = C1+C6;B6 = C1-C6;B2 = C2+C5;B5 = C2-C5;B3 = C3+C4;B4 = C3-C4;B8 = C8;B14 = C14;B10 = (181*(C13-C10)) >> 8;B13 = (181*(C13+C10)) >> 8;B9 = C9;B15 = C15;B11 = (181*(C12-C11)) >> 8;B12 = (181*(C12+C11)) >> 8;B16 = C16+C23;B23 = C16-C23;B24 = C31-C24;B31 = C31+C24;B17 = C17+C22;B22 = C17-C22;B25 = C30-C25;B30 = C30+C25;B18 = C18+C21;B21 = C18-C21;B26 = C29-C26;B29 = C29+C26;B19 = C19+C20;B20 = C19-C20;B27 = C28-C27;B28 = C28+C27;A0 = B0+B15;A15 = B0-B15;A1 = B1+B14;A14 = B1-B14;A2 = B2+B13;A13 = B2-B13;A3 = B3+B12;A12 = B3-B12;A4 = B4+B11;A11 = B4-B11;A5 = B5+B10;A10 = B5-B10;A6 = B6+B9;A9 = B6-B9;A7 = B7+B8;A8 = B7-B8;A16 = B16;A28 = B28;A20 = (181*(B27-B20)) >> 8;A27 = (181*(B27+B20)) >> 8;A17 = B17;A29 = B29;A21 = (181*(B26-B21)) >> 8;A26 = (181*(B26+B21)) >> 8;A18 = B18;A30 = B30;A22 = (181*(B25-B22)) >> 8;A25 = (181*(B25+B22)) >> 8;A19 = B19;A31 = B31;A23 = (181*(B24-B23)) >> 8;A24 = (181*(B24+B23)) >> 8;Y0 = (A0+A31);Y31 = (A0-A31);Y1 = (A1+A30);Y30 = (A1-A30);Y2 = (A2+A29);Y29 = (A2-A29);Y3 = (A3+A28);Y28 = (A3-A28);Y4 = (A4+A27);Y27 = (A4-A27);Y5 = (A5+A26);Y26 = (A5-A26);Y6 = (A6+A25);Y25 = (A6-A25);Y7 = (A7+A24);Y24 = (A7-A24);Y8 = (A8+A23);Y23 = (A8-A23);Y9 = (A9+A22);Y22 = (A9-A22);Y10 = (A10+A21);Y21 = (A10-A21);Y11 = (A11+A20);Y20 = (A11-A20);Y12 = (A12+A19);Y19 = (A12-A19);Y13 = (A13+A18);Y18 = (A13-A18);Y14 = (A14+A17);Y17 = (A14-A17);Y15 = (A15+A16);Y16 = (A15-A16)
전술한 도 3의 실시예에 따라서 변환된 64x64 입력 블록에 대하여 치환된 64x64 변환 행렬(A)의 역변환 행렬(A-1)를 이용한 1차원 이산 코사인 역변환을 수행하는 경우, X0 내지 X63은 역변환되어야 할 입력값, A0 내지 A63, B0 내지 B63, C0 내지 C63, D0 내지 D63, E0 내지 E63, F0 내지 F63, G0 내지 G63, H0 내지 H63, I0 내지 I63, O0 내지 O63은 중간값, Y0 내지 Y63은 역변환된 값을 나타낸다고 할 때, 다음의 연산 과정과 같이 표현될 수 있다.
I0 = X0;I32 = X1;I16 = X2;I48 = X3;I8 = X4;I40 = X5;I24 = X6;I56 = X7;I4 = X8;I36 = X9;I20 = X10;I52 = X11;I12 = X12;I44 = X13;I28 = X14;I60 = X15;I2 = X16;I34 = X17;I18 = X18;I50 = X19;I10 = X20;I42 = X21;I26 = X22;I58 = X23;I6 = X24;I38 = X25;I22 = X26;I54 = X27;I14 = X28;I46 = X29;I30 = X30;I62 = X31;I1 = X32;I33 = X33;I17 = X34;I49 = X35;I9 = X36;I41 = X37;I25 = X38;I57 = X39;I5 = X40;I37 = X41;I21 = X42;I53 = X43;I13 = X44;I45 = X45;I29 = X46;I61 = X47;I3 = X48;I35 = X49;I19 = X50;I51 = X51;I11 = X52;I43 = X53;I27 = X54;I59 = X55;I7 = X56;I39 = X57;I23 = X58;I55 = X59;I15 = X60;I47 = X61;I31 = X62;I63 = X63;H0 = I0;H1 = I1;H2 = I2;H3 = I3;H4 = I4;H5 = I5;H6 = I6;H7 = I7;H8 = I8;H9 = I9;H10 = I10;H11 = I11;H12 = I12;H13 = I13;H14 = I14;H15 = I15;H16 = I16;H17 = I17;H18 = I18;H19 = I19;H20 = I20;H21 = I21;H22 = I22;H23 = I23;H24 = I24;H25 = I25;H26 = I26;H27 = I27;H28 = I28;H29 = I29;H30 = I30;H31 = I31;H32 = (25*I32-1024*I63) >> 10;H33 = (742*I33-706*I62) >> 10;H34 = (415*I34-936*I61) >> 10;H35 = (955*I35-369*I60) >> 10;H36 = (224*I36-999*I59) >> 10;H37 = (865*I37-548*I58) >> 10;H38 = (590*I38-837*I57) >> 10;H39 = (1009*I39-175*I56) >> 10;H40 = (125*I40-1016*I55) >> 10;H41 = (807*I41-630*I54) >> 10;H42 = (505*I42-891*I53) >> 10;H43 = (987*I43-273*I52) >> 10;H44 = (321*I44-972*I51) >> 10;H45 = (915*I45-460*I50) >> 10;H46 = (669*I46-775*I49) >> 10;H47 = (1021*I47-75*I48) >> 10;H48 = (1021*I48+75*I47) >> 10;H49 = (669*I49+775*I46) >> 10;H50 = (915*I50+460*I45) >> 10;H51 = (321*I51+972*I44) >> 10;H52 = (987*I52+273*I43) >> 10;H53 = (505*I53+891*I42) >> 10;H54 = (807*I54+630*I41) >> 10;H55 = (125*I55+1016*I40) >> 10;H56 = (1009*I56+175*I39) >> 10;H57 = (590*I57+837*I38) >> 10;H58 = (865*I58+548*I37) >> 10;H59 = (224*I59+999*I36) >> 10;H60 = (955*I60+369*I35) >> 10;H61 = (415*I61+936*I34) >> 10;H62 = (742*I62+706*I33) >> 10;H63 = (25*I63+1024*I32) >> 10;G0 = H0;G1 = H1;G2 = H2;G3 = H3;G4 = H4;G5 = H5;G6 = H6;G7 = H7;G8 = H8;G9 = H9;G10 = H10;G11 = H11;G12 = H12;G13 = H13;G14 = H14;G15 = H15;G16 = (50*H16-1023*H31) >> 10;G17 = (759*H17-688*H30) >> 10;G18 = (438*H18-926*H29) >> 10;G19 = (964*H19-345*H28) >> 10;G20 = (249*H20-993*H27) >> 10;G21 = (878*H21-526*H26) >> 10;G22 = (610*H22-822*H25) >> 10;G23 = (1013*H23-150*H24) >> 10;G24 = (1013*H24+150*H23) >> 10;G25 = (610*H25+822*H22) >> 10;G26 = (878*H26+526*H21) >> 10;G27 = (249*H27+993*H20) >> 10;G28 = (964*H28+345*H19) >> 10;G29 = (438*H29+926*H18) >> 10;G30 = (759*H30+688*H17) >> 10;G31 = (50*H31+1023*H16) >> 10;G32 = H32+H33;G33 = H32-H33;G34 = H35-H34;G35 = H35+H34;G36 = H36+H37;G37 = H36-H37;G38 = H39-H38;G39 = H39+H38;G40 = H40+H41;G41 = H40-H41;G42 = H43-H42;G43 = H43+H42;G44 = H44+H45;G45 = H44-H45;G46 = H47-H46;G47 = H47+H46;G48 = H48+H49;G49 = H48-H49;G50 = H51-H50;G51 = H51+H50;G52 = H52+H53;G53 = H52-H53;G54 = H55-H54;G55 = H55+H54;G56 = H56+H57;G57 = H56-H57;G58 = H59-H58;G59 = H59+H58;G60 = H60+H61;G61 = H60-H61;G62 = H63-H62;G63 = H63+H62;F0 = G0;F1 = G1;F2 = G2;F3 = G3;F4 = G4;F5 = G5;F6 = G6;F7 = G7;F8 = (100*G8-1019*G15) >> 10;F9 = (792*G9-650*G14) >> 10;F10 = (483*G10-903*G13) >> 10;F11 = (980*G11-297*G12) >> 10;F12 = (980*G12+297*G11) >> 10;F13 = (483*G13+903*G10) >> 10;F14 = (792*G14+650*G9) >> 10;F15 = (100*G15+1019*G8) >> 10;F16 = G16+G17;F17 = G16-G17;F18 = G19-G18;F19 = G19+G18;F20 = G20+G21;F21 = G20-G21;F22 = G23-G22;F23 = G23+G22;F24 = G24+G25;F25 = G24-G25;F26 = G27-G26;F27 = G27+G26;F28 = G28+G29;F29 = G28-G29;F30 = G31-G30;F31 = G31+G30;F32 = G32;F33 = (100*G62-1019*G33) >> 10;F34 = (-1019*G61-100*G34) >> 10;F35 = G35;F36 = G36;F37 = (792*G58-650*G37) >> 10;F38 = (-650*G57-792*G38) >> 10;F39 = G39;F40 = G40;F41 = (483*G54-903*G41) >> 10;F42 = (-903*G53-483*G42) >> 10;F43 = G43;F44 = G44;F45 = (980*G50-297*G45) >> 10;F46 = (-297*G49-980*G46) >> 10;F47 = G47;F48 = G48;F49 = (980*G49-297*G46) >> 10;F50 = (297*G50+980*G45) >> 10;F51 = G51;F52 = G52;F53 = (483*G53-903*G42) >> 10;F54 = (903*G54+483*G41) >> 10;F55 = G55;F56 = G56;F57 = (792*G57-650*G38) >> 10;F58 = (650*G58+792*G37) >> 10;F59 = G59;F60 = G60;F61 = (100*G61-1019*G34) >> 10;F62 = (1019*G62+100*G33) >> 10;F63 = G63;E0 = F0;E1 = F1;E2 = F2;E3 = F3;E4 = (200*F4-1004*F7) >> 10;E5 = (851*F5-569*F6) >> 10;E6 = (851*F6+569*F5) >> 10;E7 = (200*F7+1004*F4) >> 10;E8 = F8+F9;E9 = F8-F9;E10 = F11-F10;E11 = F11+F10;E12 = F12+F13;E13 = F12-F13;E14 = F15-F14;E15 = F15+F14;E16 = F16;E17 = (200*F30-1004*F17) >> 10;E18 = (-1004*F29-200*F18) >> 10;E19 = F19;E20 = F20;E21 = (851*F26-569*F21) >> 10;E22 = (-569*F25-851*F22) >> 10;E23 = F23;E24 = F24;E25 = (851*F25-569*F22) >> 10;E26 = (569*F26+851*F21) >> 10;E27 = F27;E28 = F28;E29 = (200*F29-1004*F18) >> 10;E30 = (1004*F30+200*F17) >> 10;E31 = F31;E32 = F32+F35;E33 = F33+F34;E34 = F33-F34;E35 = F32-F35;E36 = F39-F36;E37 = F38-F37;E38 = F38+F37;E39 = F39+F36;E40 = F40+F43;E41 = F41+F42;E42 = F41-F42;E43 = F40-F43;E44 = F47-F44;E45 = F46-F45;E46 = F46+F45;E47 = F47+F44;E48 = F48+F51;E49 = F49+F50;E50 = F49-F50;E51 = F48-F51;E52 = F55-F52;E53 = F54-F53;E54 = F54+F53;E55 = F55+F52;E56 = F56+F59;E57 = F57+F58;E58 = F57-F58;E59 = F56-F59;E60 = F63-F60;E61 = F62-F61;E62 = F62+F61;E63 = F63+F60;D0 = (724*(E0+E1)) >> 10;D1 = (724*(E0-E1)) >> 10;D2 = (392*E2-946*E3) >> 10;D3 = (946*E2+392*E3) >> 10;D4 = E4+E5;D5 = E4-E5;D6 = E7-E6;D7 = E7+E6;D8 = E8;D9 = (392*E14-946*E9) >> 10;D10 = (-946*E13-392*E10) >> 10;D11 = E11;D12 = E12;D13 = (392*E13-946*E10) >> 10;D14 = (946*E14+392*E9) >> 10;D15 = E15;D16 = E16+E19;D19 = E16-E19;D20 = E23-E20;D23 = E23+E20;D24 = E24+E27;D27 = E24-E27;D28 = E31-E28;D31 = E31+E28;D17 = E17+E18;D18 = E17-E18;D21 = E22-E21;D22 = E22+E21;D25 = E25+E26;D26 = E25-E26;D29 = E30-E29;D30 = E30+E29;D32 = E32;D33 = E33;D34 = (200*E61-1004*E34) >> 10;D35 = (200*E60-1004*E35) >> 10;D36 = (-1004*E59-200*E36) >> 10;D37 = (-1004*E58-200*E37) >> 10;D38 = E38;D39 = E39;D40 = E40;D41 = E41;D42 = (851*E53-569*E42) >> 10;D43 = (851*E52-569*E43) >> 10;D44 = (-569*E51-851*E44) >> 10;D45 = (-569*E50-851*E45) >> 10;D46 = E46;D47 = E47;D48 = E48;D49 = E49;D50 = (851*E50-569*E45) >> 10;D51 = (851*E51-569*E44) >> 10;D52 = (569*E52+851*E43) >> 10;D53 = (569*E53+851*E42) >> 10;D54 = E54;D55 = E55;D56 = E56;D57 = E57;D58 = (200*E58-1004*E37) >> 10;D59 = (200*E59-1004*E36) >> 10;D60 = (1004*E60+200*E35) >> 10;D61 = (1004*E61+200*E34) >> 10;D62 = E62;D63 = E63;C0 = D0+D3;C3 = D0-D3;C8 = D8+D11;C11 = D8-D11;C12 = D15-D12;C15 = D15+D12;C1 = D1+D2;C2 = D1-D2;C9 = D9+D10;C10 = D9-D10;C13 = D14-D13;C14 = D14+D13;C4 = D4;C5 = (724*(D6-D5)) >> 10;C6 = (724*(D6+D5)) >> 10;C7 = D7;C16 = D16;C18 = (392*D29-946*D18) >> 10;C20 = (-946*D27-392*D20) >> 10;C22 = D22;C24 = D24;C26 = (-946*D21+392*D26) >> 10;C28 = (392*D19+946*D28) >> 10;C30 = D30;C17 = D17;C19 = (392*D28-946*D19) >> 10;C21 = (-946*D26-392*D21) >> 10;C23 = D23;C25 = D25;C27 = (-946*D20+392*D27) >> 10;C29 = (392*D18+946*D29) >> 10;C31 = D31;C32 = D32+D39;C39 = D32-D39;C40 = D47-D40;C47 = D47+D40;C48 = D48+D55;C55 = D48-D55;C56 = D63-D56;C63 = D63+D56;C33 = D33+D38;C38 = D33-D38;C41 = D46-D41;C46 = D46+D41;C49 = D49+D54;C54 = D49-D54;C57 = D62-D57;C62 = D62+D57;C34 = D34+D37;C37 = D34-D37;C42 = D45-D42;C45 = D45+D42;C50 = D50+D53;C53 = D50-D53;C58 = D61-D58;C61 = D61+D58;C35 = D35+D36;C36 = D35-D36;C43 = D44-D43;C44 = D44+D43;C51 = D51+D52;C52 = D51-D52;C59 = D60-D59;C60 = D60+D59;B0 = C0+C7;B7 = C0-C7;B1 = C1+C6;B6 = C1-C6;B2 = C2+C5;B5 = C2-C5;B3 = C3+C4;B4 = C3-C4;B8 = C8;B14 = C14;B10 = (724*(C13-C10)) >> 10;B13 = (724*(C13+C10)) >> 10;B9 = C9;B15 = C15;B11 = (724*(C12-C11)) >> 10;B12 = (724*(C12+C11)) >> 10;B16 = C16+C23;B23 = C16-C23;B24 = C31-C24;B31 = C31+C24;B17 = C17+C22;B22 = C17-C22;B25 = C30-C25;B30 = C30+C25;B18 = C18+C21;B21 = C18-C21;B26 = C29-C26;B29 = C29+C26;B19 = C19+C20;B20 = C19-C20;B27 = C28-C27;B28 = C28+C27;B32 = C32;B36 = (392*C59-946*C36) >> 10;B40 = (-946*C55-392*C40) >> 10;B44 = C44;B48 = C48;B52 = (-946*C43+392*C52) >> 10;B56 = (392*C39+946*C56) >> 10;B60 = C60;B33 = C33;B37 = (392*C58-946*C37) >> 10;B41 = (-946*C54-392*C41) >> 10;B45 = C45;B49 = C49;B53 = (-946*C42+392*C53) >> 10;B57 = (392*C38+946*C57) >> 10;B61 = C61;B34 = C34;B38 = (392*C57-946*C38) >> 10;B42 = (-946*C53-392*C42) >> 10;B46 = C46;B50 = C50;B54 = (-946*C41+392*C54) >> 10;B58 = (392*C37+946*C58) >> 10;B62 = C62;B35 = C35;B39 = (392*C56-946*C39) >> 10;B43 = (-946*C52-392*C43) >> 10;B47 = C47;B51 = C51;B55 = (-946*C40+392*C55) >> 10;B59 = (392*C36+946*C59) >> 10;B63 = C63;A0 = B0+B15;A15 = B0-B15;A1 = B1+B14;A14 = B1-B14;A2 = B2+B13;A13 = B2-B13;A3 = B3+B12;A12 = B3-B12;A4 = B4+B11;A11 = B4-B11;A5 = B5+B10;A10 = B5-B10;A6 = B6+B9;A9 = B6-B9;A7 = B7+B8;A8 = B7-B8;A16 = B16;A28 = B28;A20 = (724*(B27-B20)) >> 10;A27 = (724*(B27+B20)) >> 10;A17 = B17;A29 = B29;A21 = (724*(B26-B21)) >> 10;A26 = (724*(B26+B21)) >> 10;A18 = B18;A30 = B30;A22 = (724*(B25-B22)) >> 10;A25 = (724*(B25+B22)) >> 10;A19 = B19;A31 = B31;A23 = (724*(B24-B23)) >> 10;A24 = (724*(B24+B23)) >> 10;A32 = B32+B47;A47 = B32-B47;A48 = B63-B48;A63 = B63+B48;A33 = B33+B46;A46 = B33-B46;A49 = B62-B49;A62 = B62+B49;A34 = B34+B45;A45 = B34-B45;A50 = B61-B50;A61 = B61+B50;A35 = B35+B44;A44 = B35-B44;A51 = B60-B51;A60 = B60+B51;A36 = B36+B43;A43 = B36-B43;A52 = B59-B52;A59 = B59+B52;A37 = B37+B42;A42 = B37-B42;A53 = B58-B53;A58 = B58+B53;A38 = B38+B41;A41 = B38-B41;A54 = B57-B54;A57 = B57+B54;A39 = B39+B40;A40 = B39-B40;A55 = B56-B55;A56 = B56+B55;O0 = A0+A31;O31 = A0-A31;O1 = A1+A30;O30 = A1-A30;O2 = A2+A29;O29 = A2-A29;O3 = A3+A28;O28 = A3-A28;O4 = A4+A27;O27 = A4-A27;O5 = A5+A26;O26 = A5-A26;O6 = A6+A25;O25 = A6-A25;O7 = A7+A24;O24 = A7-A24;O8 = A8+A23;O23 = A8-A23;O9 = A9+A22;O22 = A9-A22;O10 = A10+A21;O21 = A10-A21;O11 = A11+A20;O20 = A11-A20;O12 = A12+A19;O19 = A12-A19;O13 = A13+A18;O18 = A13-A18;O14 = A14+A17;O17 = A14-A17;O15 = A15+A16;O16 = A15-A16;O32 = A32;O56 = A56;O40 = (724*(A55-A40)) >> 10;O55 = (724*(A55+A40)) >> 10;O33 = A33;O57 = A57;O41 = (724*(A54-A41)) >> 10;O54 = (724*(A54+A41)) >> 10;O34 = A34;O58 = A58;O42 = (724*(A53-A42)) >> 10;O53 = (724*(A53+A42)) >> 10;O35 = A35;O59 = A59;O43 = (724*(A52-A43)) >> 10;O52 = (724*(A52+A43)) >> 10;O36 = A36;O60 = A60;O44 = (724*(A51-A44)) >> 10;O51 = (724*(A51+A44)) >> 10;O37 = A37;O61 = A61;O45 = (724*(A50-A45)) >> 10;O50 = (724*(A50+A45)) >> 10;O38 = A38;O62 = A62;O46 = (724*(A49-A46)) >> 10;O49 = (724*(A49+A46)) >> 10;O39 = A39;O63 = A63;O47 = (724*(A48-A47)) >> 10;O48 = (724*(A48+A47)) >> 10;Y0 = O0+O63;Y63 = O0-O63;Y1 = O1+O62;Y62 = O1-O62;Y2 = O2+O61;Y61 = O2-O61;Y3 = O3+O60;Y60 = O3-O60;Y4 = O4+O59;Y59 = O4-O59;Y5 = O5+O58;Y58 = O5-O58;Y6 = O6+O57;Y57 = O6-O57;Y7 = O7+O56;Y56 = O7-O56;Y8 = O8+O55;Y55 = O8-O55;Y9 = O9+O54;Y54 = O9-O54;Y10 = O10+O53;Y53 = O10-O53;Y11 = O11+O52;Y52 = O11-O52;Y12 = O12+O51;Y51 = O12-O51;Y13 = O13+O50;Y50 = O13-O50;Y14 = O14+O49;Y49 = O14-O49;Y15 = O15+O48;Y48 = O15-O48;Y16 = O16+O47;Y47 = O16-O47;Y17 = O17+O46;Y46 = O17-O46;Y18 = O18+O45;Y45 = O18-O45;Y19 = O19+O44;Y44 = O19-O44;Y20 = O20+O43;Y43 = O20-O43;Y21 = O21+O42;Y42 = O21-O42;Y22 = O22+O41;Y41 = O22-O41;Y23 = O23+O40;Y40 = O23-O40;Y24 = O24+O39;Y39 = O24-O39;Y25 = O25+O38;Y38 = O25-O38;Y26 = O26+O37;Y37 = O26-O37;Y27 = O27+O36;Y36 = O27-O36;Y28 = O28+O35;Y35 = O28-O35;Y29 = O29+O34;Y34 = O29-O34;Y30 = O30+O33;Y33 = O30-O33;Y31 = O31+O32;Y32 = O31-O32;
전술한 도 18의 우측에 도시된 변경된 버터플라이 구조의 실시예에 따라서 변환된 32x32 입력 블록에 대하여 1차원 이산 코사인 역변환을 수행하는 경우, X0 내지 X31은 역변환되어야 할 입력값, A0 내지 A31, B0 내지 B31, C0 내지 C31, D0 내지 D31, E0 내지 E31, F0 내지 F31, G0 내지 G31, H0 내지 H31은 중간값, t는 보조 변수, Y0 내지 Y31은 역변환된 값을 나타낸다고 할 때, 다음의 연산 과정과 같이 표현될 수 있다.
E0= X0;F24 = X1;F12 = -X2;G16 = -X3;E4 = X4; ;G31 = X5; ;F8 = X6; ;F26 = -X7;E2 = X8; ;F21 = X9; ;F15 = X10; ;G29 = X11;F5 = X12; ;G18 = -X13; ;E13 = X14; ;E22 = X15;E1 = X16; ;E25 = X17; ;E10 = X18; ;G19 = -X19;F7 = X20; ;G28 = -X21 ; ;F14 = X22; ;F20 = -X23;E3 = X24; ;F27 = -X25; ;F9 = X26; ;G30 = -X27;E6 = X28; ;G17 = -X29 ; ;F11 = X30; ;F23 = -X31;;t = (251*(G16 + G17) >> 8);F16 = t - ((201*G17) >> 8);F17 = t - ((301*G16) >> 8);t = (212*(G18 + G19) >> 8);F18 = t - ((70*G19) >> 8);F19 = t - ((355*G18) >> 8); ;t = ((212*(G28 + G29)) >> 8);F28 = t - ((70*G29) >> 8);F29 = t - ((355*G28) >> 8);t = (251*(G30 + G31) >> 8);F30 = t - ((201*G31) >> 8);F31 = t - ((301*G30) >> 8);E5 = ((F5 + F7)*181 >> 8);E7 = ((F5 - F7)*181 >> 8);t = (97*(F8 + F9) >> 8);E8 = t - ((-138*F9) >> 8);E9 = t - ((334*F8) >> 8);;E11 = ((F11 + F12)*181 >> 8);E12 = ((F11 - F12)*181 >> 8);t = (97*(F14 + F15) >> 8);E14 = t - ((-138*F15) >> 8);E15 = t - ((334*F14) >> 8);;E16 = F16 + F18;D18 = F16 - F18;D17 = F17 + F19;E19 = F17 - F19;;t = (236*(F20 + F21) >> 8);E20 = t - ((334*F21) >> 8);E21 = t - ((138*F20) >> 8);E23 = ((F23 + F24)*181 >> 8);E24 = ((F23 - F24)*181 >> 8);;t = (236*(F26 + F27) >> 8);E26 = t - ((334*F27) >> 8);E27 = t - ((138*F26) >> 8);;E28 = -F28 + F30;D30 = F28 + F30;D29 = -F29 + F31;E31 = F29 + F31;;D0 = ((E0 + E1)*181 >> 8);D1 = ((E0 - E1)*181 >> 8);t = (97*(E2 + E3) >> 8);D2 = t - ((334*E3) >> 8);D3 = t - ((-138*E2) >> 8);D4 = E4 + E5;D5 = E4 - E5;D6 = -E6 + E7;D7 = E6 + E7;D8 = E8 + E14;D14 = E8 - E14;D9 = E9 + E15;D15 = E9 - E15;D10 = E10 + E11; ;D11 = E10 - E11;D12 = E12 + E13;D13 = E12 - E13; ;;D16 = ((E16 + E19)*181 >> 8);D19 = ((E16 - E19)*181 >> 8);D20 = E20 + E26;D26 = E20 - E26;D21 = E21 + E27;D27 = E21 - E27;D22 = E22 + E23;D23 = E22 - E23;D24 = E24 + E25;D25 = E24 - E25;D28 = ((E28 + E31)*181 >> 8);D31 = ((E28 - E31)*181 >> 8);;C0 = D0 + D3;C3 = D0 - D3;C1 = D1 + D2;C2 = D1 - D2;t = (49*(D4 + D7) >> 8);C4 = t - ((301*D7) >> 8);C7 = t - ((-201*D4) >> 8);;t = (142*(D5 + D6) >> 8);C5 = t - ((355*D6) >> 8);C6 = t - ((-70*D5) >> 8);C8 = D8 + D11;C11 = D8 - D11;C9 = D9 + D10;C10 = D9 - D10;C12 = D12 + D15;C15 = D12 - D15;C13 = D13 + D14;C14 = D13 - D14;;C16 = D16 + D28;C28 = D16 - D28;C17 = D17 + D29;C29 = D17 - D29;C18 = D18 + D30;C30 = D18 - D30;C19 = D19 + D31;C31 = D19 - D31;C20 = D20 + D23;C23 = D20 - D23;C21 = D21 + D22;C22 = D21 - D22;C24 = D24 + D27;C27 = D24 - D27;C25 = D25 + D26;C26 = D25 - D26;;B0 = C0 + C7;B7 = C0 - C7;B1 = C1 + C6;B6 = C1 - C6;B2 = C2 + C5;B5 = C2 - C5;B3 = C3 + C4;B4 = C3 - C4;;t = (197*(C8 + C15) >> 8);B8 = t - ((360*C15) >> 8);B15 = t - ((35*C8) >> 8);t = (120*(C9 + C14) >> 8);B9 = t - ((-105*C14) >> 8);B14 = t - ((346*C9) >> 8);t = (244*(C10 + C13) >> 8);B10 = t - ((319*C13) >> 8);B13 = t - ((170*C10) >> 8);t = (25*(C11 + C12) >> 8);B11 = t - ((-229*C12) >> 8);B12 = t - ((279*C11) >> 8);B16 = C16 + C23;B23 = C16 - C23; ;B17 = C17 + C22;B22 = C17 - C22;B18 = C18 + C21;B21 = C18 - C21;B19 = C19 + C20;B20 = C19 - C20;B24 = C24 + C31;B31 = C24 - C31; ;B25 = C25 + C30;B30 = C25 - C30;B26 = C26 + C29;B29 = C26 - C29;B27 = C27 + C28;B28 = C27 - C28;A0 = B0 + B15;A1 = B1 + B14;A2 = B2 + B13;A3 = B3 + B12;A4 = B4 + B11;A5 = B5 + B10;A6 = B6 + B9;A7 = B7 + B8;A8 = B7 - B8;A9 = B6 - B9;A10 = B5 - B10;A11 = B4 - B11;A12 = B3 - B12;A13 = B2 - B13;A14 = B1 - B14;A15 = B0 - B15;;t = (171*(B16 + B31) >> 8);A16 = t - ((-17*B31) >> 8);A31 = t - ((361*B16) >> 8);t = (205*(B17 + B30) >> 8);A17 = t - ((358*B30) >> 8);A30 = t - ((53*B17) >> 8);t = (131*(B18 + B29) >> 8);A18 = t - ((-87*B29) >> 8);A29 = t - ((351*B18) >> 8);t = (231*(B19 + B28) >> 8);A19 = t - ((340*B28) >> 8);A28 = t - ((121*B19) >> 8);t = (86*(B20 + B27) >> 8);A20 = t - ((-154*B27) >> 8);A27 = t - ((327*B20) >> 8);t = (248*(B21 + B26) >> 8);A21 = t - ((310*B26) >> 8);A26 = t - ((186*B21) >> 8);t = (37*(B22 + B25) >> 8);A22 = t - ((-215*B25) >> 8);A25 = t - ((290*B22) >> 8);t = (255*(B23 + B24) >> 8);A23 = t - ((243*B24) >> 8);A24 = t - ((268*B23) >> 8);Y0 = A0 + A31;Y31 = A0 - A31;Y1 = A1 + A30;Y30 = A1 - A30;Y2 = A2 + A29;Y29 = A2 - A29;Y3 = A3 + A28;Y28 = A3 - A28;Y4 = A4 + A27;Y27 = A4 - A27;Y5 = A5 + A26;Y26 = A5 - A26;Y6 = A6 + A25;Y25 = A6 - A25;Y7 = A7 + A24;Y24 = A7 - A24;Y8 = A8 + A23;Y23 = A8 - A23;Y9 = A9 + A22;Y22 = A9 - A22;Y10 = A10 + A21;Y21 = A10 - A21;Y11 = A11 + A20;Y20 = A11 - A20;Y12 = A12 + A19;Y19 = A12 - A19;Y13 = A13 + A18;Y18 = A13 - A18;Y14 = A14 + A17;Y17 = A14 - A17;Y15 = A15 + A16;Y16 = A15 - A16 E0= X0; F24 = X1; F12 = -X2; G16 = -X3; E4 = X4; ; G31 = X5; ; F8 = X6; ; F26 = -X7; E2 = X8; ; F21 = X9; ; F15 = X10; ; G29 = X11; F5 = X12; ; G18 = -X13; ; E13 = X14; ; E22 = X15; E1 = X16; ; E25 = X17; ; E10 = X18; ; G19 = -X19; F7 = X20; ; G28 = -X21 ; ; F14 = X22; ; F20 = -X23; E3 = X24; ; F27 = -X25; ; F9 = X26; ; G30 = -X27; E6 = X28; ; G17 = -X29 ; ; F11 = X30; ; F23 = -X31; ; t = (251*(G16 + G17) >> 8); F16 = t - ((201*G17) >> 8); F17 = t - ((301*G16) >> 8); t = (212*(G18 + G19) >> 8); F18 = t - ((70*G19) >> 8); F19 = t - ((355*G18) >> 8); ; t = ((212*(G28 + G29)) >> 8); F28 = t - ((70*G29) >> 8); F29 = t - ((355*G28) >> 8); t = (251*(G30 + G31) >> 8); F30 = t - ((201*G31) >> 8); F31 = t - ((301*G30) >> 8); E5 = ((F5 + F7)*181 >> 8); E7 = ((F5 - F7)*181 >> 8); t = (97*(F8 + F9) >> 8); E8 = t - ((-138*F9) >> 8); E9 = t - ((334*F8) >> 8); ; E11 = ((F11 + F12)*181 >> 8); E12 = ((F11 - F12)*181 >> 8); t = (97*(F14 + F15) >> 8); E14 = t - ((-138*F15) >> 8); E15 = t - ((334*F14) >> 8); ; E16 = F16 + F18; D18 = F16 - F18; D17 = F17 + F19; E19 = F17 - F19;; t = (236*(F20 + F21) >> 8); E20 = t - ((334*F21) >> 8); E21 = t - ((138*F20) >> 8); E23 = ((F23 + F24)*181 >> 8); E24 = ((F23 - F24)*181 >> 8); ; t = (236*(F26 + F27) >> 8); E26 = t - ((334*F27) >> 8); E27 = t - ((138*F26) >> 8); ; E28 = -F28 + F30; D30 = F28 + F30; D29 = -F29 + F31; E31 = F29 + F31; ; D0 = ((E0 + E1)*181 >> 8); D1 = ((E0 - E1)*181 >> 8); t = (97*(E2 + E3) >> 8); D2 = t - ((334*E3) >> 8); D3 = t - ((-138*E2) >> 8); D4 = E4 + E5; D5 = E4 - E5; D6 = -E6 + E7; D7 = E6 + E7; D8 = E8 + E14; D14 = E8 - E14; D9 = E9 + E15; D15 = E9 - E15; D10 = E10 + E11; ; D11 = E10 - E11; D12 = E12 + E13; D13 = E12 - E13; ; ; D16 = ((E16 + E19)*181 >> 8); D19 = ((E16 - E19)*181 >> 8); D20 = E20 + E26; D26 = E20 - E26; D21 = E21 + E27; D27 = E21 - E27; D22 = E22 + E23; D23 = E22 - E23; D24 = E24 + E25; D25 = E24 - E25; D28 = ((E28 + E31)*181 >> 8); D31 = ((E28 - E31)*181 >> 8); ; C0 = D0 + D3; C3 = D0 - D3; C1 = D1 + D2; C2 = D1 - D2; t = (49*(D4 + D7) >> 8); C4 = t - ((301*D7) >> 8); C7 = t - ((-201*D4) >> 8); ; t = (142*(D5 + D6) >> 8); C5 = t - ((355*D6) >> 8); C6 = t - ((-70*D5) >> 8); C8 = D8 + D11; C11 = D8 - D11; C9 = D9 + D10; C10 = D9 - D10; C12 = D12 + D15; C15 = D12 - D15; C13 = D13 + D14; C14 = D13 - D14; ; C16 = D16 + D28; C28 = D16 - D28; C17 = D17 + D29; C29 = D17 - D29; C18 = D18 + D30; C30 = D18 - D30; C19 = D19 + D31; C31 = D19 - D31; C20 = D20 + D23; C23 = D20 - D23; C21 = D21 + D22; C22 = D21 - D22; C24 = D24 + D27; C27 = D24 - D27; C25 = D25 + D26; C26 = D25 - D26; ; B0 = C0 + C7; B7 = C0 - C7; B1 = C1 + C6; B6 = C1 - C6; B2 = C2 + C5; B5 = C2 - C5; B3 = C3 + C4; B4 = C3 - C4; ; t = (197*(C8 + C15) >> 8); B8 = t - ((360*C15) >> 8); B15 = t - ((35*C8) >> 8); t = (120*(C9 + C14) >> 8); B9 = t - ((-105*C14) >> 8); B14 = t - ((346*C9) >> 8); t = (244*(C10 + C13) >> 8); B10 = t - ((319*C13) >> 8); B13 = t - ((170*C10) >> 8); t = (25*(C11 + C12) >> 8); B11 = t - ((-229*C12) >> 8); B12 = t - ((279*C11) >> 8); B16 = C16 + C23; B23 = C16 - C23; ; B17 = C17 + C22; B22 = C17 - C22; B18 = C18 + C21; B21 = C18 - C21; B19 = C19 + C20; B20 = C19 - C20; B24 = C24 + C31; B31 = C24 - C31; ; B25 = C25 + C30; B30 = C25 - C30; B26 = C26 + C29; B29 = C26 - C29; B27 = C27 + C28; B28 = C27 - C28; A0 = B0 + B15; A1 = B1 + B14; A2 = B2 + B13; A3 = B3 + B12; A4 = B4 + B11; A5 = B5 + B10; A6 = B6 + B9; A7 = B7 + B8; A8 = B7 - B8; A9 = B6 - B9; A10 = B5 - B10; A11 = B4 - B11; A12 = B3 - B12; A13 = B2 - B13; A14 = B1 - B14; A15 = B0 - B15; ; t = (171*(B16 + B31) >> 8); A16 = t - ((-17*B31) >> 8); A31 = t - ((361*B16) >> 8); t = (205*(B17 + B30) >> 8); A17 = t - ((358*B30) >> 8); A30 = t - ((53*B17) >> 8); t = (131*(B18 + B29) >> 8); A18 = t - ((-87*B29) >> 8); A29 = t - ((351*B18) >> 8); t = (231*(B19 + B28) >> 8); A19 = t - ((340*B28) >> 8); A28 = t - ((121*B19) >> 8); t = (86*(B20 + B27) >> 8); A20 = t - ((-154*B27) >> 8); A27 = t - ((327*B20) >> 8); t = (248*(B21 + B26) >> 8); A21 = t - ((310*B26) >> 8); A26 = t - ((186*B21) >> 8); t = (37*(B22 + B25) >> 8); A22 = t - ((-215*B25) >> 8); A25 = t - ((290*B22) >> 8); t = (255*(B23 + B24) >> 8); A23 = t - ((243*B24) >> 8); A24 = t - ((268*B23) >> 8); Y0 = A0 + A31; Y31 = A0 - A31; Y1 = A1 + A30; Y30 = A1 - A30; Y2 = A2 + A29; Y29 = A2 - A29; Y3 = A3 + A28; Y28 = A3 - A28; Y4 = A4 + A27; Y27 = A4 - A27; Y5 = A5 + A26; Y26 = A5 - A26; Y6 = A6 + A25; Y25 = A6 - A25; Y7 = A7 + A24; Y24 = A7 - A24; Y8 = A8 + A23; Y23 = A8 - A23; Y9 = A9 + A22; Y22 = A9 - A22; Y10 = A10 + A21; Y21 = A10 - A21; Y11 = A11 + A20; Y20 = A11 - A20; Y12 = A12 + A19; Y19 = A12 - A19; Y13 = A13 + A18; Y18 = A13 - A18; Y14 = A14 + A17; Y17 = A14 - A17; Y15 = A15 + A16; Y16 = A15 - A16 E0= X0; F24 = X1; F12 = -X2; G16 = -X3; E4 = X4; ; G31 = X5; ; F8 = X6; ; F26 = -X7; E2 = X8; ; F21 = X9; ; F15 = X10; ; G29 = X11; F5 = X12; ; G18 = -X13; ; E13 = X14; ; E22 = X15; E1 = X16; ; E25 = X17; ; E10 = X18; ; G19 = -X19; F7 = X20; ; G28 = -X21 ; ; F14 = X22; ; F20 = -X23; E3 = X24; ; F27 = -X25; ; F9 = X26; ; G30 = -X27; E6 = X28; ; G17 = -X29 ; ; F11 = X30; ; F23 = -X31; ; t = (251*(G16 + G17) >> 8); F16 = t - ((201*G17) >> 8); F17 = t - ((301*G16) >> 8); t = (212*(G18 + G19) >> 8); F18 = t - ((70*G19) >> 8); F19 = t - ((355*G18) >> 8); ; t = ((212*(G28 + G29)) >> 8); F28 = t - ((70*G29) >> 8); F29 = t - ((355*G28) >> 8); t = (251*(G30 + G31) >> 8); F30 = t - ((201*G31) >> 8); F31 = t - ((301*G30) >> 8); E5 = ((F5 + F7)*181 >> 8); E7 = ((F5 - F7)*181 >> 8); t = (97*(F8 + F9) >> 8); E8 = t - ((-138*F9) >> 8); E9 = t - ((334*F8) >> 8); ; E11 = ((F11 + F12)*181 >> 8); E12 = ((F11 - F12)*181 >> 8); t = (97*(F14 + F15) >> 8); E14 = t - ((-138*F15) >> 8); E15 = t - ((334*F14) >> 8); ; E16 = F16 + F18; D18 = F16 - F18; D17 = F17 + F19; E19 = F17 - F19;; t = (236*(F20 + F21) >> 8); E20 = t - ((334*F21) >> 8); E21 = t - ((138*F20) >> 8); E23 = ((F23 + F24)*181 >> 8); E24 = ((F23 - F24)*181 >> 8); ; t = (236*(F26 + F27) >> 8); E26 = t - ((334*F27) >> 8); E27 = t - ((138*F26) >> 8); ; E28 = -F28 + F30; D30 = F28 + F30; D29 = -F29 + F31; E31 = F29 + F31; ; D0 = ((E0 + E1)*181 >> 8); D1 = ((E0 - E1)*181 >> 8); t = (97*(E2 + E3) >> 8); D2 = t - ((334*E3) >> 8); D3 = t - ((-138*E2) >> 8); D4 = E4 + E5; D5 = E4 - E5; D6 = -E6 + E7; D7 = E6 + E7; D8 = E8 + E14; D14 = E8 - E14; D9 = E9 + E15; D15 = E9 - E15; D10 = E10 + E11; ; D11 = E10 - E11; D12 = E12 + E13; D13 = E12 - E13; ; ; D16 = ((E16 + E19)*181 >> 8); D19 = ((E16 - E19)*181 >> 8); D20 = E20 + E26; D26 = E20 - E26; D21 = E21 + E27; D27 = E21 - E27; D22 = E22 + E23; D23 = E22 - E23; D24 = E24 + E25; D25 = E24 - E25; D28 = ((E28 + E31)*181 >> 8); D31 = ((E28 - E31)*181 >> 8); ; C0 = D0 + D3; C3 = D0 - D3; C1 = D1 + D2; C2 = D1 - D2; t = (49*(D4 + D7) >> 8); C4 = t - ((301*D7) >> 8); C7 = t - ((-201*D4) >> 8); ; t = (142*(D5 + D6) >> 8); C5 = t - ((355*D6) >> 8); C6 = t - ((-70*D5) >> 8); C8 = D8 + D11; C11 = D8 - D11; C9 = D9 + D10; C10 = D9 - D10; C12 = D12 + D15; C15 = D12 - D15; C13 = D13 + D14; C14 = D13 - D14; ; C16 = D16 + D28; C28 = D16 - D28; C17 = D17 + D29; C29 = D17 - D29; C18 = D18 + D30; C30 = D18 - D30; C19 = D19 + D31; C31 = D19 - D31; C20 = D20 + D23; C23 = D20 - D23; C21 = D21 + D22; C22 = D21 - D22; C24 = D24 + D27; C27 = D24 - D27; C25 = D25 + D26; C26 = D25 - D26; ; B0 = C0 + C7; B7 = C0 - C7; B1 = C1 + C6; B6 = C1 - C6; B2 = C2 + C5; B5 = C2 - C5; B3 = C3 + C4; B4 = C3 - C4; ; t = (197*(C8 + C15) >> 8); B8 = t - ((360*C15) >> 8); B15 = t - ((35*C8) >> 8); t = (120*(C9 + C14) >> 8); B9 = t - ((-105*C14) >> 8); B14 = t - ((346*C9) >> 8); t = (244*(C10 + C13) >> 8); B10 = t - ((319*C13) >> 8); B13 = t - ((170*C10) >> 8); t = (25*(C11 + C12) >> 8); B11 = t - ((-229*C12) >> 8); B12 = t - ((279*C11) >> 8); B16 = C16 + C23; B23 = C16 - C23; ; B17 = C17 + C22; B22 = C17 - C22; B18 = C18 + C21; B21 = C18 - C21; B19 = C19 + C20; B20 = C19 - C20; B24 = C24 + C31; B31 = C24 - C31; ; B25 = C25 + C30; B30 = C25 - C30; B26 = C26 + C29; B29 = C26 - C29; B27 = C27 + C28; B28 = C27 - C28; A0 = B0 + B15; A1 = B1 + B14; A2 = B2 + B13; A3 = B3 + B12; A4 = B4 + B11; A5 = B5 + B10; A6 = B6 + B9; A7 = B7 + B8; A8 = B7 - B8; A9 = B6 - B9; A10 = B5 - B10; A11 = B4 - B11; A12 = B3 - B12; A13 = B2 - B13; A14 = B1 - B14; A15 = B0 - B15; ; t = (171*(B16 + B31) >> 8); A16 = t - ((-17*B31) >> 8); A31 = t - ((361*B16) >> 8); t = (205*(B17 + B30) >> 8); A17 = t - ((358*B30) >> 8); A30 = t - ((53*B17) >> 8); t = (131*(B18 + B29) >> 8); A18 = t - ((-87*B29) >> 8); A29 = t - ((351*B18) >> 8); t = (231*(B19 + B28) >> 8); A19 = t - ((340*B28) >> 8); A28 = t - ((121*B19) >> 8); t = (86*(B20 + B27) >> 8); A20 = t - ((-154*B27) >> 8); A27 = t - ((327*B20) >> 8); t = (248*(B21 + B26) >> 8); A21 = t - ((310*B26) >> 8); A26 = t - ((186*B21) >> 8); t = (37*(B22 + B25) >> 8); A22 = t - ((-215*B25) >> 8); A25 = t - ((290*B22) >> 8); t = (255*(B23 + B24) >> 8); A23 = t - ((243*B24) >> 8); A24 = t - ((268*B23) >> 8); Y0 = A0 + A31; Y31 = A0 - A31; Y1 = A1 + A30; Y30 = A1 - A30; Y2 = A2 + A29; Y29 = A2 - A29; Y3 = A3 + A28; Y28 = A3 - A28; Y4 = A4 + A27; Y27 = A4 - A27; Y5 = A5 + A26; Y26 = A5 - A26; Y6 = A6 + A25; Y25 = A6 - A25; Y7 = A7 + A24; Y24 = A7 - A24; Y8 = A8 + A23; Y23 = A8 - A23; Y9 = A9 + A22; Y22 = A9 - A22; Y10 = A10 + A21; Y21 = A10 - A21; Y11 = A11 + A20; Y20 = A11 - A20; Y12 = A12 + A19; Y19 = A12 - A19; Y13 = A13 + A18; Y18 = A13 - A18; Y14 = A14 + A17; Y17 = A14 - A17; Y15 = A15 + A16; Y16 = A15 - A16 E0= X0; F24 = X1; F12 = -X2; G16 = -X3; E4 = X4; ; G31 = X5; ; F8 = X6; ; F26 = -X7; E2 = X8; ; F21 = X9; ; F15 = X10; ; G29 = X11; F5 = X12; ; G18 = -X13; ; E13 = X14; ; E22 = X15; E1 = X16; ; E25 = X17; ; E10 = X18; ; G19 = -X19; F7 = X20; ; G28 = -X21 ; ; F14 = X22; ; F20 = -X23; E3 = X24; ; F27 = -X25; ; F9 = X26; ; G30 = -X27; E6 = X28; ; G17 = -X29 ; ; F11 = X30; ; F23 = -X31; ; t = (251*(G16 + G17) >> 8); F16 = t - ((201*G17) >> 8); F17 = t - ((301*G16) >> 8); t = (212*(G18 + G19) >> 8); F18 = t - ((70*G19) >> 8); F19 = t - ((355*G18) >> 8); ; t = ((212*(G28 + G29)) >> 8); F28 = t - ((70*G29) >> 8); F29 = t - ((355*G28) >> 8); t = (251*(G30 + G31) >> 8); F30 = t - ((201*G31) >> 8); F31 = t - ((301*G30) >> 8); E5 = ((F5 + F7)*181 >> 8); E7 = ((F5 - F7)*181 >> 8); t = (97*(F8 + F9) >> 8); E8 = t - ((-138*F9) >> 8); E9 = t - ((334*F8) >> 8); ; E11 = ((F11 + F12)*181 >> 8); E12 = ((F11 - F12)*181 >> 8); t = (97*(F14 + F15) >> 8); E14 = t - ((-138*F15) >> 8); E15 = t - ((334*F14) >> 8); ; E16 = F16 + F18; D18 = F16 - F18; D17 = F17 + F19; E19 = F17 - F19;; t = (236*(F20 + F21) >> 8); E20 = t - ((334*F21) >> 8); E21 = t - ((138*F20) >> 8); E23 = ((F23 + F24)*181 >> 8); E24 = ((F23 - F24)*181 >> 8); ; t = (236*(F26 + F27) >> 8); E26 = t - ((334*F27) >> 8); E27 = t - ((138*F26) >> 8); ; E28 = -F28 + F30; D30 = F28 + F30; D29 = -F29 + F31; E31 = F29 + F31; ; D0 = ((E0 + E1)*181 >> 8); D1 = ((E0 - E1)*181 >> 8); t = (97*(E2 + E3) >> 8); D2 = t - ((334*E3) >> 8); D3 = t - ((-138*E2) >> 8); D4 = E4 + E5; D5 = E4 - E5; D6 = -E6 + E7; D7 = E6 + E7; D8 = E8 + E14; D14 = E8 - E14; D9 = E9 + E15; D15 = E9 - E15; D10 = E10 + E11; ; D11 = E10 - E11; D12 = E12 + E13; D13 = E12 - E13; ; ; D16 = ((E16 + E19)*181 >> 8); D19 = ((E16 - E19)*181 >> 8); D20 = E20 + E26; D26 = E20 - E26; D21 = E21 + E27; D27 = E21 - E27; D22 = E22 + E23; D23 = E22 - E23; D24 = E24 + E25; D25 = E24 - E25; D28 = ((E28 + E31)*181 >> 8); D31 = ((E28 - E31)*181 >> 8); ; C0 = D0 + D3; C3 = D0 - D3; C1 = D1 + D2; C2 = D1 - D2; t = (49*(D4 + D7) >> 8); C4 = t - ((301*D7) >> 8); C7 = t - ((-201*D4) >> 8); ; t = (142*(D5 + D6) >> 8); C5 = t - ((355*D6) >> 8); C6 = t - ((-70*D5) >> 8); C8 = D8 + D11; C11 = D8 - D11; C9 = D9 + D10; C10 = D9 - D10; C12 = D12 + D15; C15 = D12 - D15; C13 = D13 + D14; C14 = D13 - D14; ; C16 = D16 + D28; C28 = D16 - D28; C17 = D17 + D29; C29 = D17 - D29; C18 = D18 + D30; C30 = D18 - D30; C19 = D19 + D31; C31 = D19 - D31; C20 = D20 + D23; C23 = D20 - D23; C21 = D21 + D22; C22 = D21 - D22; C24 = D24 + D27; C27 = D24 - D27; C25 = D25 + D26; C26 = D25 - D26; ; B0 = C0 + C7; B7 = C0 - C7; B1 = C1 + C6; B6 = C1 - C6; B2 = C2 + C5; B5 = C2 - C5; B3 = C3 + C4; B4 = C3 - C4; ; t = (197*(C8 + C15) >> 8); B8 = t - ((360*C15) >> 8); B15 = t - ((35*C8) >> 8); t = (120*(C9 + C14) >> 8); B9 = t - ((-105*C14) >> 8); B14 = t - ((346*C9) >> 8); t = (244*(C10 + C13) >> 8); B10 = t - ((319*C13) >> 8); B13 = t - ((170*C10) >> 8); t = (25*(C11 + C12) >> 8); B11 = t - ((-229*C12) >> 8); B12 = t - ((279*C11) >> 8); B16 = C16 + C23; B23 = C16 - C23; ; B17 = C17 + C22; B22 = C17 - C22; B18 = C18 + C21; B21 = C18 - C21; B19 = C19 + C20; B20 = C19 - C20; B24 = C24 + C31; B31 = C24 - C31; ; B25 = C25 + C30; B30 = C25 - C30; B26 = C26 + C29; B29 = C26 - C29; B27 = C27 + C28; B28 = C27 - C28; A0 = B0 + B15; A1 = B1 + B14; A2 = B2 + B13; A3 = B3 + B12; A4 = B4 + B11; A5 = B5 + B10; A6 = B6 + B9; A7 = B7 + B8; A8 = B7 - B8; A9 = B6 - B9; A10 = B5 - B10; A11 = B4 - B11; A12 = B3 - B12; A13 = B2 - B13; A14 = B1 - B14; A15 = B0 - B15; ; t = (171*(B16 + B31) >> 8); A16 = t - ((-17*B31) >> 8); A31 = t - ((361*B16) >> 8); t = (205*(B17 + B30) >> 8); A17 = t - ((358*B30) >> 8); A30 = t - ((53*B17) >> 8); t = (131*(B18 + B29) >> 8); A18 = t - ((-87*B29) >> 8); A29 = t - ((351*B18) >> 8); t = (231*(B19 + B28) >> 8); A19 = t - ((340*B28) >> 8); A28 = t - ((121*B19) >> 8); t = (86*(B20 + B27) >> 8); A20 = t - ((-154*B27) >> 8); A27 = t - ((327*B20) >> 8); t = (248*(B21 + B26) >> 8); A21 = t - ((310*B26) >> 8); A26 = t - ((186*B21) >> 8); t = (37*(B22 + B25) >> 8); A22 = t - ((-215*B25) >> 8); A25 = t - ((290*B22) >> 8); t = (255*(B23 + B24) >> 8); A23 = t - ((243*B24) >> 8); A24 = t - ((268*B23) >> 8); Y0 = A0 + A31; Y31 = A0 - A31; Y1 = A1 + A30; Y30 = A1 - A30; Y2 = A2 + A29; Y29 = A2 - A29; Y3 = A3 + A28; Y28 = A3 - A28; Y4 = A4 + A27; Y27 = A4 - A27; Y5 = A5 + A26; Y26 = A5 - A26; Y6 = A6 + A25; Y25 = A6 - A25; Y7 = A7 + A24; Y24 = A7 - A24; Y8 = A8 + A23; Y23 = A8 - A23; Y9 = A9 + A22; Y22 = A9 - A22; Y10 = A10 + A21; Y21 = A10 - A21; Y11 = A11 + A20; Y20 = A11 - A20; Y12 = A12 + A19; Y19 = A12 - A19; Y13 = A13 + A18; Y18 = A13 - A18; Y14 = A14 + A17; Y17 = A14 - A17; Y15 = A15 + A16; Y16 = A15 - A16 E0= X0; F24 = X1; F12 = -X2; G16 = -X3; E4 = X4; ; G31 = X5; ; F8 = X6; ; F26 = -X7; E2 = X8; ; F21 = X9; ; F15 = X10; ; G29 = X11; F5 = X12; ; G18 = -X13; ; E13 = X14; ; E22 = X15; E1 = X16; ; E25 = X17; ; E10 = X18; ; G19 = -X19; F7 = X20; ; G28 = -X21 ; ; F14 = X22; ; F20 = -X23; E3 = X24; ; F27 = -X25; ; F9 = X26; ; G30 = -X27; E6 = X28; ; G17 = -X29 ; ; F11 = X30; ; F23 = -X31; ; t = (251*(G16 + G17) >> 8); F16 = t - ((201*G17) >> 8); F17 = t - ((301*G16) >> 8); t = (212*(G18 + G19) >> 8); F18 = t - ((70*G19) >> 8); F19 = t - ((355*G18) >> 8); ; t = ((212*(G28 + G29)) >> 8); F28 = t - ((70*G29) >> 8); F29 = t - ((355*G28) >> 8); t = (251*(G30 + G31) >> 8); F30 = t - ((201*G31) >> 8); F31 = t - ((301*G30) >> 8); E5 = ((F5 + F7)*181 >> 8); E7 = ((F5 - F7)*181 >> 8); t = (97*(F8 + F9) >> 8); E8 = t - ((-138*F9) >> 8); E9 = t - ((334*F8) >> 8); ; E11 = ((F11 + F12)*181 >> 8); E12 = ((F11 - F12)*181 >> 8); t = (97*(F14 + F15) >> 8); E14 = t - ((-138*F15) >> 8); E15 = t - ((334*F14) >> 8); ; E16 = F16 + F18; D18 = F16 - F18; D17 = F17 + F19; E19 = F17 - F19;; t = (236*(F20 + F21) >> 8); E20 = t - ((334*F21) >> 8); E21 = t - ((138*F20) >> 8); E23 = ((F23 + F24)*181 >> 8); E24 = ((F23 - F24)*181 >> 8); ; t = (236*(F26 + F27) >> 8); E26 = t - ((334*F27) >> 8); E27 = t - ((138*F26) >> 8); ; E28 = -F28 + F30; D30 = F28 + F30; D29 = -F29 + F31; E31 = F29 + F31; ; D0 = ((E0 + E1)*181 >> 8); D1 = ((E0 - E1)*181 >> 8); t = (97*(E2 + E3) >> 8); D2 = t - ((334*E3) >> 8); D3 = t - ((-138*E2) >> 8); D4 = E4 + E5; D5 = E4 - E5; D6 = -E6 + E7; D7 = E6 + E7; D8 = E8 + E14; D14 = E8 - E14; D9 = E9 + E15; D15 = E9 - E15; D10 = E10 + E11; ; D11 = E10 - E11; D12 = E12 + E13; D13 = E12 - E13; ; ; D16 = ((E16 + E19)*181 >> 8); D19 = ((E16 - E19)*181 >> 8); D20 = E20 + E26; D26 = E20 - E26; D21 = E21 + E27; D27 = E21 - E27; D22 = E22 + E23; D23 = E22 - E23; D24 = E24 + E25; D25 = E24 - E25; D28 = ((E28 + E31)*181 >> 8); D31 = ((E28 - E31)*181 >> 8); ; C0 = D0 + D3; C3 = D0 - D3; C1 = D1 + D2; C2 = D1 - D2; t = (49*(D4 + D7) >> 8); C4 = t - ((301*D7) >> 8); C7 = t - ((-201*D4) >> 8); ; t = (142*(D5 + D6) >> 8); C5 = t - ((355*D6) >> 8); C6 = t - ((-70*D5) >> 8); C8 = D8 + D11; C11 = D8 - D11; C9 = D9 + D10; C10 = D9 - D10; C12 = D12 + D15; C15 = D12 - D15; C13 = D13 + D14; C14 = D13 - D14; ; C16 = D16 + D28; C28 = D16 - D28; C17 = D17 + D29; C29 = D17 - D29; C18 = D18 + D30; C30 = D18 - D30; C19 = D19 + D31; C31 = D19 - D31; C20 = D20 + D23; C23 = D20 - D23; C21 = D21 + D22; C22 = D21 - D22; C24 = D24 + D27; C27 = D24 - D27; C25 = D25 + D26; C26 = D25 - D26; ; B0 = C0 + C7; B7 = C0 - C7; B1 = C1 + C6; B6 = C1 - C6; B2 = C2 + C5; B5 = C2 - C5; B3 = C3 + C4; B4 = C3 - C4; ; t = (197*(C8 + C15) >> 8); B8 = t - ((360*C15) >> 8); B15 = t - ((35*C8) >> 8); t = (120*(C9 + C14) >> 8); B9 = t - ((-105*C14) >> 8); B14 = t - ((346*C9) >> 8); t = (244*(C10 + C13) >> 8); B10 = t - ((319*C13) >> 8); B13 = t - ((170*C10) >> 8); t = (25*(C11 + C12) >> 8); B11 = t - ((-229*C12) >> 8); B12 = t - ((279*C11) >> 8); B16 = C16 + C23; B23 = C16 - C23; ; B17 = C17 + C22; B22 = C17 - C22; B18 = C18 + C21; B21 = C18 - C21; B19 = C19 + C20; B20 = C19 - C20; B24 = C24 + C31; B31 = C24 - C31; ; B25 = C25 + C30; B30 = C25 - C30; B26 = C26 + C29; B29 = C26 - C29; B27 = C27 + C28; B28 = C27 - C28; A0 = B0 + B15; A1 = B1 + B14; A2 = B2 + B13; A3 = B3 + B12; A4 = B4 + B11; A5 = B5 + B10; A6 = B6 + B9; A7 = B7 + B8; A8 = B7 - B8; A9 = B6 - B9; A10 = B5 - B10; A11 = B4 - B11; A12 = B3 - B12; A13 = B2 - B13; A14 = B1 - B14; A15 = B0 - B15; ; t = (171*(B16 + B31) >> 8); A16 = t - ((-17*B31) >> 8); A31 = t - ((361*B16) >> 8); t = (205*(B17 + B30) >> 8); A17 = t - ((358*B30) >> 8); A30 = t - ((53*B17) >> 8); t = (131*(B18 + B29) >> 8); A18 = t - ((-87*B29) >> 8); A29 = t - ((351*B18) >> 8); t = (231*(B19 + B28) >> 8); A19 = t - ((340*B28) >> 8); A28 = t - ((121*B19) >> 8); t = (86*(B20 + B27) >> 8); A20 = t - ((-154*B27) >> 8); A27 = t - ((327*B20) >> 8); t = (248*(B21 + B26) >> 8); A21 = t - ((310*B26) >> 8); A26 = t - ((186*B21) >> 8); t = (37*(B22 + B25) >> 8); A22 = t - ((-215*B25) >> 8); A25 = t - ((290*B22) >> 8); t = (255*(B23 + B24) >> 8); A23 = t - ((243*B24) >> 8); A24 = t - ((268*B23) >> 8); Y0 = A0 + A31; Y31 = A0 - A31; Y1 = A1 + A30; Y30 = A1 - A30; Y2 = A2 + A29; Y29 = A2 - A29; Y3 = A3 + A28; Y28 = A3 - A28; Y4 = A4 + A27; Y27 = A4 - A27; Y5 = A5 + A26; Y26 = A5 - A26; Y6 = A6 + A25; Y25 = A6 - A25; Y7 = A7 + A24; Y24 = A7 - A24; Y8 = A8 + A23; Y23 = A8 - A23; Y9 = A9 + A22; Y22 = A9 - A22; Y10 = A10 + A21; Y21 = A10 - A21; Y11 = A11 + A20; Y20 = A11 - A20; Y12 = A12 + A19; Y19 = A12 - A19; Y13 = A13 + A18; Y18 = A13 - A18; Y14 = A14 + A17; Y17 = A14 - A17; Y15 = A15 + A16; Y16 = A15 - A16 E0= X0; F24 = X1; F12 = -X2; G16 = -X3; E4 = X4; ; G31 = X5; ; F8 = X6; ; F26 = -X7; E2 = X8; ; F21 = X9; ; F15 = X10; ; G29 = X11; F5 = X12; ; G18 = -X13; ; E13 = X14; ; E22 = X15; E1 = X16; ; E25 = X17; ; E10 = X18; ; G19 = -X19; F7 = X20; ; G28 = -X21 ; ; F14 = X22; ; F20 = -X23; E3 = X24; ; F27 = -X25; ; F9 = X26; ; G30 = -X27; E6 = X28; ; G17 = -X29 ; ; F11 = X30; ; F23 = -X31; ; t = (251*(G16 + G17) >> 8); F16 = t - ((201*G17) >> 8); F17 = t - ((301*G16) >> 8); t = (212*(G18 + G19) >> 8); F18 = t - ((70*G19) >> 8); F19 = t - ((355*G18) >> 8); ; t = ((212*(G28 + G29)) >> 8); F28 = t - ((70*G29) >> 8); F29 = t - ((355*G28) >> 8); t = (251*(G30 + G31) >> 8); F30 = t - ((201*G31) >> 8); F31 = t - ((301*G30) >> 8); E5 = ((F5 + F7)*181 >> 8); E7 = ((F5 - F7)*181 >> 8); t = (97*(F8 + F9) >> 8); E8 = t - ((-138*F9) >> 8); E9 = t - ((334*F8) >> 8); ; E11 = ((F11 + F12)*181 >> 8); E12 = ((F11 - F12)*181 >> 8); t = (97*(F14 + F15) >> 8); E14 = t - ((-138*F15) >> 8); E15 = t - ((334*F14) >> 8); ; E16 = F16 + F18; D18 = F16 - F18; D17 = F17 + F19; E19 = F17 - F19;; t = (236*(F20 + F21) >> 8); E20 = t - ((334*F21) >> 8); E21 = t - ((138*F20) >> 8); E23 = ((F23 + F24)*181 >> 8); E24 = ((F23 - F24)*181 >> 8); ; t = (236*(F26 + F27) >> 8); E26 = t - ((334*F27) >> 8); E27 = t - ((138*F26) >> 8); ; E28 = -F28 + F30; D30 = F28 + F30; D29 = -F29 + F31; E31 = F29 + F31; ; D0 = ((E0 + E1)*181 >> 8); D1 = ((E0 - E1)*181 >> 8); t = (97*(E2 + E3) >> 8); D2 = t - ((334*E3) >> 8); D3 = t - ((-138*E2) >> 8); D4 = E4 + E5; D5 = E4 - E5; D6 = -E6 + E7; D7 = E6 + E7; D8 = E8 + E14; D14 = E8 - E14; D9 = E9 + E15; D15 = E9 - E15; D10 = E10 + E11; ; D11 = E10 - E11; D12 = E12 + E13; D13 = E12 - E13; ; ; D16 = ((E16 + E19)*181 >> 8); D19 = ((E16 - E19)*181 >> 8); D20 = E20 + E26; D26 = E20 - E26; D21 = E21 + E27; D27 = E21 - E27; D22 = E22 + E23; D23 = E22 - E23; D24 = E24 + E25; D25 = E24 - E25; D28 = ((E28 + E31)*181 >> 8); D31 = ((E28 - E31)*181 >> 8); ; C0 = D0 + D3; C3 = D0 - D3; C1 = D1 + D2; C2 = D1 - D2; t = (49*(D4 + D7) >> 8); C4 = t - ((301*D7) >> 8); C7 = t - ((-201*D4) >> 8); ; t = (142*(D5 + D6) >> 8); C5 = t - ((355*D6) >> 8); C6 = t - ((-70*D5) >> 8); C8 = D8 + D11; C11 = D8 - D11; C9 = D9 + D10; C10 = D9 - D10; C12 = D12 + D15; C15 = D12 - D15; C13 = D13 + D14; C14 = D13 - D14; ; C16 = D16 + D28; C28 = D16 - D28; C17 = D17 + D29; C29 = D17 - D29; C18 = D18 + D30; C30 = D18 - D30; C19 = D19 + D31; C31 = D19 - D31; C20 = D20 + D23; C23 = D20 - D23; C21 = D21 + D22; C22 = D21 - D22; C24 = D24 + D27; C27 = D24 - D27; C25 = D25 + D26; C26 = D25 - D26; ; B0 = C0 + C7; B7 = C0 - C7; B1 = C1 + C6; B6 = C1 - C6; B2 = C2 + C5; B5 = C2 - C5; B3 = C3 + C4; B4 = C3 - C4; ; t = (197*(C8 + C15) >> 8); B8 = t - ((360*C15) >> 8); B15 = t - ((35*C8) >> 8); t = (120*(C9 + C14) >> 8); B9 = t - ((-105*C14) >> 8); B14 = t - ((346*C9) >> 8); t = (244*(C10 + C13) >> 8); B10 = t - ((319*C13) >> 8); B13 = t - ((170*C10) >> 8); t = (25*(C11 + C12) >> 8); B11 = t - ((-229*C12) >> 8); B12 = t - ((279*C11) >> 8); B16 = C16 + C23; B23 = C16 - C23; ; B17 = C17 + C22; B22 = C17 - C22; B18 = C18 + C21; B21 = C18 - C21; B19 = C19 + C20; B20 = C19 - C20; B24 = C24 + C31; B31 = C24 - C31; ; B25 = C25 + C30; B30 = C25 - C30; B26 = C26 + C29; B29 = C26 - C29; B27 = C27 + C28; B28 = C27 - C28; A0 = B0 + B15; A1 = B1 + B14; A2 = B2 + B13; A3 = B3 + B12; A4 = B4 + B11; A5 = B5 + B10; A6 = B6 + B9; A7 = B7 + B8; A8 = B7 - B8; A9 = B6 - B9; A10 = B5 - B10; A11 = B4 - B11; A12 = B3 - B12; A13 = B2 - B13; A14 = B1 - B14; A15 = B0 - B15; ; t = (171*(B16 + B31) >> 8); A16 = t - ((-17*B31) >> 8); A31 = t - ((361*B16) >> 8); t = (205*(B17 + B30) >> 8); A17 = t - ((358*B30) >> 8); A30 = t - ((53*B17) >> 8); t = (131*(B18 + B29) >> 8); A18 = t - ((-87*B29) >> 8); A29 = t - ((351*B18) >> 8); t = (231*(B19 + B28) >> 8); A19 = t - ((340*B28) >> 8); A28 = t - ((121*B19) >> 8); t = (86*(B20 + B27) >> 8); A20 = t - ((-154*B27) >> 8); A27 = t - ((327*B20) >> 8); t = (248*(B21 + B26) >> 8); A21 = t - ((310*B26) >> 8); A26 = t - ((186*B21) >> 8); t = (37*(B22 + B25) >> 8); A22 = t - ((-215*B25) >> 8); A25 = t - ((290*B22) >> 8); t = (255*(B23 + B24) >> 8); A23 = t - ((243*B24) >> 8); A24 = t - ((268*B23) >> 8); Y0 = A0 + A31; Y31 = A0 - A31; Y1 = A1 + A30; Y30 = A1 - A30; Y2 = A2 + A29; Y29 = A2 - A29; Y3 = A3 + A28; Y28 = A3 - A28; Y4 = A4 + A27; Y27 = A4 - A27; Y5 = A5 + A26; Y26 = A5 - A26; Y6 = A6 + A25; Y25 = A6 - A25; Y7 = A7 + A24; Y24 = A7 - A24; Y8 = A8 + A23; Y23 = A8 - A23; Y9 = A9 + A22; Y22 = A9 - A22; Y10 = A10 + A21; Y21 = A10 - A21; Y11 = A11 + A20; Y20 = A11 - A20; Y12 = A12 + A19; Y19 = A12 - A19; Y13 = A13 + A18; Y18 = A13 - A18; Y14 = A14 + A17; Y17 = A14 - A17; Y15 = A15 + A16; Y16 = A15 - A16 E0= X0; F24 = X1; F12 = -X2; G16 = -X3; E4 = X4; ; G31 = X5; ; F8 = X6; ; F26 = -X7; E2 = X8; ; F21 = X9; ; F15 = X10; ; G29 = X11; F5 = X12; ; G18 = -X13; ; E13 = X14; ; E22 = X15; E1 = X16; ; E25 = X17; ; E10 = X18; ; G19 = -X19; F7 = X20; ; G28 = -X21 ; ; F14 = X22; ; F20 = -X23; E3 = X24; ; F27 = -X25; ; F9 = X26; ; G30 = -X27; E6 = X28; ; G17 = -X29 ; ; F11 = X30; ; F23 = -X31; ; t = (251*(G16 + G17) >> 8); F16 = t - ((201*G17) >> 8); F17 = t - ((301*G16) >> 8); t = (212*(G18 + G19) >> 8); F18 = t - ((70*G19) >> 8); F19 = t - ((355*G18) >> 8); ; t = ((212*(G28 + G29)) >> 8); F28 = t - ((70*G29) >> 8); F29 = t - ((355*G28) >> 8); t = (251*(G30 + G31) >> 8); F30 = t - ((201*G31) >> 8); F31 = t - ((301*G30) >> 8); E5 = ((F5 + F7)*181 >> 8); E7 = ((F5 - F7)*181 >> 8); t = (97*(F8 + F9) >> 8); E8 = t - ((-138*F9) >> 8); E9 = t - ((334*F8) >> 8); ; E11 = ((F11 + F12)*181 >> 8); E12 = ((F11 - F12)*181 >> 8); t = (97*(F14 + F15) >> 8); E14 = t - ((-138*F15) >> 8); E15 = t - ((334*F14) >> 8); ; E16 = F16 + F18; D18 = F16 - F18; D17 = F17 + F19; E19 = F17 - F19;; t = (236*(F20 + F21) >> 8); E20 = t - ((334*F21) >> 8); E21 = t - ((138*F20) >> 8); E23 = ((F23 + F24)*181 >> 8); E24 = ((F23 - F24)*181 >> 8); ; t = (236*(F26 + F27) >> 8); E26 = t - ((334*F27) >> 8); E27 = t - ((138*F26) >> 8); ; E28 = -F28 + F30; D30 = F28 + F30; D29 = -F29 + F31; E31 = F29 + F31; ; D0 = ((E0 + E1)*181 >> 8); D1 = ((E0 - E1)*181 >> 8); t = (97*(E2 + E3) >> 8); D2 = t - ((334*E3) >> 8); D3 = t - ((-138*E2) >> 8); D4 = E4 + E5; D5 = E4 - E5; D6 = -E6 + E7; D7 = E6 + E7; D8 = E8 + E14; D14 = E8 - E14; D9 = E9 + E15; D15 = E9 - E15; D10 = E10 + E11; ; D11 = E10 - E11; D12 = E12 + E13; D13 = E12 - E13; ; ; D16 = ((E16 + E19)*181 >> 8); D19 = ((E16 - E19)*181 >> 8); D20 = E20 + E26; D26 = E20 - E26; D21 = E21 + E27; D27 = E21 - E27; D22 = E22 + E23; D23 = E22 - E23; D24 = E24 + E25; D25 = E24 - E25; D28 = ((E28 + E31)*181 >> 8); D31 = ((E28 - E31)*181 >> 8); ; C0 = D0 + D3; C3 = D0 - D3; C1 = D1 + D2; C2 = D1 - D2; t = (49*(D4 + D7) >> 8); C4 = t - ((301*D7) >> 8); C7 = t - ((-201*D4) >> 8); ; t = (142*(D5 + D6) >> 8); C5 = t - ((355*D6) >> 8); C6 = t - ((-70*D5) >> 8); C8 = D8 + D11; C11 = D8 - D11; C9 = D9 + D10; C10 = D9 - D10; C12 = D12 + D15; C15 = D12 - D15; C13 = D13 + D14; C14 = D13 - D14; ; C16 = D16 + D28; C28 = D16 - D28; C17 = D17 + D29; C29 = D17 - D29; C18 = D18 + D30; C30 = D18 - D30; C19 = D19 + D31; C31 = D19 - D31; C20 = D20 + D23; C23 = D20 - D23; C21 = D21 + D22; C22 = D21 - D22; C24 = D24 + D27; C27 = D24 - D27; C25 = D25 + D26; C26 = D25 - D26; ; B0 = C0 + C7; B7 = C0 - C7; B1 = C1 + C6; B6 = C1 - C6; B2 = C2 + C5; B5 = C2 - C5; B3 = C3 + C4; B4 = C3 - C4; ; t = (197*(C8 + C15) >> 8); B8 = t - ((360*C15) >> 8); B15 = t - ((35*C8) >> 8); t = (120*(C9 + C14) >> 8); B9 = t - ((-105*C14) >> 8); B14 = t - ((346*C9) >> 8); t = (244*(C10 + C13) >> 8); B10 = t - ((319*C13) >> 8); B13 = t - ((170*C10) >> 8); t = (25*(C11 + C12) >> 8); B11 = t - ((-229*C12) >> 8); B12 = t - ((279*C11) >> 8); B16 = C16 + C23; B23 = C16 - C23; ; B17 = C17 + C22; B22 = C17 - C22; B18 = C18 + C21; B21 = C18 - C21; B19 = C19 + C20; B20 = C19 - C20; B24 = C24 + C31; B31 = C24 - C31; ; B25 = C25 + C30; B30 = C25 - C30; B26 = C26 + C29; B29 = C26 - C29; B27 = C27 + C28; B28 = C27 - C28; A0 = B0 + B15; A1 = B1 + B14; A2 = B2 + B13; A3 = B3 + B12; A4 = B4 + B11; A5 = B5 + B10; A6 = B6 + B9; A7 = B7 + B8; A8 = B7 - B8; A9 = B6 - B9; A10 = B5 - B10; A11 = B4 - B11; A12 = B3 - B12; A13 = B2 - B13; A14 = B1 - B14; A15 = B0 - B15; ; t = (171*(B16 + B31) >> 8); A16 = t - ((-17*B31) >> 8); A31 = t - ((361*B16) >> 8); t = (205*(B17 + B30) >> 8); A17 = t - ((358*B30) >> 8); A30 = t - ((53*B17) >> 8); t = (131*(B18 + B29) >> 8); A18 = t - ((-87*B29) >> 8); A29 = t - ((351*B18) >> 8); t = (231*(B19 + B28) >> 8); A19 = t - ((340*B28) >> 8); A28 = t - ((121*B19) >> 8); t = (86*(B20 + B27) >> 8); A20 = t - ((-154*B27) >> 8); A27 = t - ((327*B20) >> 8); t = (248*(B21 + B26) >> 8); A21 = t - ((310*B26) >> 8); A26 = t - ((186*B21) >> 8); t = (37*(B22 + B25) >> 8); A22 = t - ((-215*B25) >> 8); A25 = t - ((290*B22) >> 8); t = (255*(B23 + B24) >> 8); A23 = t - ((243*B24) >> 8); A24 = t - ((268*B23) >> 8); Y0 = A0 + A31; Y31 = A0 - A31; Y1 = A1 + A30; Y30 = A1 - A30; Y2 = A2 + A29; Y29 = A2 - A29; Y3 = A3 + A28; Y28 = A3 - A28; Y4 = A4 + A27; Y27 = A4 - A27; Y5 = A5 + A26; Y26 = A5 - A26; Y6 = A6 + A25; Y25 = A6 - A25; Y7 = A7 + A24; Y24 = A7 - A24; Y8 = A8 + A23; Y23 = A8 - A23; Y9 = A9 + A22; Y22 = A9 - A22; Y10 = A10 + A21; Y21 = A10 - A21; Y11 = A11 + A20; Y20 = A11 - A20; Y12 = A12 + A19; Y19 = A12 - A19; Y13 = A13 + A18; Y18 = A13 - A18; Y14 = A14 + A17; Y17 = A14 - A17; Y15 = A15 + A16; Y16 = A15 - A16
전술한 도 19의 우측에 도시된 변경된 버터플라이 구조의 실시예에 따라서 변환된 32x32 입력 블록에 대하여 1차원 이산 코사인 역변환을 수행하는 경우, X0 내지 X31은 역변환되어야 할 입력값, A0 내지 A31, B0 내지 B31, C0 내지 C31, D0 내지 D31, E0 내지 E31, F0 내지 F31, G0 내지 G31, H0 내지 H31은 중간값, t는 보조 변수, Y0 내지 Y31은 역변환된 값을 나타낸다고 할 때, 다음의 연산 과정과 같이 표현될 수 있다.
E0= X0; F24 = X1; F12 = X2; G16 = -X3; F7 = X4; ; G31 = X5; ; F9 = X6; ; F26 = -X7; E3 = X8; ; F21 = X9; ; F14 = X10; ; G29 = X11; E5 = X12; ; G18 = -X13; ; E13 = X14; ; E22 = X15; E1 = X16; ; E25 = X17; ; E10 = X18; ; G19 = -X19; E6 = X20; ; G28 = -X21 ; ; F15 = X22; ; F20 = -X23; E2 = X24; ; F27 = -X25; ; F8 = X26; ; G30 = -X27; F4 = X28; ; G17 = -X29 ; ; F11 = X30; ; F23 = -X31; ; F17 = G17 - ((G16*3) >> 4); F16 = G16 + ((F17*25) >> 7); ; F19 = G19 - ((G18*59) >> 7); F18 = G18 + ((F19*171) >> 8); ; F29 = G29 - ((G28*59) >> 7); F28 = G28 + ((F29*171) >> 8); ; F31 = G31 - ((G30*3) >> 4); F30 = G30 + ((F31*25) >> 7); ; ; ; E4 = (F7 >> 1) - F4; E7 = F7 - E4; ; E9 = -F9 + ((F8*45) >> 7); E8 = F8 - ((E9*53) >> 7); ; E12 = F12 + (F11 >> 1); E11 = F11 - E12; ; E15 = F15 + ((F14*45) >> 7); E14 = F14 - ((E15*53) >> 7); ; ; E16 = F16 + F18; D18 = F16 - F18; D17 = F17 + F19; E19 = F17 - F19; ; E21 = F21 + ((F20*45) >> 7); E20 = F20 - ((E21*53) >> 7); ; E24 = F24 + (F23 >> 1); E23 = F23 - ((E24*255) >> 8); ; E27 = F27 + ((F26*45) >> 7); E26 = F26 - ((E27*53) >> 7); ; E28 = -F28 + F30; D30 = F28 + F30; D29 = -F29 + F31; E31 = F29 + F31; ; D1 = (E0 >> 1) - E1; D0 = E0 - D1; ; D3 = E3 + ((E2*45) >> 7); D2 = ((D3*53) >> 7)- E2; ; D4 = E4 + E6; D6 = E4 - E6; D5 = E7 - E5; ; D7 = E7 + E5; ; D8 = E8 + E14; D14 = E8 - E14; D9 = E9 + E15; D15 = E9 - E15; D10 = E10 + E11; ; D11 = E10 - E11; D12 = E12 + E13; D13 = E12 - E13; ; D16 = ((E16 - E19)*181) >> 8; D19 = ((E16 + E19)*181) >> 8; D20 = E20 + E26; D26 = E20 - E26; D21 = E21 + E27; D27 = E21 - E27; D22 = E22 + E23; D23 = E22 - E23; D24 = E24 + E25; D25 = E24 - E25; ; D28 = ((E28 - E31)*181) >> 8; D31 = ((E28 + E31)*181) >> 8; C0 = D0 + D3; C3 = D0 - D3; C1 = D1 + D2; C2 = D1 - D2; ; D7 = D7 + ((D4*77) >> 8); C4 = D4 - ((D7*71) >> 7); C7 = D7 + ((C4*77) >> 8); ; D6 = D6 + ((D5*25) >> 8); C5 = D5 - ((D6*49) >> 8); C6 = D6 + ((C5*25) >> 8); ; C8 = D8 + D11; C11 = D8 - D11; C9 = D9 + D10; C10 = D9 - D10; ; C12 = D12 + D15; C15 = D12 - D15; C13 = D13 + D14; C14 = D13 - D14; ; C16 = D16 + D28; C28 = D16 - D28; C17 = D17 + D29; C29 = D17 - D29; C18 = D18 + D30; C30 = D18 - D30; C19 = D19 + D31; C31 = D19 - D31; ; C20 = D20 + D23; C23 = D20 - D23; C21 = D21 + D22; C22 = D21 - D22; ; C24 = D24 + D27; C27 = D24 - D27; C25 = D25 + D26; C26 = D25 - D26; ; ; B0 = C0 + C7; B7 = C0 - C7; B1 = C1 + C6; B6 = C1 - C6; B2 = C2 + C5; B5 = C2 - C5; B3 = C3 + C4; B4 = C3 - C4; ; C15 = C15 + ((C8*91) >> 8); B8 = C8 - ((C15*81) >> 7); B15 = C15 + ((B8*91) >> 8); ; C9 = C9 + ((C14*153) >> 8); B14 = C14 - ((C9*225) >> 8); B9 = C9 + ((B14*153) >> 8); ; C13 = C13 + ((C10*37) >> 8); B10 = C10 - ((C13*37) >> 7); B13 = C13 + ((B10*37) >> 8); ; C11 = C11 + ((C12*29) >> 5); B12 = C12 - ((C11*127) >> 7); B11 = C11 + ((B12*29) >> 5); ; B16 = C16 + C23; B23 = C16 - C23; ; B17 = C17 + C22; B22 = C17 - C22; B18 = C18 + C21; B21 = C18 - C21; B19 = C19 + C20; B20 = C19 - C20; ; B24 = C24 + C31; B31 = C24 - C31; ; B25 = C25 + C30; B30 = C25 - C30; B26 = C26 + C29; B29 = C26 - C29; B27 = C27 + C28; B28 = C27 - C28; ; A0 = B0 + B15; A1 = B1 + B14; A2 = B2 + B13; A3 = B3 + B12; A4 = B4 + B11; A5 = B5 + B10; A6 = B6 + B9; A7 = B7 + B8; A8 = B7 - B8; A9 = B6 - B9; A10 = B5 - B10; A11 = B4 - B11; A12 = B3 - B12; A13 = B2 - B13; A14 = B1 - B14; A15 = B0 - B15; ; ; B16 = B16 + ((113*B31) >> 8); A31 = B31 - ((189*B16) >> 8); A16 = B16 + ((113*A31) >> 8); ; B17 = B17 - ((21*B30) >> 6); A30 = B30 + ((19*B17) >> 5); A17 = B17 - ((21*A30) >> 6); ; B18 = B18 + ((145*B29) >> 8); A29 = B29 - ((219*B18) >> 8); A18 = B18 + ((145*A29) >> 8); ; B19 = B19 - ((57*B28) >> 8); A28 = B28 + ((109*B19) >> 8); A19 = B19 - ((57*A28) >> 8); ; B20 = B20 + ((45*B27) >> 6); A27 = B27 - ((241*B20) >> 8); A20 = B20 + ((45*A27) >> 6); ; B21 = B21 - ((31*B26) >> 8); A26 = B26 + ((31*B21) >> 7); A21 = B21 - ((31*A26) >> 8); ; B22 = B22 + ((55*B25) >> 6); A25 = B25 - ((253*B22) >> 8); A22 = B22 + ((55*A25) >> 6); ; B23 = B23 - ((3*B24) >> 7); A24 = B24 + ((3*B23) >> 6); A23 = B23 - ((3*A24) >> 7); ; Y0 = A0 + A31; Y31 = A0 - A31; Y1 = A1 + A30; Y30 = A1 - A30; Y2 = A2 + A29; Y29 = A2 - A29; Y3 = A3 + A28; Y28 = A3 - A28; Y4 = A4 + A27; Y27 = A4 - A27; Y5 = A5 + A26; Y26 = A5 - A26; Y6 = A6 + A25; Y25 = A6 - A25; Y7 = A7 + A24; Y24 = A7 - A24; Y8 = A8 + A23; Y23 = A8 - A23; Y9 = A9 + A22; Y22 = A9 - A22; Y10 = A10 + A21; Y21 = A10 - A21; Y11 = A11 + A20; Y20 = A11 - A20; Y12 = A12 + A19; Y19 = A12 - A19; Y13 = A13 + A18; Y18 = A13 - A18; Y14 = A14 + A17; Y17 = A14 - A17; Y15 = A15 + A16; Y16 = A15 - A16
도 96은 본 발명의 일 실시예에 따른 영상의 역변환 방법을 나타낸 플로우 차트이다.
도 96을 참조하면, 단계 10110에서 복호화되는 영상을 구성하는 NxN(N은 정수) 크기의 블록의 양자화된 변환 계수들을 수신한다.
단계 10120에서, 수신된 양자화된 변환 계수들을 역양자화한다. 전술한 바와 같이, 역양자화는 역스케일링 행렬(V)와 양자화된 변환 계수를 곱한 값에 대해서 floor(QP/6)(floor[x]는 x보다 작거나 같은 최대 정수, QP는 양자화 파라메터) 비트만큼 비트 시프트를 통해 수행될 수 있다.
단계 10130에서, NxN 크기의 블록의 1차원 이산 코사인 변환에 이용되는 NxN 변환 행렬을 구성하는 원소들을 N개의 변수들에 기초한 값들로 치환하여 치환된 NxN 변환 행렬을 생성하고, 치환된 NxN 변환 행렬과 치환된 NxN 변환 행렬의 전치 행렬의 곱셈 행렬을 획득하며, 획득된 곱셈 행렬의 대각 성분을 제외한 나머지 원소들의 제곱합이 최소가 되도록 하는 N개의 변수들을 획득하고, 획득된 N개의 변수들에 기초한 값들로 치환된 NxN 변환 행렬(A)의 역행렬인 NxN 역변환 행렬(A-1)을 이용하여 NxN 크기의 블록의 역양자화된 변환 계수들을 역변환한다.
도 97는 본 발명의 다른 실시예에 다른 영상의 역변환 방법을 나타낸 플로우 차트이다.
도 97를 참조하면, 단계 10210에서 복호화되는 영상을 구성하는 NxN(N은 정수) 크기의 블록의 양자화된 변환 계수들을 수신한다.
단계 10220에서 수신된 양자화된 변환 계수들을 역양자화한다. 이 때, 역양자화는 전술한 도 18 및 도 19에 대응되는 변경된 버터 플라이 구조에 대응되는 변환 행렬의 역행렬을 이용하여 수행될 수 있다.
단계 10230에서 버터플라이 구조의 곱셈 인수 중 삼각 함수 성분을 유리수로 치환하고, 버터플라이 구조의 4개의 곱셈 연산과 2개의 덧셈 연산 과정을 3개의 곱셈 연산과 3개의 덧셈 연산 과정으로 대체한 변경된 버터플라이 구조에 기초하여 역양자화된 변환 계수들에 대한 1차원 이산 코사인 역변환을 수행한다.
예측부(10040)는 인터 예측 또는 인트라 예측을 통해 복호화되는 현재 블록의 예측 블록을 생성하고, 역변환부(10030)에서 출력되는 레지듀얼 값과 예측 블록을 가산하여 현재 블록을 복원한다.
도 98은 본 발명의 또 다른 실시예에 따른 영상 변환 방법을 나타낸 플로우 차트이다.
도 98를 참조하면, 단계 9810에서 NxN(N은 정수) 크기의 블록의 1차원 이산 코사인 변환에 이용되는 NxN 변환 행렬을 소정의 순열 행렬과 회전 행렬들의 곱셈 형태로 분해된다.
다시 도 2를 참조하면, 도 2에 도시된 이산 코사인 변환의 과정은 순열(permutation)과 회전(rotation)과 결합된 행렬로 표현될 수 있다. 예를 들어, 16 포인트 이산 코사인 변환은 하나의 순열 행렬(permutation matrix)과 6개의 회전 행렬들의 곱셈 형태로 표현될 수 있다. 행렬 In을 NxN 크기의 단위 행렬(identity matrix), Jn은 역대각선 행렬(opposite diagonal matrix)로써 Jn(i,j)=δi, n-j+1의 값을 갖는 행렬이다. Jn은 In 행렬의 (i,j)번째 원소를 (i,N+1-j)번째 원소로 매핑한 행렬일 수 있다. 일 예로, J4={0001;0010;0100;1000}이다. 또한, On을 모든 성분이 0인 nxn 크기의 영행렬(zero matrix)라고 정의한다. 이와 같이 정의할 때, 도 2의 16포인트 이산 코사인 변환을 수행하는 행렬 F16은 소정의 순열 행렬 P 및 회전 행렬 A1 내지 A6을 이용하여 다음의 수학식 1과 같이 표현될 수 있다.
수학식 1
Figure PCTKR2011003006-appb-M000001
수학식 1에서 순열행렬 P 및 회전 행렬 A1 내지 A6는 도 99a 내지 도 99g와 같이 표현된다.
또한, 도 2에서 32 포인트 이산 코사인 변환을 수행하는 행렬 F32는 다음의 수학식 2와 같이 표현된다.
수학식 2
Figure PCTKR2011003006-appb-M000002
전술한 바와 같이, 행렬 I16은 16x16 크기의 단위 행렬, J16은 (i,j)째의 행렬 성분이 +i 또는 -i의 값을 갖는 16x16 크기의 대각선 행렬이다. 또한, O16은 모든 성분이 0인 16x16 크기의 영행렬이다. F16은 도 2의 16포인트 이산 코사인 변환을 수행하는 행렬로써 전술한 수학식 1과 같다. 또한, 수학식 2에서 G16은 다음의 수학식 3과 같이 정의되는 행렬이다.
수학식 3
Figure PCTKR2011003006-appb-M000003
수학식 3에서 행렬 A1 내지 A7은 도 100a 내지 도 100g와 같이 표현된다.
다시 도 98을 참조하면, 단계 9820에서 분해된 순열 행렬과 회전 행렬들의 원소들 중 삼각함수 sin 및 cos에 기초한 값들을 분모가 2의 거듭 제곱 형태인 소정의 유리수 값들로 치환한다. 전술한 수학식 1 내지 3에서는 cos 및 sin 함수에 기초한 값들이 포함되어있다. 본 발명의 또 다른 실시예에서는 이러한 cos 및 sin 등의 삼각함수에 기초한 값들을 분모가 2의 거듭제곱 형태인 유리수(dyadic rational)로 치환한다. 구체적으로, 16 포인트 이산 코사인 변환에 이용되는 다음의 cos 및 sin 값들은 우측의 분모가 2의 거듭제곱 형태인 유리수로 치환되어 치환된 값을 대신 이용한다.
cos(pi/4) ~= 45/64, sin(pi/4) ~= 45/64, cos(pi/8) ~= 59/64, sin(pi/8) ~= 24/64, cos(pi/16) ~= 62/64, sin(pi/16) ~= 12/64, cos(pi*5/16) ~= 35/64, sin(pi*5/16) ~= 53/64, cos(pi/32) ~= 63/64, sin(pi/32) ~= 6/64, cos(pi*5/32) ~= 56/64, sin(pi*5/32) ~= 30/64, cos(pi*9/32) ~= 40/64, sin(pi*9/32) ~= 49/64, cos(pi*13/32) ~= 18/64, sin(pi*13/32) ~= 61/64
32 포인트 이산 코사인 변환에 이용되는 다음의 cos 및 sin 값들은 우측의 분모가 2의 거듭제곱 형태인 유리수로 치환되어 치환된 값을 대신 이용한다.
cos(pi/4) ~= 181/256, sin(pi/4) ~= 181/256, cos(pi/8) ~= 236/256, sin(pi/8) ~= 97/256, cos(pi/16) ~= 251/256, sin(pi/16) ~= 49/256, cos(pi*5/16) ~= 142/256, sin(pi*5/16) ~= 212/256, cos(pi/32) ~= 254/256, sin(pi/32) ~= 25/256, cos(pi*5/32) ~= 225/256, sin(pi*5/32) ~= 120/256, cos(pi*9/32) ~= 162/256, sin(pi*9/32) ~= 197/256, cos(pi*13/32) ~= 74/256, sin(pi*13/32) ~= 244/256, cos(pi/64) ~= 255/256, sin(pi/64) ~= 12/256, cos(pi*5/64) ~= 248/256, sin(pi*5/64) ~= 62/256, cos(pi*9/64) ~= 231/256, sin(pi*9/64) ~= 109/256, cos(pi*13/64) ~= 205/256, sin(pi*13/64) ~= 152/256, cos(pi*17/64) ~= 171/256, sin(pi*17/64) ~= 189/256, cos(pi*21/64) ~= 131/256, sin(pi*21/64) ~= 219/256, cos(pi*25/64) ~= 86/256, sin(pi*25/64) ~= 241/256, cos(pi*29/64) ~= 37/256, sin(pi*29/64) ~= 253/256
64 포인트 이산 코사인 변환에 이용되는 다음의 cos 및 sin 값들은 우측의 분모가 2의 거듭제곱 형태인 유리수로 치환되어 치환된 값을 대신 이용한다.
cos(pi/4) ~= 724/1024, sin(pi/4) ~= 724/1024, cos(pi/8) ~= 946/1024, sin(pi/8) ~= 392/1024, cos(pi/16) ~= 1004/1024, sin(pi/16) ~= 200/1024, cos(pi*5/16) ~= 569/1024, sin(pi*5/16) ~= 851/1024, cos(pi/32) ~= 1019/1024, sin(pi/32) ~= 100/1024, cos(pi*5/32) ~= 903/1024, sin(pi*5/32) ~= 483/1024, cos(pi*9/32) ~= 650/1024, sin(pi*9/32) ~= 792/1024, cos(pi*13/32) ~= 297/1024, sin(pi*13/32) ~= 980/1024, cos(pi/64) ~= 1023/1024, sin(pi/64) ~= 50/1024, cos(pi*5/64) ~= 993/1024, sin(pi*5/64) ~= 249/1024, cos(pi*9/64) ~= 926/1024, sin(pi*9/64) ~= 438/1024, cos(pi*13/64) ~= 822/1024, sin(pi*13/64) ~= 610/1024, cos(pi*17/64) ~= 688/1024, sin(pi*17/64) ~= 759/1024, cos(pi*21/64) ~= 526/1024, sin(pi*21/64) ~= 878/1024, cos(pi*25/64) ~= 345/1024, sin(pi*25/64) ~= 964/1024, cos(pi*29/64) ~= 150/1024, sin(pi*29/64) ~= 1013/1024, cos(pi/128) ~= 1024/1024, sin(pi/128) ~= 25/1024, cos(pi*5/128) ~= 1016/1024, sin(pi*5/128) ~= 125/1024, cos(pi*9/128) ~= 999/1024, sin(pi*9/128) ~= 224/1024, cos(pi*13/128) ~= 972/1024, sin(pi*13/128) ~= 321/1024, cos(pi*17/128) ~= 936/1024, sin(pi*17/128) ~= 415/1024, cos(pi*21/128) ~= 891/1024, sin(pi*21/128) ~= 505/1024, cos(pi*25/128) ~= 837/1024, sin(pi*25/128) ~= 590/1024, cos(pi*29/128) ~= 775/1024, sin(pi*29/128) ~= 669/1024, cos(pi*33/128) ~= 706/1024, sin(pi*33/128) ~= 742/1024, cos(pi*37/128) ~= 630/1024, sin(pi*37/128) ~= 807/1024, cos(pi*41/128) ~= 548/1024, sin(pi*41/128) ~= 865/1024, cos(pi*45/128) ~= 460/1024, sin(pi*45/128) ~= 915/1024, cos(pi*49/128) ~= 369/1024, sin(pi*49/128) ~= 955/1024, cos(pi*53/128) ~= 273/1024, sin(pi*53/128) ~= 987/1024, cos(pi*57/128) ~= 175/1024, sin(pi*57/128) ~= 1009/1024, cos(pi*61/128) ~= 75/1024, sin(pi*61/128) ~= 1021/1024,
단계 9830에서, 치환된 값들을 갖는 순열 행렬과 회전 행렬들의 곱셉을 이용하여 NxN 크기의 블록을 변환한다. 즉, 입력값이 X라면 16포인트 이산 코사인 변환은 수학식 1의 F16을 이용하여 F16xX를 계산함으로써 16 포인트 1차원 이산 코사인 변환을 수행할 수 있다. 32포인트 이산 코사인 변환은 수학식 2의 F32를 이용하여 F32xX를 계산함으로써 32 포인트 1차원 이산 코사인 변환을 수행할 수 있다. F16 또는 F32와 같은 변환 행렬은 전술한 과정을 통해 미리 획득된 다음 소정의 메모리에 저장된 후 소정 크기의 입력 블록에 적용되어 변환이 수행되도록 할 수 있다. 즉, 변환 과정을 위해서 매번 변환 행렬이 계산되는 것이 아니라, 다양한 크기의 입력 블록에 대하여 본 발명의 실시예에 따라서 미리 획득되어 저장된 변환 행렬이 이용되도록 할 수 있다.
N이 16인 경우, 즉 16x16 입력 블록에 대하여 치환된 삼각 함수값을 이용한 수학식 1의 1차원 이산 코사인 변환을 수행하는 단계는, X0 내지 X15은 변환되어야 할 입력값, B0 내지 B15, C0 내지 C15, D0 내지 D15, E0 내지 E15, F0 내지 F15, G0 내지 G15은 중간값, Y0 내지 Y15은 변환된 값을 나타낸다고 할 때, 다음의 연산 과정과 같이 표현될 수 있다.
B0 = x0 + x15; B15 = x0 - x15; B1 = x1 + x14; B14 = x1 - x14; B2 = x2 + x13; B13 = x2 - x13; B3 = x3 + x12; B12 = x3 - x12; B4 = x4 + x11; B11 = x4 - x11; B5 = x5 + x10; B10 = x5 - x10; B6 = x6 + x9; B9 = x6 - x9; B7 = x7 + x8; B8 = x7 - x8; C0 = B0 + B7; C7 = B0 - B7; C1 = B1 + B6; C6 = B1 - B6; C2 = B2 + B5; C5 = B2 - B5; C3 = B3 + B4; C4 = B3 - B4; C10 = ( 45 * ( B13 - B10 ) >> 6); C13 = ( 45 * ( B13 + B10 ) >> 6); C11 = ( 45 * ( B12 - B11 ) >> 6); C12 = ( 45 * ( B12 + B11 ) >> 6); D0 = C0 + C3; D3 = C0 - C3; D8 = B8 + C11; D11 = B8 - C11; D12 = B15 - C12; D15 = B15 + C12; D1 = C1 + C2; D2 = C1 - C2; D9 = B9 + C10; D10 = B9 - C10; D13 = B14 - C13; D14 = B14 + C13; D5 = ( 45 * ( C6 - C5 ) >> 6); D6 = ( 45 * ( C6 + C5 ) >> 6); y0 = ( 45 * ( D0 + D1 ) >> 6); y8 = ( 45 * ( D0 - D1 ) >> 6); y4 = ( 59 * D3 + 24 * D2 >> 6); y12 = ( 24 * D3 - 59 * D2 >> 6); E4 = C4 + D5; E5 = C4 - D5; E6 = C7 - D6; E7 = C7 + D6; E9 = ( 24 * D14 - 59 * D9 >> 6); E10 = ( -59 * D13 - 24 * D10 >> 6); E13 = ( 24 * D13 - 59 * D10 >> 6); E14 = ( 59 * D14 + 24 * D9 >> 6); y2 = ( 12 * E4 + 62 * E7 >> 6); y10 = ( 53 * E5 + 35 * E6 >> 6); y6 = ( 53 * E6 - 35 * E5 >> 6); y14 = ( 12 * E7 - 62 * E4 >> 6); F8 = D8 + E9; F9 = D8 - E9; F10 = D11 - E10; F11 = D11 + E10; F12 = D12 + E13; F13 = D12 - E13; F14 = D15 - E14; F15 = D15 + E14; y1 = ( 6 * F8 + 63 * F15 >> 6); y9 = ( 49 * F9 + 40 * F14 >> 6); y5 = ( 30 * F10 + 56 * F13 >> 6); y13 = ( 61 * F11 + 18 * F12 >> 6); y3 = ( 61 * F12 - 18 * F11 >> 6); y11 = ( 30 * F13 - 56 * F10 >> 6); y7 = ( 49 * F14 - 40 * F9 >> 6); y15 = ( 6 * F15 - 63 * F8 >> 6);
이에 대응되는 16 포인트 역 이산 코사인 변환 과정은 다음의 연산 과정과 같이 표현된다. 다음의 연산 과정에서 Y0 내지 Y15은 역변환되어야 할 입력값, B0 내지 B15, C0 내지 C15, D0 내지 D15, E0 내지 E15, F0 내지 F15, G0 내지 G15은 중간값, X0 내지 X15는 역변환된 값을 나타낸다.
F8 = ( 6 * y1 - 63 * y15 ) >> 6; F9 = ( 49 * y9 - 40 * y7 ) >> 6; F10 = ( 30 * y5 - 56 * y11 ) >> 6; F11 = ( 61 * y13 - 18 * y3 ) >> 6; F12 = ( 61 * y3 + 18 * y13 ) >> 6; F13 = ( 30 * y11 + 56 * y5 ) >> 6; F14 = ( 49 * y7 + 40 * y9 ) >> 6; F15 = ( 6 * y15 + 63 * y1 ) >> 6; E4 = ( 12 * y2 - 62 * y14 ) >> 6; E5 = ( 53 * y10 - 35 * y6 ) >> 6; E6 = ( 53 * y6 + 35 * y10 ) >> 6; E7 = ( 12 * y14 + 62 * y2 ) >> 6; E8 = F8 + F9; E9 = F8 - F9; E10 = F11 - F10; E11 = F11 + F10; E12 = F12 + F13; E13 = F12 - F13; E14 = F15 - F14; E15 = F15 + F14; D0 = ( 45 * ( y0 + y8 ) >> 6); D1 = ( 45 * ( y0 - y8 ) >> 6); D2 = ( 24 * y4 - 59 * y12 ) >> 6; D3 = ( 59 * y4 + 24 * y12 ) >> 6; D4 = E4 + E5; D5 = E4 - E5; D6 = E7 - E6; D7 = E7 + E6; D9 = ( 24 * E14 - 59 * E9 ) >> 6; D10 = ( - 59 * E13 - 24 * E10 ) >> 6; D13 = ( 24 * E13 - 59 * E10 ) >> 6; D14 = ( 59 * E14 + 24 * E9 ) >> 6; C0 = D0 + D3; C3 = D0 - D3; C8 = E8 + E11; C11 = E8 - E11; C12 = E15 - E12; C15 = E15 + E12; C1 = D1 + D2; C2 = D1 - D2; C9 = D9 + D10; C10 = D9 - D10; C13 = D14 - D13; C14 = D14 + D13; C5 = ( 45 * ( D6 - D5 ) >> 6); C6 = ( 45 * ( D6 + D5 ) >> 6); B0 = C0 + D7; B7 = C0 - D7; B1 = C1 + C6; B6 = C1 - C6; B2 = C2 + C5; B5 = C2 - C5; B3 = C3 + D4; B4 = C3 - D4; B10 = ( 45 * ( C13 - C10 ) >> 6); B13 = ( 45 * ( C13 + C10 ) >> 6); B11 = ( 45 * ( C12 - C11 ) >> 6); B12 = ( 45 * ( C12 + C11 ) >> 6); x0 = B0 + C15; x15 = B0 - C15; x1 = B1 + C14; x14 = B1 - C14; x2 = B2 + B13; x13 = B2 - B13; x3 = B3 + B12; x12 = B3 - B12; x4 = B4 + B11; x11 = B4 - B11; x5 = B5 + B10; x10 = B5 - B10; x6 = B6 + C9; x9 = B6 - C9; x7 = B7 + C8; x8 = B7 - C8;
N이 32인 경우, 즉 32x32 입력 블록에 대하여 치환된 삼각 함수값을 이용한 수학식 2의 1차원 이산 코사인 변환을 수행하는 단계는, X0 내지 X31은 변환되어야 할 입력값, A0 내지 G31은 중간값, Y0 내지 Y31은 변환된 값을 나타낸다고 할 때, 다음의 연산 과정과 같이 표현될 수 있다.
A0 = x0 + x31; A31 = x0 - x31; A1 = x1 + x30; A30 = x1 - x30; A2 = x2 + x29; A29 = x2 - x29; A3 = x3 + x28; A28 = x3 - x28; A4 = x4 + x27; A27 = x4 - x27; A5 = x5 + x26; A26 = x5 - x26; A6 = x6 + x25; A25 = x6 - x25; A7 = x7 + x24; A24 = x7 - x24; A8 = x8 + x23; A23 = x8 - x23; A9 = x9 + x22; A22 = x9 - x22; A10 = x10 + x21; A21 = x10 - x21; A11 = x11 + x20; A20 = x11 - x20; A12 = x12 + x19; A19 = x12 - x19; A13 = x13 + x18; A18 = x13 - x18; A14 = x14 + x17; A17 = x14 - x17; A15 = x15 + x16; A16 = x15 - x16; B0 = A0 + A15; B15 = A0 - A15; B1 = A1 + A14; B14 = A1 - A14; B2 = A2 + A13; B13 = A2 - A13; B3 = A3 + A12; B12 = A3 - A12; B4 = A4 + A11; B11 = A4 - A11; B5 = A5 + A10; B10 = A5 - A10; B6 = A6 + A9; B9 = A6 - A9; B7 = A7 + A8; B8 = A7 - A8; B20 = ( 181 * ( A27 - A20 ) >> 6); B27 = ( 181 * ( A27 + A20 ) >> 6); B21 = ( 181 * ( A26 - A21 ) >> 6); B26 = ( 181 * ( A26 + A21 ) >> 6); B22 = ( 181 * ( A25 - A22 ) >> 6); B25 = ( 181 * ( A25 + A22 ) >> 6); B23 = ( 181 * ( A24 - A23 ) >> 6); B24 = ( 181 * ( A24 + A23 ) >> 6); C0 = B0 + B7; C7 = B0 - B7; C1 = B1 + B6; C6 = B1 - B6; C2 = B2 + B5; C5 = B2 - B5; C3 = B3 + B4; C4 = B3 - B4; C10 = ( 181 * ( B13 - B10 ) >> 6); C13 = ( 181 * ( B13 + B10 ) >> 6); C11 = ( 181 * ( B12 - B11 ) >> 6); C12 = ( 181 * ( B12 + B11 ) >> 6); C16 = A16 + B23; C23 = A16 - B23; C24 = A31 - B24; C31 = A31 + B24; C17 = A17 + B22; C22 = A17 - B22; C25 = A30 - B25; C30 = A30 + B25; C18 = A18 + B21; C21 = A18 - B21; C26 = A29 - B26; C29 = A29 + B26; C19 = A19 + B20; C20 = A19 - B20; C27 = A28 - B27; C28 = A28 + B27; D0 = C0 + C3; D3 = C0 - C3; D8 = B8 + C11; D11 = B8 - C11; D12 = B15 - C12; D15 = B15 + C12; D1 = C1 + C2; D2 = C1 - C2; D9 = B9 + C10; D10 = B9 - C10; D13 = B14 - C13; D14 = B14 + C13; D5 = ( 181 * ( C6 - C5 ) >> 6); D6 = ( 181 * ( C6 + C5 ) >> 6); D18 = ( 97 * C29 - 236 * C18 ) >> 6; D20 = ( - 236 * C27 - 97 * C20 ) >> 6; D26 = ( - 236 * C21 + 97 * C26) >> 6; D28 = ( 97 * C19 + 236 * C28) >> 6; D19 = ( 97 * C28 - 236 * C19) >> 6; D21 = ( - 236 * C26 - 97 * C21) >> 6; D27 = ( - 236 * C20 + 97 * C27) >> 6; D29 = ( 97 * C18 + 236 * C29) >> 6; y0 = ( 181 * ( D0 + D1 ) >> 6); y16 = ( 181 * ( D0 - D1 ) >> 6); y8 = ( 236 * D3 + 97 * D2) >> 6; y24 = ( 97 * D3 - 236 * D2) >> 6; E4 = C4 + D5;
E5 = C4 - D5; E6 = C7 - D6; E7 = C7 + D6; E9 = ( 97 * D14 - 236 * D9) >> 6; E10 = ( - 236 * D13 - 97 * D10) >> 6; E13 = ( 97 * D13 - 236 * D10 ) >> 6; E14 = ( 236 * D14 + 97 * D9 ) >> 6; E16 = C16 + D19; E19 = C16 - D19; E20 = C23 - D20; E23 = C23 + D20; E24 = C24 + D27; E27 = C24 - D27; E28 = C31 - D28; E31 = C31 + D28; E17 = C17 + D18; E18 = C17 - D18; E21 = C22 - D21; E22 = C22 + D21; E25 = C25 + D26; E26 = C25 - D26; E29 = C30 - D29; E30 = C30 + D29; y4 = ( 49 * E4 + 251 * E7 ) >> 6; y20 = ( 212 * E5 + 142 * E6 ) >> 6; y12 = ( 212 * E6 - 142 * E5 ) >> 6; y28 = ( 49 * E7 - 251 * E4 ) >> 6; F8 = D8 + E9; F9 = D8 - E9; F10 = D11 - E10; F11 = D11 + E10; F12 = D12 + E13; F13 = D12 - E13; F14 = D15 - E14; F15 = D15 + E14; F17 = ( 49 * E30 - 251 * E17 ) >> 6; F18 = ( - 251 * E29 - 49 * E18 ) >> 6; F21 = ( 212 * E26 - 142 * E21 ) >> 6; F22 = ( - 142 * E25 - 212 * E22 ) >> 6; F25 = ( 212 * E25 - 142 * E22 ) >> 6; F26 = ( 142 * E26 + 212 * E21 ) >> 6; F29 = ( 49 * E29 - 251 * E18 ) >> 6; F30 = ( 251 * E30 + 49 * E17 ) >> 6;; y2 = ( 25 * F8 + 254 * F15 ) >> 6; y18 = ( 197 * F9 + 162 * F14 ) >> 6; y10 = ( 120 * F10 + 225 * F13 ) >> 6; y26 = ( 244 * F11 + 74 * F12 ) >> 6; y6 = ( 244 * F12 - 74 * F11 ) >> 6; y22 = ( 120 * F13 - 225 * F10 ) >> 6; y14 = ( 197 * F14 - 162 * F9 ) >> 6; y30 = ( 25 * F15 - 254 * F8 ) >> 6; G16 = E16 + F17; G17 = E16 - F17; G18 = E19 - F18; G19 = E19 + F18; G20 = E20 + F21; G21 = E20 - F21; G22 = E23 - F22; G23 = E23 + F22; G24 = E24 + F25; G25 = E24 - F25; G26 = E27 - F26; G27 = E27 + F26; G28 = E28 + F29; G29 = E28 - F29;
G30 = E31 - F30; G31 = E31 + F30; y1 = ( 12 * G16 + 255 * G31 ) >> 6; y17 = ( 189 * G17 + 171 * G30 ) >> 6; y9 = ( 109 * G18 + 231 * G29 ) >> 6; y25 = ( 241 * G19 + 86 * G28 ) >> 6; y5 = ( 62 * G20 + 248 * G27 ) >> 6; y21 = ( 219 * G21 + 131 * G26 ) >> 6; y13 = ( 152 * G22 + 205 * G25 ) >> 6; y29 = ( 253 * G23 + 37 * G24 ) >> 6; y3 = ( 253 * G24 - 37 * G23 ) >> 6; y19 = ( 152 * G25 - 205 * G22 ) >> 6; y11 = ( 219 * G26 - 131 * G21 ) >> 6; y27 = ( 62 * G27 - 248 * G20 ) >> 6; y7 = ( 241 * G28 - 86 * G19 ) >> 6; y23 = ( 109 * G29 - 231 * G18 ) >> 6; y15 = ( 189 * G30 - 171 * G17 ) >> 6; y31 = ( 12 * G31 - 255 * G16 ) >> 6;
이에 대응되는 32 포인트 역 이산 코사인 변환 과정은 다음의 연산 과정과 같이 표현된다. 다음의 연산 과정에서 Y0 내지 Y31은 역변환되어야 할 입력값, A0 내지 G31은 중간값, X0 내지 X31은 역변환된 값을 나타낸다.
G16 = ( 12 * y1 - 255 * y31 ) >> 6; G17 = ( 189 * y17 - 171 * y15 ) >> 6; G18 = ( 109 * y9 - 231 * y23 ) >> 6; G19 = ( 241 * y25 - 86 * y7 ) >> 6; G20 = ( 62 * y5 - 248 * y27 ) >> 6; G21 = ( 219 * y21 - 131 * y11 ) >> 6; G22 = ( 152 * y13 - 205 * y19 ) >> 6; G23 = ( 253 * y29 - 37 * y3 ) >> 6; G24 = ( 253 * y3 + 37 * y29 ) >> 6; G25 = ( 152 * y19 + 205 * y13 ) >> 6; G26 = ( 219 * y11 + 131 * y21 ) >> 6; G27 = ( 62 * y27 + 248 * y5 ) >> 6; G28 = ( 241 * y7 + 86 * y25 ) >> 6; G29 = ( 109 * y23 + 231 * y9 ) >> 6; G30 = ( 189 * y15 + 171 * y17 ) >> 6; G31 = ( 12 * y31 + 255 * y1 ) >> 6; F8 = ( 25 * y2 - 254 * y30 ) >> 6; F9 = ( 197 * y18 - 162 * y14 ) >> 6; F10 = ( 120 * y10 - 225 * y22 ) >> 6; F11 = ( 244 * y26 - 74 * y6 ) >> 6; F12 = ( 244 * y6 + 74 * y26 ) >> 6; F13 = ( 120 * y22 + 225 * y10 ) >> 6; F14 = ( 197 * y14 + 162 * y18 ) >> 6; F15 = ( 25 * y30 + 254 * y2 ) >> 6; F16 = G16 + G17; F17 = G16 - G17; F18 = G19 - G18; F19 = G19 + G18; F20 = G20 + G21; F21 = G20 - G21; F22 = G23 - G22; F23 = G23 + G22; F24 = G24 + G25; F25 = G24 - G25; F26 = G27 - G26; F27 = G27 + G26; F28 = G28 + G29; F29 = G28 - G29; F30 = G31 - G30; F31 = G31 + G30; E4 = ( 49 * y4 - 251 * y28 ) >> 6; E5 = ( 212 * y20 - 142 * y12 ) >> 6; E6 = ( 212 * y12 + 142 * y20 ) >> 6; E7 = ( 49 * y28 + 251 * y4 ) >> 6; E8 = F8 + F9; E9 = F8 - F9; E10 = F11 - F10; E11 = F11 + F10; E12 = F12 + F13; E13 = F12 - F13; E14 = F15 - F14; E15 = F15 + F14; E17 = ( 49 * F30 - 251 * F17 ) >> 6; E18 = ( - 251 * F29 - 49 * F18 ) >> 6; E21 = ( 212 * F26 - 142 * F21 ) >> 6; E22 = ( - 142 * F25 - 212 * F22 ) >> 6; E25 = ( 212 * F25 - 142 * F22 ) >> 6; E26 = ( 142 * F26 + 212 * F21 ) >> 6; E29 = ( 49 * F29 - 251 * F18 ) >> 6; E30 = ( 251 * F30 + 49 * F17 ) >> 6; D0 = ( 181 * ( y0 + y16 ) >> 6); D1 = ( 181 * ( y0 - y16 ) >> 6); D2 = ( 97 * y8 - 236 * y24 ) >> 6; D3 = ( 236 * y8 + 97 * y24 ) >> 6; D4 = E4 + E5; D5 = E4 - E5; D6 = E7 - E6; D7 = E7 + E6; D9 = ( 97 * E14 - 236 * E9 ) >> 6; D10 = ( - 236 * E13 - 97 * E10 ) >> 6; D13 = ( 97 * E13 - 236 * E10 ) >> 6; D14 = ( 236 * E14 + 97 * E9 ) >> 6; D16 = F16 + F19; D19 = F16 - F19; D20 = F23 - F20; D23 = F23 + F20; D24 = F24 + F27; D27 = F24 - F27; D28 = F31 - F28; D31 = F31 + F28; D17 = E17 + E18; D18 = E17 - E18; D21 = E22 - E21; D22 = E22 + E21; D25 = E25 + E26; D26 = E25 - E26; D29 = E30 - E29; D30 = E30 + E29; C0 = D0 + D3; C3 = D0 - D3; C8 = E8 + E11; C11 = E8 - E11; C12 = E15 - E12; C15 = E15 + E12; C1 = D1 + D2; C2 = D1 - D2; C9 = D9 + D10; C10 = D9 - D10; C13 = D14 - D13; C14 = D14 + D13; C5 = ( 181 * ( D6 - D5 ) >> 6); C6 = ( 181 * ( D6 + D5 ) >> 6); C18 = ( 97 * D29 - 236 * D18 ) >> 6; C20 = ( - 236 * D27 - 97 * D20 ) >> 6; C26 = ( - 236 * D21 + 97 * D26 ) >> 6; C28 = ( 97 * D19 + 236 * D28 ) >> 6; C19 = ( 97 * D28 - 236 * D19 ) >> 6; C21 = ( - 236 * D26 - 97 * D21 ) >> 6; C27 = ( - 236 * D20 + 97 * D27 ) >> 6; C29 = ( 97 * D18 + 236 * D29 ) >> 6; B0 = C0 + D7; B7 = C0 - D7; B1 = C1 + C6; B6 = C1 - C6; B2 = C2 + C5; B5 = C2 - C5; B3 = C3 + D4; B4 = C3 - D4; B10 = ( 181 * ( C13 - C10 ) >> 6); B13 = ( 181 * ( C13 + C10 ) >> 6); B11 = ( 181 * ( C12 - C11 ) >> 6); B12 = ( 181 * ( C12 + C11 ) >> 6); B16 = D16 + D23; B23 = D16 - D23; B24 = D31 - D24; B31 = D31 + D24; B17 = D17 + D22; B22 = D17 - D22; B25 = D30 - D25; B30 = D30 + D25; B18 = C18 + C21; B21 = C18 - C21; B26 = C29 - C26; B29 = C29 + C26; B19 = C19 + C20; B20 = C19 - C20; B27 = C28 - C27; B28 = C28 + C27; A0 = B0 + C15; A15 = B0 - C15; A1 = B1 + C14; A14 = B1 - C14; A2 = B2 + B13; A13 = B2 - B13; A3 = B3 + B12; A12 = B3 - B12; A4 = B4 + B11; A11 = B4 - B11; A5 = B5 + B10; A10 = B5 - B10; A6 = B6 + C9; A9 = B6 - C9; A7 = B7 + C8; A8 = B7 - C8; A20 = ( 181 * ( B27 - B20 ) >> 6); A27 = ( 181 * ( B27 + B20 ) >> 6); A21 = ( 181 * ( B26 - B21 ) >> 6); A26 = ( 181 * ( B26 + B21 ) >> 6); A22 = ( 181 * ( B25 - B22 ) >> 6); A25 = ( 181 * ( B25 + B22 ) >> 6); A23 = ( 181 * ( B24 - B23 ) >> 6); A24 = ( 181 * ( B24 + B23 ) >> 6); x0 = A0 + B31; x31 = A0 - B31; x1 = A1 + B30; x30 = A1 - B30; x2 = A2 + B29; x29 = A2 - B29; x3 = A3 + B28; x28 = A3 - B28; x4 = A4 + A27; x27 = A4 - A27; x5 = A5 + A26; x26 = A5 - A26; x6 = A6 + A25; x25 = A6 - A25; x7 = A7 + A24; x24 = A7 - A24; x8 = A8 + A23; x23 = A8 - A23; x9 = A9 + A22; x22 = A9 - A22; x10 = A10 + A21; x21 = A10 - A21; x11 = A11 + A20; x20 = A11 - A20; x12 = A12 + B19; x19 = A12 - B19; x13 = A13 + B18; x18 = A13 - B18; x14 = A14 + B17; x17 = A14 - B17; x15 = A15 + B16; x16 = A15 - B16;
N이 64인 경우, 즉 64x64 입력 블록에 대하여 치환된 삼각 함수값을 이용한 1차원 이산 코사인 변환을 수행하는 단계는, X0 내지 X63은 변환되어야 할 입력값, A0 내지 O63은 중간값, Y0 내지 Y63은 변환된 값을 나타낸다고 할 때, 다음의 연산 과정과 같이 표현될 수 있다.
O0 = X0+X63; O63 = X0-X63; O1 = X1+X62; O62 = X1-X62; O2 = X2+X61; O61 = X2-X61; O3 = X3+X60; O60 = X3-X60; O4 = X4+X59; O59 = X4-X59; O5 = X5+X58; O58 = X5-X58; O6 = X6+X57; O57 = X6-X57; O7 = X7+X56; O56 = X7-X56; O8 = X8+X55; O55 = X8-X55; O9 = X9+X54; O54 = X9-X54; O10 = X10+X53; O53 = X10-X53; O11 = X11+X52; O52 = X11-X52; O12 = X12+X51; O51 = X12-X51; O13 = X13+X50; O50 = X13-X50; O14 = X14+X49; O49 = X14-X49; O15 = X15+X48; O48 = X15-X48; O16 = X16+X47; O47 = X16-X47; O17 = X17+X46; O46 = X17-X46; O18 = X18+X45; O45 = X18-X45; O19 = X19+X44; O44 = X19-X44; O20 = X20+X43; O43 = X20-X43; O21 = X21+X42; O42 = X21-X42; O22 = X22+X41; O41 = X22-X41; O23 = X23+X40; O40 = X23-X40; O24 = X24+X39; O39 = X24-X39; O25 = X25+X38; O38 = X25-X38; O26 = X26+X37; O37 = X26-X37; O27 = X27+X36; O36 = X27-X36; O28 = X28+X35; O35 = X28-X35; O29 = X29+X34; O34 = X29-X34; O30 = X30+X33; O33 = X30-X33; O31 = X31+X32; O32 = X31-X32;
A0 = O0+O31; A31 = O0-O31; A1 = O1+O30; A30 = O1-O30; A2 = O2+O29; A29 = O2-O29; A3 = O3+O28; A28 = O3-O28; A4 = O4+O27; A27 = O4-O27; A5 = O5+O26; A26 = O5-O26; A6 = O6+O25; A25 = O6-O25; A7 = O7+O24; A24 = O7-O24; A8 = O8+O23; A23 = O8-O23; A9 = O9+O22; A22 = O9-O22; A10 = O10+O21; A21 = O10-O21; A11 = O11+O20; A20 = O11-O20; A12 = O12+O19; A19 = O12-O19; A13 = O13+O18; A18 = O13-O18; A14 = O14+O17; A17 = O14-O17; A15 = O15+O16; A16 = O15-O16; A40 = (724*(O55-O40))>>10; A55 = (724*(O55+O40))>>10; A41 = (724*(O54-O41))>>10; A54 = (724*(O54+O41))>>10; A42 = (724*(O53-O42))>>10; A53 = (724*(O53+O42))>>10; A43 = (724*(O52-O43))>>10; A52 = (724*(O52+O43))>>10; A44 = (724*(O51-O44))>>10; A51 = (724*(O51+O44))>>10; A45 = (724*(O50-O45))>>10; A50 = (724*(O50+O45))>>10; A46 = (724*(O49-O46))>>10; A49 = (724*(O49+O46))>>10; A47 = (724*(O48-O47))>>10; A48 = (724*(O48+O47))>>10;
B0 = A0+A15; B15 = A0-A15; B1 = A1+A14; B14 = A1-A14; B2 = A2+A13; B13 = A2-A13; B3 = A3+A12; B12 = A3-A12; B4 = A4+A11; B11 = A4-A11; B5 = A5+A10; B10 = A5-A10; B6 = A6+A9; B9 = A6-A9; B7 = A7+A8; B8 = A7-A8; B20 = (724*(A27-A20))>>10; B27 = (724*(A27+A20))>>10; B21 = (724*(A26-A21))>>10; B26 = (724*(A26+A21))>>10; B22 = (724*(A25-A22))>>10; B25 = (724*(A25+A22))>>10; B23 = (724*(A24-A23))>>10; B24 = (724*(A24+A23))>>10; B32 = O32+A47; B47 = O32-A47; B48 = O63-A48; B63 = O63+A48; B33 = O33+A46; B46 = O33-A46; B49 = O62-A49; B62 = O62+A49; B34 = O34+A45; B45 = O34-A45; B50 = O61-A50; B61 = O61+A50; B35 = O35+A44; B44 = O35-A44; B51 = O60-A51; B60 = O60+A51; B36 = O36+A43; B43 = O36-A43; B52 = O59-A52; B59 = O59+A52; B37 = O37+A42; B42 = O37-A42; B53 = O58-A53; B58 = O58+A53; B38 = O38+A41; B41 = O38-A41; B54 = O57-A54; B57 = O57+A54; B39 = O39+A40; B40 = O39-A40; B55 = O56-A55 ; B56 = O56+A55;
C0 = B0+B7; C7 = B0-B7; C1 = B1+B6; C6 = B1-B6; C2 = B2+B5; C5 = B2-B5; C3 = B3+B4; C4 = B3-B4; C10 = (724*(B13-B10))>>10; C13 = (724*(B13+B10))>>10; C11 = (724*(B12-B11))>>10; C12 = (724*(B12+B11))>>10; C16 = A16+B23; C23 = A16-B23; C24 = A31-B24; C31 = A31+B24; C17 = A17+B22; C22 = A17-B22; C25 = A30-B25; C30 = A30+B25; C18 = A18+B21; C21 = A18-B21; C26 = A29-B26; C29 = A29+B26; C19 = A19+B20; C20 = A19-B20; C27 = A28-B27; C28 = A28+B27; C36 = (392*B59-946*B36)>>10; C40 = (-946*B55-392*B40)>>10; C52 = (-946*B43+392*B52)>>10; C56 = (392*B39+946*B56)>>10; C37 = (392*B58-946*B37)>>10; C41 = (-946*B54-392*B41)>>10; C53 = (-946*B42+392*B53)>>10; C57 = (392*B38+946*B57)>>10; C38 = (392*B57-946*B38)>>10; C42 = (-946*B53-392*B42)>>10; C54 = (-946*B41+392*B54)>>10; C58 = (392*B37+946*B58)>>10; C39 = (392*B56-946*B39)>>10; C43 = (-946*B52-392*B43)>>10; C55 = (-946*B40+392*B55)>>10; C59 = (392*B36+946*B59)>>10;
D0 = C0+C3; D3 = C0-C3; D8 = B8+C11; D11 = B8-C11; D12 = B15-C12; D15 = B15+C12; D1 = C1+C2; D2 = C1-C2; D9 = B9+C10; D10 = B9-C10; D13 = B14-C13; D14 = B14+C13; D5 = (724*(C6-C5))>>10; D6 = (724*(C6+C5))>>10; D18 = (392*C29-946*C18)>>10; D20 = (-946*C27-392*C20)>>10; D26 = (-946*C21+392*C26)>>10; D28 = (392*C19+946*C28)>>10; D19 = (392*C28-946*C19)>>10; D21 = (-946*C26-392*C21)>>10; D27 = (-946*C20+392*C27)>>10; D29 = (392*C18+946*C29)>>10; D32 = B32+C39; D39 = B32-C39; D40 = B47-C40; D47 = B47+C40; D48 = B48+C55; D55 = B48-C55; D56 = B63-C56; D63 = B63+C56; D33 = B33+C38; D38 = B33-C38; D41 = B46-C41; D46 = B46+C41; D49 = B49+C54; D54 = B49-C54; D57 = B62-C57; D62 = B62+C57; D34 = B34+C37; D37 = B34-C37; D42 = B45-C42; D45 = B45+C42; D50 = B50+C53; D53 = B50-C53; D58 = B61-C58; D61 = B61+C58; D35 = B35+C36; D36 = B35-C36; D43 = B44-C43; D44 = B44+C43; D51 = B51+C52; D52 = B51-C52; D59 = B60-C59; D60 = B60+C59;
E0 = (724*(D0+D1))>>10; E1 = (724*(D0-D1))>>10; E2 = (946*D3+392*D2)>>10; E3 = (392*D3-946*D2)>>10; E4 = C4+D5; E5 = C4-D5; E6 = C7-D6; E7 = C7+D6; E9 = (392*D14-946*D9)>>10; E10 = (-946*D13-392*D10)>>10; E13 = (392*D13-946*D10)>>10; E14 = (946*D14+392*D9)>>10; D15 = D15; E16 = C16+D19; E19 = C16-D19; E20 = C23-D20; E23 = C23+D20; E24 = C24+D27; E27 = C24-D27; E28 = C31-D28; E31 = C31+D28; E17 = C17+D18; E18 = C17-D18; E21 = C22-D21; E22 = C22+D21; E25 = C25+D26; E26 = C25-D26; E29 = C30-D29; E30 = C30+D29; E34 = (200*D61-1004*D34)>>10; E35 = (200*D60-1004*D35)>>10; E36 = (-1004*D59-200*D36)>>10; E37 = (-1004*D58-200*D37)>>10; E42 = (851*D53-569*D42)>>10; E43 = (851*D52-569*D43)>>10; E44 = (-569*D51-851*D44)>>10; E45 = (-569*D50-851*D45)>>10; E50 = (851*D50-569*D45)>>10; E51 = (851*D51-569*D44)>>10; E52 = (569*D52+851*D43)>>10; E53 = (569*D53+851*D42)>>10; E58 = (200*D58-1004*D37)>>10; E59 = (200*D59-1004*D36)>>10; E60 = (1004*D60+200*D35)>>10; E61 = (1004*D61+200*D34)>>10;
F4 = (200*E4+1004*E7)>>10; F5 = (851*E5+569*E6)>>10; F6 = (851*E6-569*E5)>>10; F7 = (200*E7-1004*E4)>>10; F8 = D8+E9; F9 = D8-E9; F10 = D11-E10; F11 = D11+E10; F12 = D12+E13; F13 = D12-E13; F14 = D15-E14; F15 = D15+E14; F17 = (200*E30-1004*E17)>>10; F18 = (-1004*E29-200*E18)>>10; F21 = (851*E26-569*E21)>>10; F22 = (-569*E25-851*E22)>>10; F25 = (851*E25-569*E22)>>10; F26 = (569*E26+851*E21)>>10; F29 = (200*E29-1004*E18)>>10; F30 = (1004*E30+200*E17)>>10; F32 = D32+E35; F33 = D33+E34; F34 = D33-E34; F35 = D32-E35; F36 = D39-E36; F37 = D38-E37; F38 = D38+E37; F39 = D39+E36; F40 = D40+E43; F41 = D41+E42; F42 = D41-E42; F43 = D40-E43; F44 = D47-E44; F45 = D46-E45; F46 = D46+E45; F47 = D47+E44; F48 = D48+E51; F49 = D49+E50; F50 = D49-E50; F51 = D48-E51; F52 = D55-E52; F53 = D54-E53; F54 = D54+E53; F55 = D55+E52; F56 = D56+E59; F57 = D57+E58; F58 = D57-E58; F59 = D56-E59; F60 = D63-E60; F61 = D62-E61; F62 = D62+E61; F63 = D63+E60;
G8 = (100*F8+1019*F15)>>10; G9 = (792*F9+650*F14)>>10; G10 = (483*F10+903*F13)>>10; G11 = (980*F11+297*F12)>>10; G12 = (980*F12-297*F11)>>10; G13 = (483*F13-903*F10)>>10; G14 = (792*F14-650*F9)>>10; G15 = (100*F15-1019*F8)>>10; G16 = E16+F17; G17 = E16-F17; G18 = E19-F18; G19 = E19+F18; G20 = E20+F21; G21 = E20-F21; G22 = E23-F22; G23 = E23+F22; G24 = E24+F25; G25 = E24-F25; G26 = E27-F26; G27 = E27+F26; G28 = E28+F29; G29 = E28-F29; G30 = E31-F30; G31 = E31+F30; G33 = (100*F62-1019*F33)>>10; G34 = (-1019*F61-100*F34)>>10; G37 = (792*F58-650*F37)>>10; G38 = (-650*F57-792*F38)>>10; G41 = (483*F54-903*F41)>>10 ; G42 = (-903*F53-483*F42)>>10; G45 = (980*F50-297*F45)>>10; G46 = (-297*F49-980*F46)>>10; G49 = (980*F49-297*F46)>>10; G50 = (297*F50+980*F45)>>10; G53 = (483*F53-903*F42)>>10; G54 = (903*F54+483*F41)>>10; G57 = (792*F57-650*F38)>>10; G58 = (650*F58+792*F37)>>10; G61 = (100*F61-1019*F34)>>10; G62 = (1019*F62+100*F33)>>10;
H16 = (50*G16+1023*G31)>>10; H17 = (759*G17+688*G30)>>10; H18 = (438*G18+926*G29)>>10; H19 = (964*G19+345*G28)>>10; H20 = (249*G20+993*G27)>>10; H21 = (878*G21+526*G26)>>10; H22 = (610*G22+822*G25)>>10; H23 = (1013*G23+150*G24)>>10; H24 = (1013*G24-150*G23)>>10; H25 = (610*G25-822*G22)>>10; H26 = (878*G26-526*G21)>>10; H27 = (249*G27-993*G20)>>10; H28 = (964*G28-345*G19)>>10; H29 = (438*G29-926*G18)>>10; H30 = (759*G30-688*G17)>>10; H31 = (50*G31-1023*G16)>>10; H32 = F32+G33; H33 = F32-G33; H34 = F35-G34; H35 = F35+G34; H36 = F36+G37; H37 = F36-G37; H38 = F39-G38; H39 = F39+G38; H40 = F40+G41; H41 = F40-G41; H42 = F43-G42; H43 = F43+G42; H44 = F44+G45; H45 = F44-G45; H46 = F47-G46; H47 = F47+G46; H48 = F48+G49; H49 = F48-G49; H50 = F51-G50; H51 = F51+G50; H52 = F52+G53; H53 = F52-G53; H54 = F55-G54; H55 = F55+G54; H56 = F56+G57; H57 = F56-G57; H58 = F59-G58; H59 = F59+G58; H60 = F60+G61; H61 = F60-G61; H62 = F63-G62; H63 = F63+G62;
I32 = (25*H32+1024*H63)>>10; I33 = (742*H33+706*H62)>>10; I34 = (415*H34+936*H61)>>10; I35 = (955*H35+369*H60)>>10; I36 = (224*H36+999*H59)>>10; I37 = (865*H37+548*H58)>>10; I38 = (590*H38+837*H57)>>10; I39 = (1009*H39+175*H56)>>10; I40 = (125*H40+1016*H55)>>10; I41 = (807*H41+630*H54)>>10; I42 = (505*H42+891*H53)>>10; I43 = (987*H43+273*H52)>>10; I44 = (321*H44+972*H51)>>10; I45 = (915*H45+460*H50)>>10; I46 = (669*H46+775*H49)>>10; I47 = (1021*H47+75*H48)>>10; I48 = (1021*H48-75*H47)>>10; I49 = (669*H49-775*H46)>>10; I50 = (915*H50-460*H45)>>10; I51 = (321*H51-972*H44)>>10; I52 = (987*H52-273*H43)>>10; I53 = (505*H53-891*H42)>>10; I54 = (807*H54-630*H41)>>10; I55 = (125*H55-1016*H40)>>10; I56 = (1009*H56-175*H39)>>10; I57 = (590*H57-837*H38)>>10; I58 = (865*H58-548*H37)>>10; I59 = (224*H59-999*H36)>>10; I60 = (955*H60-369*H35)>>10; I61 = (415*H61-936*H34)>>10; I62 = (742*H62-706*H33)>>10; I63 = (25*H63-1024*H32)>>10;
Y0 = E0; Y1 = I32; Y2 = H16; Y3 = I48; Y4 = G8; Y5 = I40; Y6 = H24; Y7 = I56; Y8 = F4; Y9 = I36; Y10 = H20; Y11 = I52; Y12 = G12; Y13 = I44; Y14 = H28; Y15 = I60; Y16 = E2; Y17 = I34; Y18 = H18; Y19 = I50; Y20 = G10; Y21 = I42; Y22 = H26; Y23 = I58; Y24 = F6; Y25 = I38; Y26 = H22; Y27 = I54; Y28 = G14; Y29 = I46; Y30 = H30; Y31 = I62; Y32 = E1; Y33 = I33; Y34 = H17; Y35 = I49; Y36 = G9; Y37 = I41; Y38 = H25; Y39 = I57; Y40 = F5; Y41 = I37; Y42 = H21; Y43 = I53; Y44 = G13; Y45 = I45; Y46 = H29; Y47 = I61; Y48 = E3; Y49 = I35; Y50 = H19; Y51 = I51; Y52 = G11; Y53 = I43; Y54 = H27; Y55 = I59; Y56 = F7; Y57 = I39; Y58 = H23; Y59 = I55; Y60 = G15; Y61 = I47; Y62 = H31; Y63 = I63
이에 대응되는 64 포인트 역 이산 코사인 변환 과정은 다음의 연산 과정과 같이 표현된다. 다음의 연산 과정에서 X0 내지 X63은 역변환되어야 할 입력값, A0 내지 O63은 중간값, Y0 내지 Y63은 역변환된 값을 나타낸다.
H32 = (25*X1-1024*X63) >> 10; H33 = (742*X33-706*X31) >> 10; H34 = (415*X17-936*X47) >> 10; H35 = (955*X49-369*X15) >> 10; H36 = (224*X9-999*X55) >> 10; H37 = (865*X41-548*X23) >> 10; H38 = (590*X25-837*X39) >> 10; H39 = (1009*X57-175*X7) >> 10; H40 = (125*X5-1016*X59) >> 10; H41 = (807*X37-630*X27) >> 10; H42 = (505*X21-891*X43) >> 10; H43 = (987*X53-273*X11) >> 10; H44 = (321*X13-972*X51) >> 10; H45 = (915*X45-460*X19) >> 10; H46 = (669*X29-775*X35) >> 10; H47 = (1021*X61-75*X3) >> 10; H48 = (1021*X3+75*X61) >> 10; H49 = (669*X35+775*X29) >> 10; H50 = (915*X19+460*X45) >> 10; H51 = (321*X51+972*X13) >> 10; H52 = (987*X11+273*X53) >> 10; H53 = (505*X43+891*X21) >> 10; H54 = (807*X27+630*X37) >> 10; H55 = (125*X59+1016*X5) >> 10; H56 = (1009*X7+175*X57) >> 10; H57 = (590*X39+837*X25) >> 10; H58 = (865*X23+548*X41) >> 10; H59 = (224*X55+999*X9) >> 10; H60 = (955*X15+369*X49) >> 10; H61 = (415*X47+936*X17) >> 10; H62 = (742*X31+706*X33) >> 10; H63 = (25*X63+1024*X1) >> 10;
G16 = (50*X2-1023*X62) >> 10; G17 = (759*X34-688*X30) >> 10; G18 = (438*X18-926*X46) >> 10; G19 = (964*X50-345*X14) >> 10; G20 = (249*X10-993*X54) >> 10; G21 = (878*X42-526*X22) >> 10; G22 = (610*X26-822*X38) >> 10; G23 = (1013*X58-150*X6) >> 10; G24 = (1013*X6+150*X58) >> 10; G25 = (610*X38+822*X26) >> 10; G26 = (878*X22+526*X42) >> 10; G27 = (249*X54+993*X10) >> 10; G28 = (964*X14+345*X50) >> 10; G29 = (438*X46+926*X18) >> 10; G30 = (759*X30+688*X34) >> 10; G31 = (50*X62+1023*X2) >> 10; G32 = H32+H33; G33 = H32-H33; G34 = H35-H34; G35 = H35+H34; G36 = H36+H37; G37 = H36-H37; G38 = H39-H38; G39 = H39+H38; G40 = H40+H41; G41 = H40-H41; G42 = H43-H42; G43 = H43+H42; G44 = H44+H45; G45 = H44-H45; G46 = H47-H46; G47 = H47+H46; G48 = H48+H49; G49 = H48-H49; G50 = H51-H50; G51 = H51+H50; G52 = H52+H53; G53 = H52-H53; G54 = H55-H54; G55 = H55+H54; G56 = H56+H57; G57 = H56-H57; G58 = H59-H58; G59 = H59+H58; G60 = H60+H61; G61 = H60-H61; G62 = H63-H62; G63 = H63+H62;
F8 = (100*X4-1019*X60) >> 10; F9 = (792*X36-650*X28) >> 10; F10 = (483*X20-903*X44) >> 10; F11 = (980*X52-297*X12) >> 10; F12 = (980*X12+297*X52) >> 10; F13 = (483*X44+903*X20) >> 10; F14 = (792*X28+650*X36) >> 10; F15 = (100*X60+1019*X4) >> 10; F16 = G16+G17; F17 = G16-G17; F18 = G19-G18; F19 = G19+G18; F20 = G20+G21; F21 = G20-G21; F22 = G23-G22; F23 = G23+G22; F24 = G24+G25; F25 = G24-G25; F26 = G27-G26; F27 = G27+G26; F28 = G28+G29; F29 = G28-G29; F30 = G31-G30; F31 = G31+G30; F33 = (100*G62-1019*G33) >> 10; F34 = (-1019*G61-100*G34) >> 10; F37 = (792*G58-650*G37) >> 10; F38 = (-650*G57-792*G38) >> 10; F41 = (483*G54-903*G41) >> 10; F42 = (-903*G53-483*G42) >> 10; F45 = (980*G50-297*G45) >> 10; F46 = (-297*G49-980*G46) >> 10; F49 = (980*G49-297*G46) >> 10; F50 = (297*G50+980*G45) >> 10; F53 = (483*G53-903*G42) >> 10; F54 = (903*G54+483*G41) >> 10; F57 = (792*G57-650*G38) >> 10; F58 = (650*G58+792*G37) >> 10; F61 = (100*G61-1019*G34) >> 10; F62 = (1019*G62+100*G33) >> 10
E4 = (200*X8-1004*X56) >> 10; E5 = (851*X40-569*X24) >> 10; E6 = (851*X24+569*X40) >> 10; E7 = (200*X56+1004*X8) >> 10; E8 = F8+F9; E9 = F8-F9; E10 = F11-F10; E11 = F11+F10; E12 = F12+F13; E13 = F12-F13; E14 = F15-F14; E15 = F15+F14; E17 = (200*F30-1004*F17) >> 10; E18 = (-1004*F29-200*F18) >> 10; E21 = (851*F26-569*F21) >> 10; E22 = (-569*F25-851*F22) >> 10; E25 = (851*F25-569*F22) >> 10; E26 = (569*F26+851*F21) >> 10; E29 = (200*F29-1004*F18) >> 10; E30 = (1004*F30+200*F17) >> 10; E32 = G32+G35; E33 = F33+F34; E34 = F33-F34; E35 = G32-G35; E36 = G39-G36; E37 = F38-F37; E38 = F38+F37; E39 = G39+G36; E40 = G40+G43; E41 = F41+F42; E42 = F41-F42; E43 = G40-G43; E44 = G47-G44; E45 = F46-F45; E46 = F46+F45; E47 = G47+G44; E48 = G48+G51; E49 = F49+F50; E50 = F49-F50; E51 = G48-G51; E52 = G55-G52; E53 = F54-F53; E54 = F54+F53; E55 = G55+G52; E56 = G56+G59; E57 = F57+F58; E58 = F57-F58; E59 = G56-G59; E60 = G63-G60; E61 = F62-F61; E62 = F62+F61;E63 = G63+G60
D0 = (724*(X0+X32)) >> 10; D1 = (724*(X0-X32)) >> 10; D2 = (392*X16-946*X48) >> 10; D3 = (946*X16+392*X48) >> 10; D4 = E4+E5; D5 = E4-E5; D6 = E7-E6; D7 = E7+E6; D9 = (392*E14-946*E9) >> 10; D10 = (-946*E13-392*E10) >> 10; D13 = (392*E13-946*E10) >> 10; D14 = (946*E14+392*E9) >> 10; D16 = F16+F19; D19 = F16-F19; D20 = F23-F20; D23 = F23+F20; D24 = F24+F27; D27 = F24-F27; D28 = F31-F28; D31 = F31+F28; D17 = E17+E18; D18 = E17-E18; D21 = E22-E21; D22 = E22+E21; D25 = E25+E26; D26 = E25-E26; D29 = E30-E29; D30 = E30+E29; D34 = (200*E61-1004*E34) >> 10; D35 = (200*E60-1004*E35) >> 10; D36 = (-1004*E59-200*E36) >> 10; D37 = (-1004*E58-200*E37) >> 10; D42 = (851*E53-569*E42) >> 10; D43 = (851*E52-569*E43) >> 10; D44 = (-569*E51-851*E44) >> 10; D45 = (-569*E50-851*E45) >> 10; D50 = (851*E50-569*E45) >> 10; D51 = (851*E51-569*E44) >> 10; D52 = (569*E52+851*E43) >> 10; D53 = (569*E53+851*E42) >> 10; D58 = (200*E58-1004*E37) >> 10; D59 = (200*E59-1004*E36) >> 10; D60 = (1004*E60+200*E35) >> 10; D61 = (1004*E61+200*E34) >> 10;
C0 = D0+D3; C3 = D0-D3; C8 = E8+E11; C11 = E8-E11; C12 = E15-E12; C15 = E15+E12; C1 = D1+D2; C2 = D1-D2; C9 = D9+D10; C10 = D9-D10; C13 = D14-D13; C14 = D14+D13; C5 = (724*(D6-D5)) >> 10; C6 = (724*(D6+D5)) >> 10; C18 = (392*D29-946*D18) >> 10; C20 = (-946*D27-392*D20) >> 10; C26 = (-946*D21+392*D26) >> 10; C28 = (392*D19+946*D28) >> 10; C19 = (392*D28-946*D19) >> 10; C21 = (-946*D26-392*D21) >> 10; C27 = (-946*D20+392*D27) >> 10; C29 = (392*D18+946*D29) >> 10; C32 = E32+E39; C39 = E32-E39; C40 = E47-E40; C47 = E47+E40; C48 = E48+E55; C55 = E48-E55; C56 = E63-E56; C63 = E63+E56; C33 = E33+E38; C38 = E33-E38; C41 = E46-E41; C46 = E46+E41; C49 = E49+E54; C54 = E49-E54; C57 = E62-E57; C62 = E62+E57; C34 = D34+D37; C37 = D34-D37; C42 = D45-D42; C45 = D45+D42; C50 = D50+D53; C53 = D50-D53; C58 = D61-D58; C61 = D61+D58; C35 = D35+D36; C36 = D35-D36; C43 = D44-D43; C44 = D44+D43; C51 = D51+D52; C52 = D51-D52; C59 = D60-D59; C60 = D60+D59;
B0 = C0+D7; B7 = C0-D7; B1 = C1+C6; B6 = C1-C6; B2 = C2+C5; B5 = C2-C5; B3 = C3+D4; B4 = C3-D4; B10 = (724*(C13-C10)) >> 10; B13 = (724*(C13+C10)) >> 10; B11 = (724*(C12-C11)) >> 10; B12 = (724*(C12+C11)) >> 10; B16 = D16+D23; B23 = D16-D23; B24 = D31-D24; B31 = D31+D24; B17 = D17+D22; B22 = D17-D22; B25 = D30-D25; B30 = D30+D25; B18 = C18+C21; B21 = C18-C21; B26 = C29-C26; B29 = C29+C26; B19 = C19+C20; B20 = C19-C20; B27 = C28-C27; B28 = C28+C27; B36 = (392*C59-946*C36) >> 10; B40 = (-946*C55-392*C40) >> 10; B52 = (-946*C43+392*C52) >> 10; B56 = (392*C39+946*C56) >> 10; B37 = (392*C58-946*C37) >> 10; B41 = (-946*C54-392*C41) >> 10; B53 = (-946*C42+392*C53) >> 10; B57 = (392*C38+946*C57) >> 10; B38 = (392*C57-946*C38) >> 10; B42 = (-946*C53-392*C42) >> 10; B54 = (-946*C41+392*C54) >> 10; B58 = (392*C37+946*C58) >> 10; B39 = (392*C56-946*C39) >> 10; B43 = (-946*C52-392*C43) >> 10; B55 = (-946*C40+392*C55) >> 10; B59 = (392*C36+946*C59) >> 10
A0 = B0+C15; A15 = B0-C15; A1 = B1+C14; A14 = B1-C14; A2 = B2+B13; A13 = B2-B13; A3 = B3+B12; A12 = B3-B12; A4 = B4+B11; A11 = B4-B11; A5 = B5+B10; A10 = B5-B10; A6 = B6+C9; A9 = B6-C9; A7 = B7+C8; A8 = B7-C8; A20 = (724*(B27-B20)) >> 10; A27 = (724*(B27+B20)) >> 10; A21 = (724*(B26-B21)) >> 10; A26 = (724*(B26+B21)) >> 10; A22 = (724*(B25-B22)) >> 10; A25 = (724*(B25+B22)) >> 10; A23 = (724*(B24-B23)) >> 10; A24 = (724*(B24+B23)) >> 10; A32 = C32+C47; A47 = C32-C47; A48 = C63-C48; A63 = C63+C48; A33 = C33+C46; A46 = C33-C46; A49 = C62-C49; A62 = C62+C49; A34 = C34+C45; A45 = C34-C45; A50 = C61-C50; A61 = C61+C50; A35 = C35+C44; A44 = C35-C44; A51 = C60-C51; A60 = C60+C51; A36 = B36+B43; A43 = B36-B43; A52 = B59-B52; A59 = B59+B52; A37 = B37+B42; A42 = B37-B42; A53 = B58-B53; A58 = B58+B53; A38 = B38+B41; A41 = B38-B41; A54 = B57-B54; A57 = B57+B54; A39 = B39+B40; A40 = B39-B40; A55 = B56-B55; A56 = B56+B55;
O0 = A0+B31; O31 = A0-B31; O1 = A1+B30; O30 = A1-B30; O2 = A2+B29; O29 = A2-B29; O3 = A3+B28; O28 = A3-B28; O4 = A4+A27; O27 = A4-A27; O5 = A5+A26; O26 = A5-A26; O6 = A6+A25; O25 = A6-A25; O7 = A7+A24; O24 = A7-A24; O8 = A8+A23; O23 = A8-A23; O9 = A9+A22; O22 = A9-A22; O10 = A10+A21; O21 = A10-A21; O11 = A11+A20; O20 = A11-A20; O12 = A12+B19; O19 = A12-B19; O13 = A13+B18; O18 = A13-B18; O14 = A14+B17; O17 = A14-B17; O15 = A15+B16; O16 = A15-B16; O40 = (724*(A55-A40)) >> 10; O55 = (724*(A55+A40)) >> 10; O41 = (724*(A54-A41)) >> 10; O54 = (724*(A54+A41)) >> 10; O42 = (724*(A53-A42)) >> 10; O53 = (724*(A53+A42)) >> 10; O43 = (724*(A52-A43)) >> 10; O52 = (724*(A52+A43)) >> 10; O44 = (724*(A51-A44)) >> 10; O51 = (724*(A51+A44)) >> 10; O45 = (724*(A50-A45)) >> 10; O50 = (724*(A50+A45)) >> 10; O46 = (724*(A49-A46)) >> 10; O49 = (724*(A49+A46)) >> 10; O47 = (724*(A48-A47)) >> 10; O48 = (724*(A48+A47)) >> 10;
Y0 = O0+A63; Y63 = O0-A63; Y1 = O1+A62; Y62 = O1-A62; Y2 = O2+A61; Y61 = O2-A61; Y3 = O3+A60; Y60 = O3-A60; Y4 = O4+A59; Y59 = O4-A59; Y5 = O5+A58; Y58 = O5-A58; Y6 = O6+A57; Y57 = O6-A57; Y7 = O7+A56; Y56 = O7-A56; Y8 =O8+O55; Y55 = O8-O55; Y9 = O9+O54; Y54 = O9-O54; Y10 = O10+O53; Y53 = O10-O53; Y11 = O11+O52; Y52 = O11-O52; Y12 = O12+O51; Y51 = O12-O51; Y13 = O13+O50; Y50 = O13-O50; Y14 = O14+O49; Y49 = O14-O49; Y15 = O15+O48; Y48 = O15-O48; Y16 = O16+O47; Y47 = O16-O47; Y17 = O17+O46; Y46 = O17-O46; Y18 = O18+O45; Y45 = O18-O45; Y19 = O19+O44; Y44 = O19-O44; Y20 = O20+O43; Y43 = O20-O43; Y21 = O21+O42; Y42 = O21-O42; Y22 = O22+O41; Y41 = O22-O41; Y23 = O23+O40; Y40 = O23-O40; Y24 = O24+A39; Y39 = O24-A39; Y25 = O25+A38; Y38 = O25-A38; Y26 = O26+A37; Y37 = O26-A37; Y27 = O27+A36; Y36 = O27-A36; Y28 = O28+A35; Y35 = O28-A35; Y29 = O29+A34; Y34 = O29-A34; Y30 = O30+A33; Y33 = O30-A33; Y31 = O31+A32; Y32 = O31-A32
전술한 도 3의 단계 350과 유사하게, 이산 코사인 변환에 이용되는 원래의 NxN 변환 행렬(Original_A)과 치환된 삼각함수 값을 이용한 수학식 1 내지 2의 변환 행렬(F16, F32) 사이의 차이값을 보정하기 위한 스케일링 행렬 및 시프트 연산을 적용하여 NxN 크기의 블록을 변환한 변환 블록에 대한 양자화를 수행할 수 있다.
본 발명의 또 다른 실시예에 따라서 16x16 블록의 변환시에 이용되는 양자화 파라메터(QP)에 따른 스케일링 행렬(MF)의 예는 전술한 도 7과 같다.
32x32 블록에 적용되는 양자화 파라메터(QP)에 따른 스케일링 행렬(MF)은 도 9 내지 도 14와 같다. 64x64 블록에 적용되는 양자화 파라메터(QP)에 따른 스케일링 행렬(MF)는 다음과 같이 정의될 수 있다.
< 64x64 입력 블록에 대한 스케일링 행렬(MF)의 예>
m = 11 일 때, Q0 = 102*ONES / Q1 = 93*ONES / Q2 = 79*ONES / Q3 = 73*ONES / Q4 = 64*ONES / Q5 = 57*ONES
m = 10 일 때, Q0 = 51*ONES / Q1 = 47*ONES / Q2 = 39*ONES /
Q3 = 37*ONES / Q4 = 32*ONES / Q5 = 28*ONES
m = 9일 때, Q0 = 26*ONES / Q1 = 23*ONES / Q2 = 20*ONES /
Q3 = 18*ONES / Q4 = 16*ONES / Q5 = 14*ONES
상기 예에서 Q#의 #값은 (QP mod 6)이며, ONES는 모든 원소가 1인 64x64 행렬을 나타낸다.
전술한 본 발명의 일 실시예와 유사하게 역양자화 단계에서는 이산 코사인 역변환에 이용되는 원래의 NxN 역변환 행렬과 치환된 NxN 변환 행렬의 역행렬인 NxN 역변환 행렬 사이의 차이값을 보정하기 위한 역스케일링 행렬 및 시프트 연산을 적용하여 역양자화를 수행한다.
16x16 블록에 적용되는 양자화 파라메터(QP)에 따른 역스케일링 행렬(V)은 도 8과 같다. 유사하게, 32x32 입력 블록 및 64x64 블록에 적용되는 양자화 파라메터에 따른 역스케일링 행렬(V)도 전술한 16x16 블록에 적용되는 역스케일링 행렬(V) 계산 과정과 유사한 과정을 통해 획득될 수 있다. 도 101a 내지 도 101f는 본 발명의 또 다른 실시예에 따라서 32x32 블록에 적용되는 양자화 파라메터(QP)에 따른 역스케일링 행렬(V)의 예를 도시한다.
64x64 블록에 적용되는 양자화 파라메터(QP)에 따른 역스케일링 행렬(V)는 다음과 같이 정의될 수 있다.
< 64x64 입력 블록에 대한 역스케일링 행렬(V)의 예>
n = 11 일 때, Q0 = 40*ONES / Q1 = 44*ONES / Q2 = 52*ONES / Q3 = 56*ONES / Q4 = 64*ONES / Q5 = 72*ONES
n = 10 일 때, Q0 = 20*ONES / Q1 = 22*ONES / Q2 = 26*ONES /
Q3 = 28*ONES / Q4 = 32*ONES / Q5 = 36*ONES
n = 9일 때, Q0 = 10*ONES / Q1 = 11*ONES / Q2 = 13*ONES /
Q3 = 14*ONES / Q4 = 16*ONES / Q5 = 18*ONES
상기 예에서 Q#의 #값은 (QP mod 6)의 값이며, ONES는 모든 원소가 1인 64x64 행렬을 나타낸다.
전술한 16x16, 32x32, 64x64의 변환 및 역변환 과정은 곱셈을 포함하지 않는 형태로 변경될 수 있다. 구체적으로, 각 변환 과정은 분모가 2의 거듭 제곱꼴인 유리수(dyadic rational)와 중간값들의 곱으로 표현된다. 분모가 2의 거듭 제곱꼴인 유리수(dyadic rational) 형태의 상수를, 분자가 1인 분수들만의 덧셈 및 뺄셈의 형태로 분해하면 곱셈 연산 없이, 덧셈, 뺄셈 및 쉬프트 연산만으로 해당 연산이 수행될 수 있다. 또한, 분해시에 항의 개수가 최소가 되도록 하면 덧셈, 뺄셈 및 쉬프트 연산의 수를 줄일 수 있다. 예를 들어, 분모가 2의 거듭 제곱꼴인 유리수(dyadic rational)의 하나인 59/64는 (1-1/16-1/64)로 변경될 수 있다. 이러한 59/64를 소정의 중간값 x와 곱하는 연산, 즉 (59/64)*x=(59*x)/64이고 64는 2^6이기 때문에 (59*x)/64는 (59*x)>>6을 계산하는 것과 같다. 상기 59/64는 (1-1/16-1/64)로 분해될 수 있기 때문에, (59*x)>>6는 (x-(x>>4)-(x>>6))으로 변경될 수 있다. 이와 같은 경우 (59*x)/64를 계산하기 위해서 원래 곱셈 1번, 쉬프트 연산이 1번 필요했다면 (x-x>>4-x>>6)을 계산시에는 뺄셈 2번, 쉬프트 연산 2번이 필요하게 되므로 복잡도가 큰 곱셈 연산의 횟수를 줄일 수 있다.
따라서, 본 발명에서는 변환 및 역변환에 이용되는 각 곱셈 연산을 다음의 표들에 도시된 바와 같은 연산으로 대체하여 변환 및 연산을 수행할 수 있다. 도 102a는 16x16 변환에 이용되는 곱셈의 대체 연산 과정, 도 102b는 32x32 변환에 이용되는 곱셈의 대체 연산 과정, 도 102c는 64x64 변환에 이용되는 곱셈의 대체 연산 과정을 나타낸다. 일 예로, 도 102a에서 첫 번째 표시된 63*x와 같은 연산은 (X<<6)-x와 같이 곱셈 연산을 쉬프트 연산 및 뺄셈 연산만으로 대체된다. 이와 같이 본 발명에서는 하드웨어에 큰 연산량을 요구하는 곱셈 연산을 쉬프트 연산으로 대체함으로써 변환 및 역변환의 성능 저하없이 연산의 복잡도를 감소시킨다.
한편, 전술한 바와 같이 곱셈 연산을 쉬프트 연산으로 대체하는 과정은 변환 및 역변환에 이용되는 값의 분모(denominator)를 고려하여 추가적인 연산을 줄일 수 있다. 예를 들어, 3/4*x와 같은 값을 연산할 때, 3/4*x은 ((x<<1)+x)>>2와 같은 연산으로 대체될 수 있으므로, 2번의 쉬프트 연산과 1번의 덧셈 연산을 요구한다. 이러한 연산은 약간의 오차를 고려하여 다음의 수학식; (x-(x>>2))과 같이 대체될 수 있다. 이와 같이 대체된 경우에는 1번의 뺄셈 연산과 1번의 쉬프트 연산만을 이용하므로, 1번의 쉬프트 연산이 줄어들게 된다. 따라서, 본 발명에서는 도 102a 내지 102c에 도시된 곱셈의 대체 연산 과정을 도 103a 내지 도 103c에 도시된 바와 같이 연산에 이용되는 분모값을 고려하여 추가적으로 대체할 수 있다.
도 103a 내지 도 103c에 도시된 곱셈의 대체 연산 과정을 이용하여, 전술한 본 발명의 또 다른 실시예에 따른 변환 및 역변환 과정은 다음과 같은 연산 과정을 통해 수행될 수 있다.
N이 16인 경우, 즉 16x16 입력 블록에 대하여 치환된 삼각 함수값을 이용한 수학식 1의 1차원 이산 코사인 변환을 수행하는 단계는, X0 내지 X15은 변환되어야 할 입력값, B0 내지 B15, C0 내지 C15, D0 내지 D15, E0 내지 E15, F0 내지 F15, G0 내지 G15은 중간값, Y0 내지 Y15은 변환된 값을 나타낸다고 할 때, 다음의 연산 과정과 같이 표현될 수 있다.
B0 = x0 + x15; B15 = x0 - x15; B1 = x1 + x14; B14 = x1 - x14; B2 = x2 + x13; B13 = x2 - x13; B3 = x3 + x12; B12 = x3 - x12; B4 = x4 + x11; B11 = x4 - x11; B5 = x5 + x10; B10 = x5 - x10; B6 = x6 + x9; B9 = x6 - x9; B7 = x7 + x8; B8 = x7 - x8;
C0 = B0 + B7; C7 = B0 - B7; C1 = B1 + B6; C6 = B1 - B6; C2 = B2 + B5; C5 = B2 - B5; C3 = B3 + B4; C4 = B3 - B4; itmp = ( B13 - B10 ); C10 = itmp - (itmp >> 2) - (itmp >> 5) - (itmp >> 6) ; itmp = ( B13 + B10 ); C13 = itmp - (itmp >> 2) - (itmp >> 5) - (itmp >> 6); itmp = ( B12 - B11 ); C11 = itmp - (itmp >> 2) - (itmp >> 5) - (itmp >> 6); itmp = ( B12 + B11 ); C12 = itmp - (itmp >> 2) - (itmp >> 5) - (itmp >> 6);
D0 = C0 + C3; D3 = C0 - C3; D8 = B8 + C11; D11 = B8 - C11; D12 = B15 - C12; D15 = B15 + C12; D1 = C1 + C2; D2 = C1 - C2; D9 = B9 + C10; D10 = B9 - C10; D13 = B14 - C13; D14 = B14 + C13; itmp = ( C6 - C5 ); D5 = itmp - (itmp >> 2) - (itmp >> 5) - (itmp >> 6); itmp = ( C6 + C5 ); D6 = itmp - (itmp >> 2) - (itmp >> 5) - (itmp >> 6); itmp = ( D0 + D1 ); y0 = itmp - (itmp >> 2) - (itmp >> 5) - (itmp >> 6); itmp = ( D0 - D1 ); y8 = itmp - (itmp >> 2) - (itmp >> 5) - (itmp >> 6); y4 = D3 - (D3 >> 4) - (D3 >> 6) + (D2 >> 1) - (D2 >> 3) ; y12 = (D3 >> 1) - (D3 >> 3) - (D2 - (D2 >> 4) - (D2 >> 6));
E4 = C4 + D5; E5 = C4 - D5; E6 = C7 - D6; E7 = C7 + D6; E9 = (D14 >> 1) - (D14 >> 3) - (D9 - (D9 >> 4) - (D9 >> 6)); E10 = -(D13 - (D13 >> 4) - (D13 >> 6)) - ((D10 >> 1) - (D10 >> 3)); E13 = (D13 >> 1) - (D13 >> 3) - (D10 - (D10 >> 4) - (D10 >> 6)); E14 = D14 - (D14 >> 4) - (D14 >> 6) + (D9 >> 1) - (D9 >> 3) ;
y2 = (E4 >> 2) - (E4 >> 4) + (E7 - (E7 >> 5)); itmp = -E5 + E6; y10 = (E5 - (E5 >> 3)) + (E6 >> 1) + (itmp >> 5) + (itmp >> 6); itmp = E5 + E6; y6 = (E6 - (E6 >> 3)) - (E5 >> 1) - (itmp >> 5) - (itmp >> 6); y14 = (E7 >> 2) - (E7 >> 4) - (E4 - (E4 >> 5));
F8 = D8 + E9; F9 = D8 - E9; F10 = D11 - E10; F11 = D11 + E10; F12 = D12 + E13; F13 = D12 - E13; F14 = D15 - E14; F15 = D15 + E14;
y1 = ((F8 >> 4) + (F8 >> 5)) + (F15 - (F15 >> 6)); y9 = (F9 - (F9 >> 2) + (F9 >> 6)) + ((F14 >> 1) + (F14 >> 3)); y5 = ((F10 >> 1) - (F10 >> 5)) + (F13 - (F13 >> 3)); itmp = -F11 + F12; y13 = (F11 - (F11 >> 6)) + (F12 >> 2) + (itmp >> 5); itmp = F11 + F12; y3 = (F12 - (F12 >> 6)) - (F11 >> 2) - (itmp >> 5); y11 = ((F13 >> 1) - (F13 >> 5)) - (F10 - (F10 >> 3)); y7 = (F14 - (F14 >> 2) + (F14 >> 6)) - ((F9 >> 1) + (F9 >> 3));
이에 대응되는 16 포인트 역 이산 코사인 변환 과정은 다음의 연산 과정과 같이 표현된다. 다음의 연산 과정에서 Y0 내지 Y15은 역변환되어야 할 입력값, B0 내지 B15, C0 내지 C15, D0 내지 D15, E0 내지 E15, F0 내지 F15, G0 내지 G15은 중간값, X0 내지 X15는 역변환된 값을 나타낸다.
F8 = ((y1 >> 4) + (y1 >> 5)) - (y15 - (y15 >> 6)); F9 = (y9 - (y9 >> 2) + (y9 >> 6)) - ((y7 >> 1) + (y7 >> 3)); F10 = ((y5 >> 1) - (y5 >> 5)) - (y11 - (y11 >> 3)); itmp = y13 + y3; F11 = (y13 - (y13 >> 6)) - (y3 >> 2) - (itmp >> 5); itmp = y13 - y3; F12 = (y3 - (y3 >> 6)) + (y13 >> 2) + (itmp >> 5); F13 = ((y11 >> 1) - (y11 >> 5)) + (y5 - (y5 >> 3)); F14 = (y7 - (y7 >> 2) + (y7 >> 6)) + ((y9 >> 1) + (y9 >> 3)); F15 =((y15 >> 4) + (y15 >> 5)) + (y1 - (y1 >> 6));
E4 = (y2 >> 2) - (y2 >> 4) - (y14 - (y14 >> 5)); itmp = y10 + y6; E5 = (y10 - (y10 >> 3)) - (y6 >> 1) - (itmp >> 5) - (itmp >> 6); itmp = y10 - y6; E6 = (y6 - (y6 >> 3) ) + (y10 >> 1) + (itmp >> 5) + (itmp >> 6); E7 = (y14 >> 2) - (y14 >> 4) + (y2 - (y2 >> 5)); E8 = F8 + F9; E9 = F8 - F9; E10 = F11 - F10; E11 = F11 + F10; E12 = F12 + F13; E13 = F12 - F13; E14 = F15 - F14; E15 = F15 + F14;
itmp = ( y0 + y8 ); D0 = itmp - (itmp >> 2) - (itmp >> 5) - (itmp >> 6); itmp = ( y0 - y8 ); D1 = itmp - (itmp >> 2) - (itmp >> 5) - (itmp >> 6); D2 =(y4 >> 1) - (y4 >> 3) - (y12 - (y12 >> 4) - (y12 >> 6)); D3 = y4 - (y4 >> 4) - (y4 >> 6) + (y12 >> 1) - (y12 >> 3) ; D4 = E4 + E5; D5 = E4 - E5; D6 = E7 - E6; D7 = E7 + E6; D9 = (E14 >> 1) - (E14 >> 3) - (E9 - (E9 >> 4) - (E9 >> 6)); D10 = -(E13 - (E13 >> 4) - (E13 >> 6)) - ((E10 >> 1) - (E10 >> 3)); D13 = (E13 >> 1) - (E13 >> 3) - (E10 - (E10 >> 4) - (E10 >> 6)); D14 = E14 - (E14 >> 4) - (E14 >> 6) + (E9 >> 1) - (E9 >> 3) ;
C0 = D0 + D3; C3 = D0 - D3; C8 = E8 + E11; C11 = E8 - E11; C12 = E15 - E12; C15 = E15 + E12; C1 = D1 + D2; C2 = D1 - D2; C9 = D9 + D10; C10 = D9 - D10; C13 = D14 - D13; C14 = D14 + D13; itmp = ( D6 - D5 ); C5 = itmp - (itmp >> 2) - (itmp >> 5) - (itmp >> 6); itmp = ( D6 + D5 ); C6 = itmp - (itmp >> 2) - (itmp >> 5) - (itmp >> 6);
B0 = C0 + D7; B7 = C0 - D7; B1 = C1 + C6; B6 = C1 - C6; B2 = C2 + C5; B5 = C2 - C5; B3 = C3 + D4; B4 = C3 - D4; itmp = ( C13 - C10 ); B10 = itmp - (itmp >> 2) - (itmp >> 5) - (itmp >> 6); itmp = ( C13 + C10 ); B13 = itmp - (itmp >> 2) - (itmp >> 5) - (itmp >> 6); itmp = ( C12 - C11 ); B11 = itmp - (itmp >> 2) - (itmp >> 5) - (itmp >> 6); itmp = ( C12 + C11 ); B12 = itmp - (itmp >> 2) - (itmp >> 5) - (itmp >> 6);
x0 = B0 + C15; x15 = B0 - C15; x1 = B1 + C14; x14 = B1 - C14; x2 = B2 + B13; x13 = B2 - B13; x3 = B3 + B12; x12 = B3 - B12; x4 = B4 + B11; x11 = B4 - B11; x5 = B5 + B10; x10 = B5 - B10; x6 = B6 + C9; x9 = B6 - C9; x7 = B7 + C8; x8 = B7 - C8;
도 103a 내지 도 103c에 도시된 곱셈의 대체 연산 과정을 이용하여, N이 32인 경우, 즉 32x32 입력 블록에 대하여 치환된 삼각 함수값을 이용한 수학식 2의 1차원 이산 코사인 변환을 수행하는 단계는, X0 내지 X31은 변환되어야 할 입력값, A0 내지 G31은 중간값, Y0 내지 Y31은 변환된 값을 나타낸다고 할 때, 다음의 연산 과정과 같이 표현될 수 있다.
A0 = x0 + x31; A31 = x0 - x31; A1 = x1 + x30; A30 = x1 - x30; A2 = x2 + x29; A29 = x2 - x29; A3 = x3 + x28; A28 = x3 - x28; A4 = x4 + x27; A27 = x4 - x27; A5 = x5 + x26; A26 = x5 - x26; A6 = x6 + x25; A25 = x6 - x25; A7 = x7 + x24; A24 = x7 - x24; A8 = x8 + x23; A23 = x8 - x23; A9 = x9 + x22; A22 = x9 - x22; A10 = x10 + x21; A21 = x10 - x21; A11 = x11 + x20; A20 = x11 - x20; A12 = x12 + x19; A19 = x12 - x19; A13 = x13 + x18; A18 = x13 - x18; A14 = x14 + x17; A17 = x14 - x17; A15 = x15 + x16; A16 = x15 - x16;
B0 = A0 + A15; B15 = A0 - A15; B1 = A1 + A14; B14 = A1 - A14; B2 = A2 + A13; B13 = A2 - A13; B3 = A3 + A12; B12 = A3 - A12; B4 = A4 + A11; B11 = A4 - A11; B5 = A5 + A10; B10 = A5 - A10; B6 = A6 + A9; B9 = A6 - A9; B7 = A7 + A8; B8 = A7 - A8; itmp = ( A27 - A20 ); B20 = (itmp >> 1) + (itmp >> 3) + (itmp >> 4) + (itmp >> 6) + (itmp >> 8); itmp = ( A27 + A20 ); B27 = (itmp >> 1) + (itmp >> 3) + (itmp >> 4) + (itmp >> 6) + (itmp >> 8); itmp = ( A26 - A21 ); B21 = (itmp >> 1) + (itmp >> 3) + (itmp >> 4) + (itmp >> 6) + (itmp >> 8); itmp = ( A26 + A21 ); B26 = (itmp >> 1) + (itmp >> 3) + (itmp >> 4) + (itmp >> 6) + (itmp >> 8); itmp = ( A25 - A22 ); B22 = (itmp >> 1) + (itmp >> 3) + (itmp >> 4) + (itmp >> 6) + (itmp >> 8); itmp = ( A25 + A22 ); B25 = (itmp >> 1) + (itmp >> 3) + (itmp >> 4) + (itmp >> 6) + (itmp >> 8); itmp = ( A24 - A23 ); B23 = (itmp >> 1) + (itmp >> 3) + (itmp >> 4) + (itmp >> 6) + (itmp >> 8); itmp = ( A24 + A23 ); B24 = (itmp >> 1) + (itmp >> 3) + (itmp >> 4) + (itmp >> 6) + (itmp >> 8);
C0 = B0 + B7; C7 = B0 - B7; C1 = B1 + B6; C6 = B1 - B6; C2 = B2 + B5; C5 = B2 - B5; C3 = B3 + B4; C4 = B3 - B4; itmp = ( B13 - B10 ); C10 = (itmp >> 1) + (itmp >> 3) + (itmp >> 4) + (itmp >> 6) + (itmp >> 8); itmp = ( B13 + B10 ); C13 = (itmp >> 1) + (itmp >> 3) + (itmp >> 4) + (itmp >> 6) + (itmp >> 8); itmp = ( B12 - B11 ); C11 = (itmp >> 1) + (itmp >> 3) + (itmp >> 4) + (itmp >> 6) + (itmp >> 8); itmp = ( B12 + B11 ); C12 = (itmp >> 1) + (itmp >> 3) + (itmp >> 4) + (itmp >> 6) + (itmp >> 8); C16 = A16 + B23; C23 = A16 - B23; C24 = A31 - B24; C31 = A31 + B24; C17 = A17 + B22; C22 = A17 - B22; C25 = A30 - B25; C30 = A30 + B25; C18 = A18 + B21; C21 = A18 - B21; C26 = A29 - B26; C29 = A29 + B26; C19 = A19 + B20; C20 = A19 - B20; C27 = A28 - B27; C28 = A28 + B27;
D0 = C0 + C3; D3 = C0 - C3; D8 = B8 + C11; D11 = B8 - C11; D12 = B15 - C12; D15 = B15 + C12; D1 = C1 + C2; D2 = C1 - C2; D9 = B9 + C10; D10 = B9 - C10; D13 = B14 - C13; D14 = B14 + C13; itmp = ( C6 - C5 ); D5 = (itmp >> 1) + (itmp >> 3) + (itmp >> 4) + (itmp >> 6) + (itmp >> 8); itmp = ( C6 + C5 ); D6 = (itmp >> 1) + (itmp >> 3) + (itmp >> 4) + (itmp >> 6) + (itmp >> 8); D18 = (C29 >> 2) + (C29 >> 3) + (C29 >> 8) - (C18 - (C18 >> 4) - (C18 >> 6)); D20 = - (C27 - (C27 >> 4) - (C27 >> 6)) - ((C20 >> 2) + (C20 >> 3) + (C20 >> 8)); D26 = - (C21 - (C21 >> 4) - (C21 >> 6)) + ((C26 >> 2) + (C26 >> 3) + (C26 >> 8)); D28 = (C19 >> 2) + (C19 >> 3) + (C19 >> 8) + (C28 - (C28 >> 4) - (C28 >> 6)); D19 = (C28 >> 2) + (C28 >> 3) + (C28 >> 8) - (C19 - (C19 >> 4) - (C19 >> 6)); D21 = - (C26 - (C26 >> 4) - (C26 >> 6)) - ((C21 >> 2) + (C21 >> 3) + (C21 >> 8)); D27 = - (C20 - (C20 >> 4) - (C20 >> 6)) + ((C27 >> 2) + (C27 >> 3) + (C27 >> 8)); D29 = (C18 >> 2) + (C18 >> 3) + (C18 >> 8) + (C29 - (C29 >> 4) - (C29 >> 6));
itmp = ( D0 + D1 ); y0 = (itmp >> 1) + (itmp >> 3) + (itmp >> 4) + (itmp >> 6) + (itmp >> 8); itmp = ( D0 - D1 ); y16 = (itmp >> 1) + (itmp >> 3) + (itmp >> 4) + (itmp >> 6) + (itmp >> 8); y8 = (D3 - (D3 >> 4) - (D3 >> 6)) + ((D2 >> 2) + (D2 >> 3) + (D2 >> 8)); y24 = (D3 >> 2) + (D3 >> 3) + (D3 >> 8) - (D2 - (D2 >> 4) - (D2 >> 6));
E4 = C4 + D5; E5 = C4 - D5; E6 = C7 - D6; E7 = C7 + D6; E9 = (D14 >> 2) + (D14 >> 3) + (D14 >> 8) - (D9 - (D9 >> 4) - (D9 >> 6)); E10 = -(D13 - (D13 >> 4) - (D13 >> 6)) - ((D10 >> 2) + (D10 >> 3) + (D10 >> 8)); E13 = (D13 >> 2) + (D13 >> 3) + (D13 >> 8) - (D10 - (D10 >> 4) - (D10 >> 6)); E14 = (D14 - (D14 >> 4) - (D14 >> 6)) + ((D9 >> 2) + (D9 >> 3) + (D9 >> 8)); E16 = C16 + D19; E19 = C16 - D19; E20 = C23 - D20; E23 = C23 + D20; E24 = C24 + D27; E27 = C24 - D27; E28 = C31 - D28; E31 = C31 + D28; E17 = C17 + D18; E18 = C17 - D18; E21 = C22 - D21; E22 = C22 + D21; E25 = C25 + D26; E26 = C25 - D26; E29 = C30 - D29; E30 = C30 + D29; y4 = ((E4 >> 3) + (E4 >> 4) + (E4 >> 8)) + (E7 - (E7 >> 6) - (E7 >> 8)); itmp = E5 + E6; y20 = ((E5 >> 1) + (E5 >> 2) + (E5 >> 4) ) + (itmp >> 6) + ((E6 >> 1) + (E6 >> 5) + (E6 >> 7)); itmp = E6 -E5; y12 = ((E6 >> 1) + (E6 >> 2) + (E6 >> 4) ) + (itmp >> 6) - ((E5 >> 1) + (E5 >> 5) + (E5 >> 7)); y28 = ((E7 >> 3) + (E7 >> 4) + (E7 >> 8)) - (E4 - (E4 >> 6) - (E4 >> 8));
F8 = D8 + E9; F9 = D8 - E9; F10 = D11 - E10; F11 = D11 + E10; F12 = D12 + E13; F13 = D12 - E13; F14 = D15 - E14; F15 = D15 + E14; itmp = E30 + E17; F17 = (itmp >> 4) + ((E30 >> 3) + (E30 >> 8)) - (E17 - (E17 >> 6) ); itmp = E29 -E18; F18 = - (E29 - (E29 >> 6) ) - ((E18 >> 3) + (E18 >> 4)) + (itmp >> 8) ; itmp = E26 - E21; F21 = (itmp >> 1) + (itmp >> 6) + ( (E26 >> 2) + (E26 >> 4) ) - ( (E21 >> 5) + (E21 >> 7)); itmp = E25 + E22; F22 = - (itmp >> 1) - (itmp >> 6) - ((E25 >> 5) + (E25 >> 7)) - ( (E22 >> 2) + (E22 >> 4) ); itmp = E25 -E22; F25 = (itmp >> 1) + (itmp >> 6) + ((E25 >> 2) + (E25 >> 4)) - ((E22 >> 5) + (E22 >> 7)); itmp = E26 + E21; F26 = (itmp >> 1) + (itmp >> 6) + ( (E26 >> 5) + (E26 >> 7)) + ( (E21 >> 2) + (E21 >> 4) ); itmp = E29 + E18; F29 = (itmp >> 8) + ((E29 >> 3) + (E29 >> 4) ) - (E18 - (E18 >> 6)); itmp = -E30 + E17; F30 = (itmp >> 8) + (E30 - (E30 >> 6) ) + ((E17 >> 3) + (E17 >> 4) );
y2 = ((F8 >> 4) + (F8 >> 5) + (F8 >> 8)) + (F15 - (F15 >> 7)); itmp = F9 + F14; y18 = (itmp >> 1) + ( (F9 >> 2) + (F9 >> 6) + (F9 >> 8)) + ( (F14 >> 3) + (F14 >> 7)); itmp = F10 + F13; y10 = (itmp>> 1) - (F10 >> 5)) + ( (F13 >> 2) + (F13 >> 3) + (F13 >> 8)); itmp = -F11 + F12; y26 = (itmp >> 5) + (F11 - (F11 >> 6)) + ((F12 >> 2) + (F12 >> 7)); itmp = -F12 - F11; y6 = (itmp >> 5) + (F12 - (F12 >> 6)) - ((F11 >> 2) + (F11 >> 7)); itmp = F13 -F10; y22 = (itmp >> 1) -( (F13 >> 5)) - ( (F10 >> 2) + (F10 >> 3) + (F10 >> 8)); itmp = F14 -F9; y14 = (itmp >> 1) + ( (F14 >> 2) + (F14 >> 6) + (F14 >> 8)) - ( (F9 >> 3) + (F9 >> 7)); y30 = ((F15 >> 4) + (F15 >> 5) + (F15 >> 8)) - (F8 - (F8 >> 7));
G16 = E16 + F17; G17 = E16 - F17; G18 = E19 - F18; G19 = E19 + F18; G20 = E20 + F21; G21 = E20 - F21; G22 = E23 - F22; G23 = E23 + F22; G24 = E24 + F25; G25 = E24 - F25; G26 = E27 - F26; G27 = E27 + F26; G28 = E28 + F29; G29 = E28 - F29; G30 = E31 - F30; G31 = E31 + F30;
y1 = ((G16 >> 5) + (G16 >> 6)) + (G31 - (G31 >> 8)); itmp = -G17 + G30; y17 = (itmp >> 7) +(itmp >> 8) +(G17 - (G17 >> 2) ) + ((G30 >> 1) + (G30 >> 3) + (G30 >> 5) ); itmp = -G18 -G29; y9 = (itmp >> 4) + (itmp >> 8) + ((G18 >> 1) - (G18 >> 7) ) + (G29 - (G29 >> 5)); itmp = -G19 + G28; y25 = (itmp >> 6) + (itmp>> 7) +(G19 - (G19 >> 5) - (G19 >> 8)) + ((G28 >> 2) + (G28 >> 4) ); y5 = ((G20 >> 2) - (G20 >> 7)) + (G27 - (G27 >> 5)); itmp = -G21 + G26; y21 = (itmp >> 8) +(G21 - (G21 >> 3) - (G21 >> 6) ) + ((G26 >> 1) + (G26 >> 7) ); itmp = G22-G25; y13 = (itmp >> 4) + ((G22 >> 1) + (G22 >> 5)) + (G25 - (G25 >> 3) - (G25 >> 7)- (G25 >> 8)); itmp = -G23 + G24; y29 = (itmp >> 8) + (G23 - (G23 >> 7) ) + ((G24 >> 3) + (G24 >> 6)); itmp = -G23 -G24; y3 = (itmp >> 8) + (G24 - (G24 >> 7) ) - ((G23 >> 3) + (G23 >> 6) ); itmp = G25 + G22; y19 = (itmp >> 4) + ((G25 >> 1) + (G25 >> 5)) - (G22 - (G22 >> 3) - (G22 >> 7) - (G22 >> 8)); itmp = -G26- G21; y11 = (itmp >> 8) +(G26 - (G26 >> 3) - (G26 >> 6)) - ((G21 >> 1) + (G21 >> 7) ); y27 = ((G27 >> 2) - (G27 >> 7)) - (G20 - (G20 >> 5)); itmp = -G28 -G19; y7 = (itmp >> 6) + (itmp >> 7)+ (G28 - (G28 >> 5) - (G28 >> 8)) - ((G19 >> 2) + (G19 >> 4)); itmp = -G29 + G18; y23 = (itmp >> 4) +(itmp >> 8) +((G29 >> 1) - (G29 >> 7) ) - (G18 - (G18 >> 5) ); itmp = -G30 -G17; y15 = (itmp >> 7) + (itmp >> 8) + (G30 - (G30 >> 2)) - ((G17 >> 1) + (G17 >> 3) + (G17 >> 5)); y31 = ((G31 >> 5) + (G31 >> 6)) - (G16 - (G16 >> 8))
이에 대응되는 32 포인트 역 이산 코사인 변환 과정은 다음의 연산 과정과 같이 표현된다. 다음의 연산 과정에서 Y0 내지 Y31은 역변환되어야 할 입력값, A0 내지 G31은 중간값, X0 내지 X31은 역변환된 값을 나타낸다.
G16 = ((y1 >> 5) + (y1 >> 6)) - (y31 - (y31 >> 8)); G17 = (y17 - (y17 >> 2) - (y17 >> 7) - (y17 >> 8)) - ((y15 >> 1) + (y15 >> 3) + (y15 >> 5) + (y15 >> 7) + (y15 >> 8)); G18 = ((y9 >> 1) - (y9 >> 4) - (y9 >> 7) - (y9 >> 8)) - (y23 - (y23 >> 4) - (y23 >> 5) - (y23 >> 8)); G19 = (y25 - (y25 >> 5) - (y25 >> 6) - (y25 >> 7) - (y25 >> 8)) - ((y7 >> 2) + (y7 >> 4) + (y7 >> 6) + (y7 >> 7)); G20 = ((y5 >> 2) - (y5 >> 7)) - (y27 - (y27 >> 5)); G21 = (y21 - (y21 >> 3) - (y21 >> 6) - (y21 >> 8)) - ((y11 >> 1) + (y11 >> 7) + (y11 >> 8)); G22 = ((y13 >> 1) + (y13 >> 4) + (y13 >> 5)) - (y19 - (y19 >> 3) - (y19 >> 4) - (y19 >> 7) - (y19 >> 8)); G23 = (y29 - (y29 >> 7) - (y29 >> 8)) - ((y3 >> 3) + (y3 >> 6) + (y3 >> 8)); G24 = (y3 - (y3 >> 7) - (y3 >> 8)) + ((y29 >> 3) + (y29 >> 6) + (y29 >> 8)); G25 = ((y19 >> 1) + (y19 >> 4) + (y19 >> 5)) + (y13 - (y13 >> 3) - (y13 >> 4) - (y13 >> 7) - (y13 >> 8)); G26 = (y11 - (y11 >> 3) - (y11 >> 6) - (y11 >> 8)) + ((y21 >> 1) + (y21 >> 7) + (y21 >> 8)); G27 = ((y27 >> 2) - (y27 >> 7)) + (y5 - (y5 >> 5)); G28 = (y7 - (y7 >> 5) - (y7 >> 6) - (y7 >> 7) - (y7 >> 8)) + ((y25 >> 2) + (y25 >> 4) + (y25 >> 6) + (y25 >> 7)); G29 = ((y23 >> 1) - (y23 >> 4) - (y23 >> 7) - (y23 >> 8)) + (y9 - (y9 >> 4) - (y9 >> 5) - (y9 >> 8)); G30 = (y15 - (y15 >> 2) - (y15 >> 7) - (y15 >> 8)) + ((y17 >> 1) + (y17 >> 3) + (y17 >> 5) + (y17 >> 7) + (y17 >> 8)); G31 = ((y31 >> 5) + (y31 >> 6)) + (y1 - (y1 >> 8));
F8 = ((y2 >> 4) + (y2 >> 5) + (y2 >> 8)) - (y30 - (y30 >> 7)); F9 = ((y18 >> 1) + (y18 >> 2) + (y18 >> 6) + (y18 >> 8)) - ((y14 >> 1) + (y14 >> 3) + (y14 >> 7)); F10 = ((y10 >> 1) - (y10 >> 5)) - ((y22 >> 1) + (y22 >> 2) + (y22 >> 3) + (y22 >> 8)); F11 = (y26 - (y26 >> 5) - (y26 >> 6)) - ((y6 >> 2) + (y6 >> 5) + (y6 >> 7)); F12 = (y6 - (y6 >> 5) - (y6 >> 6)) + ((y26 >> 2) + (y26 >> 5) + (y26 >> 7)); F13 = ((y22 >> 1) - (y22 >> 5)) + ((y10 >> 1) + (y10 >> 2) + (y10 >> 3) + (y10 >> 8)); F14 = ((y14 >> 1) + (y14 >> 2) + (y14 >> 6) + (y14 >> 8)) + ((y18 >> 1) + (y18 >> 3) + (y18 >> 7)); F15 = ((y30 >> 4) + (y30 >> 5) + (y30 >> 8)) + (y2 - (y2 >> 7)); F16 = G16 + G17; F17 = G16 - G17; F18 = G19 - G18; F19 = G19 + G18; F20 = G20 + G21; F21 = G20 - G21; F22 = G23 - G22; F23 = G23 + G22; F24 = G24 + G25; F25 = G24 - G25; F26 = G27 - G26; F27 = G27 + G26; F28 = G28 + G29; F29 = G28 - G29; F30 = G31 - G30; F31 = G31 + G30;
E4 = ((y4 >> 3) + (y4 >> 4) + (y4 >> 8)) - (y28 - (y28 >> 6) - (y28 >> 8)); E5 = ((y20 >> 1) + (y20 >> 2) + (y20 >> 4) + (y20 >> 6)) - ((y12 >> 1) + (y12 >> 5) + (y12 >> 6) + (y12 >> 7)); E6 = ((y12 >> 1) + (y12 >> 2) + (y12 >> 4) + (y12 >> 6)) + ((y20 >> 1) + (y20 >> 5) + (y20 >> 6) + (y20 >> 7)); E7 = ((y28 >> 3) + (y28 >> 4) + (y28 >> 8)) + (y4 - (y4 >> 6) - (y4 >> 8)); E8 = F8 + F9; E9 = F8 - F9; E10 = F11 - F10; E11 = F11 + F10; E12 = F12 + F13; E13 = F12 - F13; E14 = F15 - F14; E15 = F15 + F14; E17 = ((F30 >> 3) + (F30 >> 4) + (F30 >> 8)) - (F17 - (F17 >> 6) - (F17 >> 8)); E18 = - (F29 - (F29 >> 6) - (F29 >> 8)) - ((F18 >> 3) + (F18 >> 4) + (F18 >> 8)); E21 = ((F26 >> 1) + (F26 >> 2) + (F26 >> 4) + (F26 >> 6)) - ((F21 >> 1) + (F21 >> 5) + (F21 >> 6) + (F21 >> 7)); E22 = - ((F25 >> 1) + (F25 >> 5) + (F25 >> 6) + (F25 >> 7)) - ((F22 >> 1) + (F22 >> 2) + (F22 >> 4) + (F22 >> 6)); E25 = ((F25 >> 1) + (F25 >> 2) + (F25 >> 4) + (F25 >> 6)) - ((F22 >> 1) + (F22 >> 5) + (F22 >> 6) + (F22 >> 7)); E26 = ((F26 >> 1) + (F26 >> 5) + (F26 >> 6) + (F26 >> 7)) + ((F21 >> 1) + (F21 >> 2) + (F21 >> 4) + (F21 >> 6)); E29 = ((F29 >> 3) + (F29 >> 4) + (F29 >> 8)) - (F18 - (F18 >> 6) - (F18 >> 8)); E30 = (F30 - (F30 >> 6) - (F30 >> 8)) + ((F17 >> 3) + (F17 >> 4) + (F17 >> 8));
iTmp = ( y0 + y16 ); D0 = (iTmp >> 1) + (iTmp >> 3) + (iTmp >> 4) + (iTmp >> 6) + (iTmp >> 8); iTmp = ( y0 - y16 ); D1 = (iTmp >> 1) + (iTmp >> 3) + (iTmp >> 4) + (iTmp >> 6) + (iTmp >> 8); D2 = (y8 >> 2) + (y8 >> 3) + (y8 >> 8) - (y24 - (y24 >> 4) - (y24 >> 6)); D3 = (y8 - (y8 >> 4) - (y8 >> 6)) + ((y24 >> 2) + (y24 >> 3) + (y24 >> 8)); D4 = E4 + E5; D5 = E4 - E5; D6 = E7 - E6; D7 = E7 + E6; D9 = (E14 >> 2) + (E14 >> 3) + (E14 >> 8) - (E9 - (E9 >> 4) - (E9 >> 6)); D10 = -(E13 - (E13 >> 4) - (E13 >> 6)) - ((E10 >> 2) + (E10 >> 3) + (E10 >> 8)); D13 = (E13 >> 2) + (E13 >> 3) + (E13 >> 8) - (E10 - (E10 >> 4) - (E10 >> 6)); D14 = (E14 - (E14 >> 4) - (E14 >> 6)) + ((E9 >> 2) + (E9 >> 3) + (E9 >> 8)); D16 = F16 + F19; D19 = F16 - F19; D20 = F23 - F20; D23 = F23 + F20; D24 = F24 + F27; D27 = F24 - F27; D28 = F31 - F28; D31 = F31 + F28; D17 = E17 + E18; D18 = E17 - E18; D21 = E22 - E21; D22 = E22 + E21; D25 = E25 + E26; D26 = E25 - E26; D29 = E30 - E29; D30 = E30 + E29;
C0 = D0 + D3; C3 = D0 - D3; C8 = E8 + E11; C11 = E8 - E11; C12 = E15 - E12; C15 = E15 + E12; C1 = D1 + D2; C2 = D1 - D2; C9 = D9 + D10; C10 = D9 - D10; C13 = D14 - D13; C14 = D14 + D13; iTmp = ( D6 - D5 ); C5 = (iTmp >> 1) + (iTmp >> 3) + (iTmp >> 4) + (iTmp >> 6) + (iTmp >> 8); iTmp = ( D6 + D5 ); C6 = (iTmp >> 1) + (iTmp >> 3) + (iTmp >> 4) + (iTmp >> 6) + (iTmp >> 8); C18 = (D29 >> 2) + (D29 >> 3) + (D29 >> 8) - (D18 - (D18 >> 4) - (D18 >> 6)); C20 = - (D27 - (D27 >> 4) - (D27 >> 6)) - ((D20 >> 2) + (D20 >> 3) + (D20 >> 8)); C26 = - (D21 - (D21 >> 4) - (D21 >> 6)) + ((D26 >> 2) + (D26 >> 3) + (D26 >> 8)); C28 = (D19 >> 2) + (D19 >> 3) + (D19 >> 8) + (D28 - (D28 >> 4) - (D28 >> 6)); C19 = (D28 >> 2) + (D28 >> 3) + (D28 >> 8) - (D19 - (D19 >> 4) - (D19 >> 6)); C21 = - (D26 - (D26 >> 4) - (D26 >> 6)) - ((D21 >> 2) + (D21 >> 3) + (D21 >> 8)); C27 = - (D20 - (D20 >> 4) - (D20 >> 6)) + ((D27 >> 2) + (D27 >> 3) + (D27 >> 8)); C29 = (D18 >> 2) + (D18 >> 3) + (D18 >> 8) + (D29 - (D29 >> 4) - (D29 >> 6));
B0 = C0 + D7; B7 = C0 - D7; B1 = C1 + C6; B6 = C1 - C6; B2 = C2 + C5; B5 = C2 - C5; B3 = C3 + D4; B4 = C3 - D4; iTmp = ( C13 - C10 ); B10 = (iTmp >> 1) + (iTmp >> 3) + (iTmp >> 4) + (iTmp >> 6) + (iTmp >> 8); iTmp = ( C13 + C10 ); B13 = (iTmp >> 1) + (iTmp >> 3) + (iTmp >> 4) + (iTmp >> 6) + (iTmp >> 8); iTmp = ( C12 - C11 ); B11 = (iTmp >> 1) + (iTmp >> 3) + (iTmp >> 4) + (iTmp >> 6) + (iTmp >> 8); iTmp = ( C12 + C11 ); B12 = (iTmp >> 1) + (iTmp >> 3) + (iTmp >> 4) + (iTmp >> 6) + (iTmp >> 8); B16 = D16 + D23; B23 = D16 - D23; B24 = D31 - D24; B31 = D31 + D24; B17 = D17 + D22; B22 = D17 - D22; B25 = D30 - D25; B30 = D30 + D25; B18 = C18 + C21; B21 = C18 - C21; B26 = C29 - C26; B29 = C29 + C26; B19 = C19 + C20; B20 = C19 - C20; B27 = C28 - C27; B28 = C28 + C27;
A0 = B0 + C15; A15 = B0 - C15; A1 = B1 + C14; A14 = B1 - C14; A2 = B2 + B13; A13 = B2 - B13; A3 = B3 + B12; A12 = B3 - B12; A4 = B4 + B11; A11 = B4 - B11; A5 = B5 + B10; A10 = B5 - B10; A6 = B6 + C9; A9 = B6 - C9; A7 = B7 + C8; A8 = B7 - C8; iTmp = ( B27 - B20 ); A20 = (iTmp >> 1) + (iTmp >> 3) + (iTmp >> 4) + (iTmp >> 6) + (iTmp >> 8); iTmp = ( B27 + B20 ); A27 = (iTmp >> 1) + (iTmp >> 3) + (iTmp >> 4) + (iTmp >> 6) + (iTmp >> 8); iTmp = ( B26 - B21 ); A21 = (iTmp >> 1) + (iTmp >> 3) + (iTmp >> 4) + (iTmp >> 6) + (iTmp >> 8); iTmp = ( B26 + B21 ); A26 = (iTmp >> 1) + (iTmp >> 3) + (iTmp >> 4) + (iTmp >> 6) + (iTmp >> 8); iTmp = ( B25 - B22 ); A22 = (iTmp >> 1) + (iTmp >> 3) + (iTmp >> 4) + (iTmp >> 6) + (iTmp >> 8); iTmp = ( B25 + B22 ); A25 = (iTmp >> 1) + (iTmp >> 3) + (iTmp >> 4) + (iTmp >> 6) + (iTmp >> 8); iTmp = ( B24 - B23 ); A23 = (iTmp >> 1) + (iTmp >> 3) + (iTmp >> 4) + (iTmp >> 6) + (iTmp >> 8); iTmp = ( B24 + B23 ); A24 = (iTmp >> 1) + (iTmp >> 3) + (iTmp >> 4) + (iTmp >> 6) + (iTmp >> 8);
x0 = A0 + B31; x31 = A0 - B31; x1 = A1 + B30; x30 = A1 - B30; x2 = A2 + B29; x29 = A2 - B29; x3 = A3 + B28; x28 = A3 - B28; x4 = A4 + A27; x27 = A4 - A27; x5 = A5 + A26; x26 = A5 - A26; x6 = A6 + A25; x25 = A6 - A25; x7 = A7 + A24; x24 = A7 - A24; x8 = A8 + A23; x23 = A8 - A23; x9 = A9 + A22; x22 = A9 - A22; x10 = A10 + A21; x21 = A10 - A21; x11 = A11 + A20; x20 = A11 - A20; x12 = A12 + B19; x19 = A12 - B19; x13 = A13 + B18; x18 = A13 - B18; x14 = A14 + B17; x17 = A14 - B17; x15 = A15 + B16; x16 = A15 - B16;
도 103a 내지 도 103c에 도시된 곱셈의 대체 연산 과정을 이용하여, N이 64인 경우, 즉 64x64 입력 블록에 대하여 치환된 삼각 함수값을 이용한 1차원 이산 코사인 변환을 수행하는 단계는, X0 내지 X63은 변환되어야 할 입력값, A0 내지 O63은 중간값, Y0 내지 Y63은 변환된 값을 나타낸다고 할 때, 다음의 연산 과정과 같이 표현될 수 있다.
O0 = x0+x63; O63 = x0-x63; O1 = x1+x62; O62 = x1-x62; O2 = x2+x61; O61 = x2-x61; O3 = x3+x60; O60 = x3-x60; O4 = x4+x59; O59 = x4-x59; O5 = x5+x58; O58 = x5-x58; O6 = x6+x57; O57 = x6-x57; O7 = x7+x56; O56 = x7-x56; O8 = x8+x55; O55 = x8-x55; O9 = x9+x54; O54 = x9-x54; O10 = x10+x53; O53 = x10-x53; O11 = x11+x52; O52 = x11-x52; O12 = x12+x51; O51 = x12-x51; O13 = x13+x50; O50 = x13-x50; O14 = x14+x49; O49 = x14-x49; O15 = x15+x48; O48 = x15-x48; O16 = x16+x47; O47 = x16-x47; O17 = x17+x46; O46 = x17-x46; O18 = x18+x45; O45 = x18-x45; O19 = x19+x44; O44 = x19-x44; O20 = x20+x43; O43 = x20-x43; O21 = x21+x42; O42 = x21-x42; O22 = x22+x41; O41 = x22-x41; O23 = x23+x40; O40 = x23-x40; O24 = x24+x39; O39 = x24-x39; O25 = x25+x38; O38 = x25-x38; O26 = x26+x37; O37 = x26-x37; O27 = x27+x36; O36 = x27-x36; O28 = x28+x35; O35 = x28-x35; O29 = x29+x34; O34 = x29-x34; O30 = x30+x33; O33 = x30-x33; O31 = x31+x32; O32 = x31-x32;
A0 = O0+O31; A31 = O0-O31; A1 = O1+O30; A30 = O1-O30; A2 = O2+O29; A29 = O2-O29; A3 = O3+O28; A28 = O3-O28; A4 = O4+O27; A27 = O4-O27; A5 = O5+O26; A26 = O5-O26; A6 = O6+O25; A25 = O6-O25; A7 = O7+O24; A24 = O7-O24; A8 = O8+O23; A23 = O8-O23; A9 = O9+O22; A22 = O9-O22; A10 = O10+O21; A21 = O10-O21; A11 = O11+O20; A20 = O11-O20; A12 = O12+O19; A19 = O12-O19; A13 = O13+O18; A18 = O13-O18; A14 = O14+O17; A17 = O14-O17; A15 = O15+O16; A16 = O15-O16; iTmp = (O55-O40); A40 = iTmp - (iTmp >> 2) - (iTmp >> 5) - (iTmp >> 7) - (iTmp >> 8); iTmp = (O55+O40); A55 = iTmp- (iTmp >> 2) - (iTmp >> 5) - (iTmp >> 7) - (iTmp >> 8); iTmp = (O54-O41); A41 = iTmp - (iTmp >> 2) - (iTmp >> 5) - (iTmp >> 7) - (iTmp >> 8); iTmp = (O54+O41); A54 = iTmp - (iTmp >> 2) - (iTmp >> 5) - (iTmp >> 7) - (iTmp >> 8); iTmp = (O53-O42); A42 = iTmp - (iTmp >> 2) - (iTmp >> 5) - (iTmp >> 7) - (iTmp >> 8); iTmp = (O53+O42); A53 = iTmp - (iTmp >> 2) - (iTmp >> 5) - (iTmp >> 7) - (iTmp >> 8); iTmp = (O52-O43); A43 = iTmp - (iTmp >> 2) - (iTmp >> 5) - (iTmp >> 7) - (iTmp >> 8); iTmp = (O52+O43); A52 = iTmp - (iTmp >> 2) - (iTmp >> 5) - (iTmp >> 7) - (iTmp >> 8); iTmp = (O51-O44); A44 = iTmp - (iTmp >> 2) - (iTmp >> 5) - (iTmp >> 7) - (iTmp >> 8); iTmp = (O51+O44); A51 = iTmp - (iTmp >> 2) - (iTmp >> 5) - (iTmp >> 7) - (iTmp >> 8); iTmp = (O50-O45); A45 = iTmp - (iTmp >> 2) - (iTmp >> 5) - (iTmp >> 7) - (iTmp >> 8); iTmp = (O50+O45); A50 = iTmp - (iTmp >> 2) - (iTmp >> 5) - (iTmp >> 7) - (iTmp >> 8); iTmp = (O49-O46); A46 = iTmp - (iTmp >> 2) - (iTmp >> 5) - (iTmp >> 7) - (iTmp >> 8); iTmp = (O49+O46); A49 = iTmp - (iTmp >> 2) - (iTmp >> 5) - (iTmp >> 7) - (iTmp >> 8); iTmp = (O48-O47); A47 = iTmp - (iTmp >> 2) - (iTmp >> 5) - (iTmp >> 7) - (iTmp >> 8); iTmp = (O48+O47); A48 = iTmp - (iTmp >> 2) - (iTmp >> 5) - (iTmp >> 7) - (iTmp >> 8);
B0 = A0+A15; B15 = A0-A15; B1 = A1+A14; B14 = A1-A14; B2 = A2+A13; B13 = A2-A13; B3 = A3+A12; B12 = A3-A12; B4 = A4+A11; B11 = A4-A11; B5 = A5+A10; B10 = A5-A10; B6 = A6+A9; B9 = A6-A9; B7 = A7+A8; B8 = A7-A8; iTmp = (A27-A20); B20 = iTmp - (iTmp >> 2) - (iTmp >> 5) - (iTmp >> 7) - (iTmp >> 8); iTmp = (A27+A20); B27 = iTmp - (iTmp >> 2) - (iTmp >> 5) - (iTmp >> 7) - (iTmp >> 8); iTmp = (A26-A21); B21 = iTmp - (iTmp >> 2) - (iTmp >> 5) - (iTmp >> 7) - (iTmp >> 8); iTmp = (A26+A21); B26 = iTmp - (iTmp >> 2) - (iTmp >> 5) - (iTmp >> 7) - (iTmp >> 8); iTmp = (A25-A22); B22 = iTmp - (iTmp >> 2) - (iTmp >> 5) - (iTmp >> 7) - (iTmp >> 8); iTmp = (A25+A22); B25 = iTmp - (iTmp >> 2) - (iTmp >> 5) - (iTmp >> 7) - (iTmp >> 8); iTmp = (A24-A23); B23 = iTmp - (iTmp >> 2) - (iTmp >> 5) - (iTmp >> 7) - (iTmp >> 8); iTmp = (A24+A23); B24 = iTmp - (iTmp >> 2) - (iTmp >> 5) - (iTmp >> 7) - (iTmp >> 8); B32 = O32+A47; B47 = O32-A47; B48 = O63-A48; B63 = O63+A48; B33 = O33+A46; B46 = O33-A46; B49 = O62-A49; B62 = O62+A49; B34 = O34+A45; B45 = O34-A45; B50 = O61-A50; B61 = O61+A50; B35 = O35+A44; B44 = O35-A44; B51 = O60-A51; B60 = O60+A51; B36 = O36+A43; B43 = O36-A43; B52 = O59-A52; B59 = O59+A52; B37 = O37+A42; B42 = O37-A42; B53 = O58-A53; B58 = O58+A53; B38 = O38+A41; B41 = O38-A41; B54 = O57-A54; B57 = O57+A54; B39 = O39+A40; B40 = O39-A40; B55 = O56-A55; B56 = O56+A55;
C0 = B0+B7; C7 = B0-B7; C1 = B1+B6; C6 = B1-B6; C2 = B2+B5; C5 = B2-B5; C3 = B3+B4; C4 = B3-B4; iTmp = (B13-B10); C10 = iTmp - (iTmp >> 2) - (iTmp >> 5) - (iTmp >> 7) - (iTmp >> 8); iTmp = (B13+B10); C13 = iTmp - (iTmp >> 2) - (iTmp >> 5) - (iTmp >> 7) - (iTmp >> 8); iTmp = (B12-B11); C11 = iTmp - (iTmp >> 2) - (iTmp >> 5) - (iTmp >> 7) - (iTmp >> 8); iTmp = (B12+B11); C12 = iTmp - (iTmp >> 2) - (iTmp >> 5) - (iTmp >> 7) - (iTmp >> 8); C16 = A16+B23; C23 = A16-B23; C24 = A31-B24; C31 = A31+B24; C17 = A17+B22; C22 = A17-B22; C25 = A30-B25; C30 = A30+B25; C18 = A18+B21; C21 = A18-B21; C26 = A29-B26; C29 = A29+B26; C19 = A19+B20; C20 = A19-B20; C27 = A28-B27; C28 = A28+B27; C36 = ((B59 >> 2) + (B59 >> 3) + (B59 >> 7)) - (B36 - (B36 >> 4) - (B36 >> 7) - (B36 >> 8) - (B36 >> 9)); C40 = - (B55 - (B55 >> 4) - (B55 >> 7) - (B55 >> 8) - (B55 >> 9)) - ((B40 >> 2) + (B40 >> 3) + (B40 >> 7)); C52 = - (B43 - (B43 >> 4) - (B43 >> 7) - (B43 >> 8) - (B43 >> 9)) + ((B52 >> 2) + (B52 >> 3) + (B52 >> 7)); C56 = ((B39 >> 2) + (B39 >> 3) + (B39 >> 7)) + (B56 - (B56 >> 4) - (B56 >> 7) - (B56 >> 8) - (B56 >> 9)); C37 = ((B58 >> 2) + (B58 >> 3) + (B58 >> 7)) - (B37 - (B37 >> 4) - (B37 >> 7) - (B37 >> 8) - (B37 >> 9)); C41 = - (B54 - (B54 >> 4) - (B54 >> 7) - (B54 >> 8) - (B54 >> 9)) - ((B41 >> 2) + (B41 >> 3) + (B41 >> 7)); C53 = - (B42 - (B42 >> 4) - (B42 >> 7) - (B42 >> 8) - (B42 >> 9)) + ((B53 >> 2) + (B53 >> 3) + (B53 >> 7)); C57 = ((B38 >> 2) + (B38 >> 3) + (B38 >> 7)) + (B57 - (B57 >> 4) - (B57 >> 7) - (B57 >> 8) - (B57 >> 9)); C38 = ((B57 >> 2) + (B57 >> 3) + (B57 >> 7)) - (B38 - (B38 >> 4) - (B38 >> 7) - (B38 >> 8) - (B38 >> 9)); C42 = - (B53 - (B53 >> 4) - (B53 >> 7) - (B53 >> 8) - (B53 >> 9)) - ((B42 >> 2) + (B42 >> 3) + (B42 >> 7)); C54 = - (B41 - (B41 >> 4) - (B41 >> 7) - (B41 >> 8) - (B41 >> 9)) + ((B54 >> 2) + (B54 >> 3) + (B54 >> 7)); C58 = ((B37 >> 2) + (B37 >> 3) + (B37 >> 7)) + (B58 - (B58 >> 4) - (B58 >> 7) - (B58 >> 8) - (B58 >> 9)); C39 = ((B56 >> 2) + (B56 >> 3) + (B56 >> 7)) - (B39 - (B39 >> 4) - (B39 >> 7) - (B39 >> 8) - (B39 >> 9)); C43 = - (B52 - (B52 >> 4) - (B52 >> 7) - (B52 >> 8) - (B52 >> 9)) - ((B43 >> 2) + (B43 >> 3) + (B43 >> 7)); C55 = - (B40 - (B40 >> 4) - (B40 >> 7) - (B40 >> 8) - (B40 >> 9)) + ((B55 >> 2) + (B55 >> 3) + (B55 >> 7)); C59 = ((B36 >> 2) + (B36 >> 3) + (B36 >> 7)) + (B59 - (B59 >> 4) - (B59 >> 7) - (B59 >> 8) - (B59 >> 9));
D0 = C0+C3; D3 = C0-C3; D8 = B8+C11; D11 = B8-C11; D12 = B15-C12; D15 = B15+C12; D1 = C1+C2; D2 = C1-C2; D9 = B9+C10; D10 = B9-C10; D13 = B14-C13; D14 = B14+C13; iTmp = (C6-C5); D5 = iTmp - (iTmp >> 2) - (iTmp >> 5) - (iTmp >> 7) - (iTmp >> 8); iTmp = (C6+C5); D6 = iTmp - (iTmp >> 2) - (iTmp >> 5) - (iTmp >> 7) - (iTmp >> 8); D18 = ((C29 >> 2) + (C29 >> 3) + (C29 >> 7)) - (C18 - (C18 >> 4) - (C18 >> 7) - (C18 >> 8) - (C18 >> 9)); D20 = - (C27 - (C27 >> 4) - (C27 >> 7) - (C27 >> 8) - (C27 >> 9)) - ((C20 >> 2) + (C20 >> 3) + (C20 >> 7)); D26 = - (C21 - (C21 >> 4) - (C21 >> 7) - (C21 >> 8) - (C21 >> 9)) + ((C26 >> 2) + (C26 >> 3) + (C26 >> 7)); D28 = ((C19 >> 2) + (C19 >> 3) + (C19 >> 7)) + (C28 - (C28 >> 4) - (C28 >> 7) - (C28 >> 8) - (C28 >> 9)); D19 = ((C28 >> 2) + (C28 >> 3) + (C28 >> 7)) - (C19 - (C19 >> 4) - (C19 >> 7) - (C19 >> 8) - (C19 >> 9)); D21 = -(C26 - (C26 >> 4) - (C26 >> 7) - (C26 >> 8) - (C26 >> 9)) - ((C21 >> 2) + (C21 >> 3) + (C21 >> 7)); D27 = - (C20 - (C20 >> 4) - (C20 >> 7) - (C20 >> 8) - (C20 >> 9)) + ((C27 >> 2) + (C27 >> 3) + (C27 >> 7)); D29 = ((C18 >> 2) + (C18 >> 3) + (C18 >> 7)) + (C29 - (C29 >> 4) - (C29 >> 7) - (C29 >> 8) - (C29 >> 9)); D32 = B32+C39; D39 = B32-C39; D40 = B47-C40; D47 = B47+C40; D48 = B48+C55; D55 = B48-C55; D56 = B63-C56; D63 = B63+C56; D33 = B33+C38; D38 = B33-C38; D41 = B46-C41; D46 = B46+C41; D49 = B49+C54; D54 = B49-C54; D57 = B62-C57; D62 = B62+C57; D34 = B34+C37; D37 = B34-C37; D42 = B45-C42; D45 = B45+C42; D50 = B50+C53; D53 = B50-C53; D58 = B61-C58; D61 = B61+C58; D35 = B35+C36; D36 = B35-C36; D43 = B44-C43; D44 = B44+C43; D51 = B51+C52; D52 = B51-C52; D59 = B60-C59; D60 = B60+C59; iTmp = (D0+D1);
y0 = iTmp - (iTmp >> 2) - (iTmp >> 5) - (iTmp >> 7) - (iTmp >> 8); iTmp = (D0-D1); y32 = iTmp - (iTmp >> 2) - (iTmp >> 5) - (iTmp >> 7) - (iTmp >> 8); y16 = (D3 - (D3 >> 4) - (D3 >> 7) - (D3 >> 8) - (D3 >> 9)) + ((D2 >> 2) + (D2 >> 3) + (D2 >> 7)); y48 = ((D3 >> 2) + (D3 >> 3) + (D3 >> 7)) - (D2 - (D2 >> 4) - (D2 >> 7) - (D2 >> 8) - (D2 >> 9));
E4 = C4+D5; E5 = C4-D5; E6 = C7-D6; E7 = C7+D6; E9 = ((D14 >> 2) + (D14 >> 3) + (D14 >> 7)) - (D9 - (D9 >> 4) - (D9 >> 7) - (D9 >> 8) - (D9 >> 9)); E10 = - (D13 - (D13 >> 4) - (D13 >> 7) - (D13 >> 8) - (D13 >> 9)) - ((D10 >> 2) + (D10 >> 3) + (D10 >> 7)); E13 = ((D13 >> 2) + (D13 >> 3) + (D13 >> 7)) - (D10 - (D10 >> 4) - (D10 >> 7) - (D10 >> 8) - (D10 >> 9)); E14 = (D14 - (D14 >> 4) - (D14 >> 7) - (D14 >> 8) - (D14 >> 9)) + ((D9 >> 2) + (D9 >> 3) + (D9 >> 7)); E16 = C16+D19; E19 = C16-D19; E20 = C23-D20; E23 = C23+D20; E24 = C24+D27; E27 = C24-D27; E28 = C31-D28; E31 = C31+D28; E17 = C17+D18; E18 = C17-D18; E21 = C22-D21; E22 = C22+D21; E25 = C25+D26; E26 = C25-D26; E29 = C30-D29; E30 = C30+D29; E34 = ((D61 >> 3) + (D61 >> 4) + (D61 >> 7)) - (D34 - (D34 >> 6) - (D34 >> 8)); E35 = ((D60 >> 3) + (D60 >> 4) + (D60 >> 7)) - (D35 - (D35 >> 6) - (D35 >> 8)); E36 = - (D59 - (D59 >> 6) - (D59 >> 8)) - ((D36 >> 3) + (D36 >> 4) + (D36 >> 7)); E37 = - (D58 - (D58 >> 6) - (D58 >> 8)) - ((D37 >> 3) + (D37 >> 4) + (D37 >> 7)); E42 = (D53 - (D53 >> 3) - (D53 >> 5) - (D53 >> 7) - (D53 >> 8) - (D53 >> 10)) - ((D42 >> 1) + (D42 >> 5) + (D42 >> 6) + (D42 >> 7) + (D42 >> 10)); E43 = (D52 - (D52 >> 3) - (D52 >> 5) - (D52 >> 7) - (D52 >> 8) - (D52 >> 10)) - ((D43 >> 1) + (D43 >> 5) + (D43 >> 6) + (D43 >> 7) + (D43 >> 10)); E44 = - ((D51 >> 1) + (D51 >> 5) + (D51 >> 6) + (D51 >> 7) + (D51 >> 10)) - (D44 - (D44 >> 3) - (D44 >> 5) - (D44 >> 7) - (D44 >> 8) - (D44 >> 10)); E45 = - ((D50 >> 1) + (D50 >> 5) + (D50 >> 6) + (D50 >> 7) + (D50 >> 10)) - (D45 - (D45 >> 3) - (D45 >> 5) - (D45 >> 7) - (D45 >> 8) - (D45 >> 10)); E50 = (D50 - (D50 >> 3) - (D50 >> 5) - (D50 >> 7) - (D50 >> 8) - (D50 >> 10)) - ((D45 >> 1) + (D45 >> 5) + (D45 >> 6) + (D45 >> 7) + (D45 >> 10)); E51 = (D51 - (D51 >> 3) - (D51 >> 5) - (D51 >> 7) - (D51 >> 8) - (D51 >> 10)) - ((D44 >> 1) + (D44 >> 5) + (D44 >> 6) + (D44 >> 7) + (D44 >> 10)); E52 = ((D52 >> 1) + (D52 >> 5) + (D52 >> 6) + (D52 >> 7) + (D52 >> 10)) + (D43 - (D43 >> 3) - (D43 >> 5) - (D43 >> 7) - (D43 >> 8) - (D43 >> 10)); E53 = ((D53 >> 1) + (D53 >> 5) + (D53 >> 6) + (D53 >> 7) + (D53 >> 10)) + (D42 - (D42 >> 3) - (D42 >> 5) - (D42 >> 7) - (D42 >> 8) - (D42 >> 10)); E58 = ((D58 >> 3) + (D58 >> 4) + (D58 >> 7)) - (D37 - (D37 >> 6) - (D37 >> 8)); E59 = ((D59 >> 3) + (D59 >> 4) + (D59 >> 7)) - (D36 - (D36 >> 6) - (D36 >> 8)); E60 = (D60 - (D60 >> 6) - (D60 >> 8)) + ((D35 >> 3) + (D35 >> 4) + (D35 >> 7)); E61 = (D61 - (D61 >> 6) - (D61 >> 8)) + ((D34 >> 3) + (D34 >> 4) + (D34 >> 7));
y8 = ((E4 >> 3) + (E4 >> 4) + (E4 >> 7)) + (E7 - (E7 >> 6) - (E7 >> 8)); y40 = (E5 - (E5 >> 3) - (E5 >> 5) - (E5 >> 7) - (E5 >> 8) - (E5 >> 10)) + ((E6 >> 1) + (E6 >> 5) + (E6 >> 6) + (E6 >> 7) + (E6 >> 10)); y24 = (E6 - (E6 >> 3) - (E6 >> 5) - (E6 >> 7) - (E6 >> 8) - (E6 >> 10)) - ((E5 >> 1) + (E5 >> 5) + (E5 >> 6) + (E5 >> 7) + (E5 >> 10)); y56 = ((E7 >> 3) + (E7 >> 4) + (E7 >> 7)) - (E4 - (E4 >> 6) - (E4 >> 8));
F8 = D8+E9; F9 = D8-E9; F10 = D11-E10; F11 = D11+E10; F12 = D12+E13; F13 = D12-E13; F14 = D15-E14; F15 = D15+E14; F17 = ((E30 >> 3) + (E30 >> 4) + (E30 >> 7)) - (E17 - (E17 >> 6) - (E17 >> 8)); F18 = - (E29 - (E29 >> 6) - (E29 >> 8)) - ((E18 >> 3) + (E18 >> 4) + (E18 >> 7)); F21 = (E26 - (E26 >> 3) - (E26 >> 5) - (E26 >> 7) - (E26 >> 8) - (E26 >> 10)) - ((E21 >> 1) + (E21 >> 5) + (E21 >> 6) + (E21 >> 7) + (E21 >> 10)); F22 = - ((E25 >> 1) + (E25 >> 5) + (E25 >> 6) + (E25 >> 7) + (E25 >> 10)) - (E22 - (E22 >> 3) - (E22 >> 5) - (E22 >> 7) - (E22 >> 8) - (E22 >> 10)); F25 = (E25 - (E25 >> 3) - (E25 >> 5) - (E25 >> 7) - (E25 >> 8) - (E25 >> 10)) - ((E22 >> 1) + (E22 >> 5) + (E22 >> 6) + (E22 >> 7) + (E22 >> 10)); F26 = ((E26 >> 1) + (E26 >> 5) + (E26 >> 6) + (E26 >> 7) + (E26 >> 10)) + (E21 - (E21 >> 3) - (E21 >> 5) - (E21 >> 7) - (E21 >> 8) - (E21 >> 10)); F29 = ((E29 >> 3) + (E29 >> 4) + (E29 >> 7)) - (E18 - (E18 >> 6) - (E18 >> 8)); F30 = (E30 - (E30 >> 6) - (E30 >> 8)) + ((E17 >> 3) + (E17 >> 4) + (E17 >> 7)); F32 = D32+E35; F33 = D33+E34; F34 = D33-E34; F35 = D32-E35; F36 = D39-E36; F37 = D38-E37; F38 = D38+E37; F39 = D39+E36; F40 = D40+E43; F41 = D41+E42; F42 = D41-E42; F43 = D40-E43; F44 = D47-E44; F45 = D46-E45; F46 = D46+E45; F47 = D47+E44; F48 = D48+E51; F49 = D49+E50; F50 = D49-E50; F51 = D48-E51; F52 = D55-E52; F53 = D54-E53; F54 = D54+E53; F55 = D55+E52; F56 = D56+E59; F57 = D57+E58; F58 = D57-E58; F59 = D56-E59; F60 = D63-E60; F61 = D62-E61; F62 = D62+E61; F63 = D63+E60;
y4 = ((F8 >> 4) + (F8 >> 5) + (F8 >> 8)) + (F15 - (F15 >> 8) - (F15 >> 10)); y36 = ((F9 >> 1) + (F9 >> 2) + (F9 >> 6) + (F9 >> 7)) + ((F14 >> 1) + (F14 >> 3) + (F14 >> 7) + (F14 >> 9)); y20 = ((F10 >> 2) + (F10 >> 3) + (F10 >> 4) + (F10 >> 5) + (F10 >> 9) + (F10 >> 10)) + (F13 - (F13 >> 4) - (F13 >> 5) - (F13 >> 6) - (F13 >> 7) - (F13 >> 10)); y52 = (F11 - (F11 >> 5) - (F11 >> 7) - (F11 >> 8)) + ((F12 >> 2) + (F12 >> 5) + (F12 >> 7) + (F12 >> 10)); y12 = (F12 - (F12 >> 5) - (F12 >> 7) - (F12 >> 8)) - ((F11 >> 2) + (F11 >> 5) + (F11 >> 7) + (F11 >> 10)); y44 = ((F13 >> 2) + (F13 >> 3) + (F13 >> 4) + (F13 >> 5) + (F13 >> 9) + (F13 >> 10)) - (F10 - (F10 >> 4) - (F10 >> 5) - (F10 >> 6) - (F10 >> 7) - (F10 >> 10)); y28 = ((F14 >> 1) + (F14 >> 2) + (F14 >> 6) + (F14 >> 7)) - ((F9 >> 1) + (F9 >> 3) + (F9 >> 7) + (F9 >> 9)); y60 = ((F15 >> 4) + (F15 >> 5) + (F15 >> 8)) - (F8 - (F8 >> 8) - (F8 >> 10));
G16 = E16+F17; G17 = E16-F17; G18 = E19-F18; G19 = E19+F18; G20 = E20+F21; G21 = E20-F21; G22 = E23-F22; G23 = E23+F22; G24 = E24+F25; G25 = E24-F25; G26 = E27-F26; G27 = E27+F26; G28 = E28+F29; G29 = E28-F29; G30 = E31-F30; G31 = E31+F30; G33 = ((F62 >> 4) + (F62 >> 5) + (F62 >> 8)) - (F33 - (F33 >> 8) - (F33 >> 10)); G34 = - (F61 - (F61 >> 8) - (F61 >> 10)) - ((F34 >> 4) + (F34 >> 5) + (F34 >> 8)); G37 = ((F58 >> 1) + (F58 >> 2) + (F58 >> 6) + (F58 >> 7)) - ((F37 >> 1) + (F37 >> 3) + (F37 >> 7) + (F37 >> 9)); G38 = - ((F57 >> 1) + (F57 >> 3) + (F57 >> 7) + (F57 >> 9)) - ((F38 >> 1) + (F38 >> 2) + (F38 >> 6) + (F38 >> 7)); G41 = ((F54 >> 2) + (F54 >> 3) + (F54 >> 4) + (F54 >> 5) + (F54 >> 9) + (F54 >> 10)) - (F41 - (F41 >> 4) - (F41 >> 5) - (F41 >> 6) - (F41 >> 7) - (F41 >> 10)); G42 = - (F53 - (F53 >> 4) - (F53 >> 5) - (F53 >> 6) - (F53 >> 7) - (F53 >> 10)) - ((F42 >> 2) + (F42 >> 3) + (F42 >> 4) + (F42 >> 5) + (F42 >> 9) + (F42 >> 10)); G45 = (F50 - (F50 >> 5) - (F50 >> 7) - (F50 >> 8)) - ((F45 >> 2) + (F45 >> 5) + (F45 >> 7) + (F45 >> 10)); G46 = - ((F49 >> 2) + (F49 >> 5) + (F49 >> 7) + (F49 >> 10)) - (F46 - (F46 >> 5) - (F46 >> 7) - (F46 >> 8)); G49 = (F49 - (F49 >> 5) - (F49 >> 7) - (F49 >> 8)) - ((F46 >> 2) + (F46 >> 5) + (F46 >> 7) + (F46 >> 10)); G50 = ((F50 >> 2) + (F50 >> 5) + (F50 >> 7) + (F50 >> 10)) + (F45 - (F45 >> 5) - (F45 >> 7) - (F45 >> 8)); G53 = ((F53 >> 2) + (F53 >> 3) + (F53 >> 4) + (F53 >> 5) + (F53 >> 9) + (F53 >> 10)) - (F42 - (F42 >> 4) - (F42 >> 5) - (F42 >> 6) - (F42 >> 7) - (F42 >> 10)); G54 = (F54 - (F54 >> 4) - (F54 >> 5) - (F54 >> 6) - (F54 >> 7) - (F54 >> 10)) + ((F41 >> 2) + (F41 >> 3) + (F41 >> 4) + (F41 >> 5) + (F41 >> 9) + (F41 >> 10)); G57 = ((F57 >> 1) + (F57 >> 2) + (F57 >> 6) + (F57 >> 7)) - ((F38 >> 1) + (F38 >> 3) + (F38 >> 7) + (F38 >> 9)); G58 = ((F58 >> 1) + (F58 >> 3) + (F58 >> 7) + (F58 >> 9)) + ((F37 >> 1) + (F37 >> 2) + (F37 >> 6) + (F37 >> 7)); G61 = ((F61 >> 4) + (F61 >> 5) + (F61 >> 8)) - (F34 - (F34 >> 8) - (F34 >> 10)); G62 = (F62 - (F62 >> 8) - (F62 >> 10)) + ((F33 >> 4) + (F33 >> 5) + (F33 >> 8));
y2 = ((G16 >> 5) + (G16 >> 6) + (G16 >> 9)) + (G31 - (G31 >> 10)); y34 = (G17 - (G17 >> 2) - (G17 >> 7) - (G17 >> 10)) + ((G30 >> 1) + (G30 >> 3) + (G30 >> 5) + (G30 >> 6)); y18 = (G18 - (G18 >> 1) - (G18 >> 4) - (G18 >> 7) - (G18 >> 9)) + (G29 - (G29 >> 4) - (G29 >> 5) - (G29 >> 9)); y50 = (G19 - (G19 >> 5) - (G19 >> 6) - (G19 >> 7) - (G19 >> 8)) + ((G28 >> 2) + (G28 >> 4) + (G28 >> 6) + (G28 >> 7) + (G28 >> 10)); y10 = (G20 - (G20 >> 1) - (G20 >> 2) - (G20 >> 8) - (G20 >> 9) - (G20 >> 10)) + (G27 - (G27 >> 6) - (G27 >> 7) - (G27 >> 8) - (G27 >> 9) - (G27 >> 10)); y42 = (G21 - (G21 >> 3) - (G21 >> 6) - (G21 >> 9)) + ((G26 >> 1) + (G26 >> 7) + (G26 >> 8) + (G26 >> 9)); y26 = ((G22 >> 1) + (G22 >> 4) + (G22 >> 5) + (G22 >> 9)) + (G25 - (G25 >> 3) - (G25 >> 4) - (G25 >> 7) - (G25 >> 9)); y58 = (G23 - (G23 >> 7) - (G23 >> 9) - (G23 >> 10)) + ((G24 >> 3) + (G24 >> 6) + (G24 >> 8) + (G24 >> 9)); y6 = (G24 - (G24 >> 7) - (G24 >> 9) - (G24 >> 10)) - ((G23 >> 3) + (G23 >> 6) + (G23 >> 8) + (G23 >> 9)); y38 = ((G25 >> 1) + (G25 >> 4) + (G25 >> 5) + (G25 >> 9)) - (G22 - (G22 >> 3) - (G22 >> 4) - (G22 >> 7) - (G22 >> 9)); y22 = (G26 - (G26 >> 3) - (G26 >> 6) - (G26 >> 9)) - ((G21 >> 1) + (G21 >> 7) + (G21 >> 8) + (G21 >> 9)); y54 = (G27 - (G27 >> 1) - (G27 >> 2) - (G27 >> 8) - (G27 >> 9) - (G27 >> 10)) - (G20 - (G20 >> 6) - (G20 >> 7) - (G20 >> 8) - (G20 >> 9) - (G20 >> 10)); y14 = (G28 - (G28 >> 5) - (G28 >> 6) - (G28 >> 7) - (G28 >> 8)) - ((G19 >> 2) + (G19 >> 4) + (G19 >> 6) + (G19 >> 7) + (G19 >> 10)); y46 = (G29 - (G29 >> 1) - (G29 >> 4) - (G29 >> 7) - (G29 >> 9)) - (G18 - (G18 >> 4) - (G18 >> 5) - (G18 >> 9)); y30 = (G30 - (G30 >> 2) - (G30 >> 7) - (G30 >> 10)) - ((G17 >> 1) + (G17 >> 3) + (G17 >> 5) + (G17 >> 6)); y62 = ((G31 >> 5) + (G31 >> 6) + (G31 >> 9)) - (G16 - (G16 >> 10));
H32 = F32+G33; H33 = F32-G33; H34 = F35-G34; H35 = F35+G34; H36 = F36+G37; H37 = F36-G37; H38 = F39-G38; H39 = F39+G38; H40 = F40+G41; H41 = F40-G41; H42 = F43-G42; H43 = F43+G42; H44 = F44+G45; H45 = F44-G45; H46 = F47-G46; H47 = F47+G46; H48 = F48+G49; H49 = F48-G49; H50 = F51-G50; H51 = F51+G50; H52 = F52+G53; H53 = F52-G53; H54 = F55-G54; H55 = F55+G54; H56 = F56+G57; H57 = F56-G57; H58 = F59-G58; H59 = F59+G58; H60 = F60+G61; H61 = F60-G61; H62 = F63-G62; H63 = F63+G62;
y1 = ((H32 >> 6) + (H32 >> 7) + (H32 >> 10)) + (H63); y33 = (H33 - (H33 >> 2) - (H33 >> 6) - (H33 >> 7) - (H33 >> 9)) + ((H62 >> 1) + (H62 >> 3) + (H62 >> 4) + (H62 >> 9)); y17 = (H34 - (H34 >> 1) - (H34 >> 4) - (H34 >> 5) - (H34 >> 10)) + (H61 - (H61 >> 4) - (H61 >> 6) - (H61 >> 7)); y49 = (H35 - (H35 >> 4) - (H35 >> 8) - (H35 >> 10)) + ((H60 >> 2) + (H60 >> 4) + (H60 >> 5) + (H60 >> 6) + (H60 >> 10)); y9 = ((H36 >> 3) + (H36 >> 4) + (H36 >> 5)) + (H59 - (H59 >> 6) - (H59 >> 7) - (H59 >> 10)); y41 = ((H37 >> 1) + (H37 >> 2) + (H37 >> 4) + (H37 >> 5) + (H37 >> 10)) + ((H58 >> 1) +(H58 >> 5) + (H58 >> 8)); y25 = ((H38 >> 1) + (H38 >> 4) + (H38 >> 7) + (H38 >> 8) + (H38 >> 9)) + ((H57 >> 1) + (H57 >> 2) + (H57 >> 4) + (H57 >> 8) + (H57 >> 10)); y57 = (H39 - (H39 >> 7) - (H39 >> 8) - (H39 >> 9) - (H39 >> 10)) + (H56 - (H56 >> 1) - (H56 >> 2) - (H56 >> 4) - (H56 >> 6) - (H56 >> 10)); y5 = (H40 - (H40 >> 1) - (H40 >> 2) - (H40 >> 3) - (H40 >> 9) - (H40 >> 10)) + (H55 - (H55 >> 7)); y37 = (H41 - (H41 >> 3) - (H41 >> 4) - (H41 >> 6) - (H41 >> 7) - (H41 >> 10)) + (H54 - (H54 >> 2) - (H54 >> 3) - (H54 >> 7) - (H54 >> 9)); y21 = (H42 - (H42 >> 1) - (H42 >> 8) - (H42 >> 9) - (H42 >> 10)) + (H53 - (H53 >> 3) - (H53 >> 8) - (H53 >> 10)); y53 = (H43 - (H43 >> 5) - (H43 >> 8) - (H43 >> 10)) + ((H52 >> 2) + (H52 >> 6) + (H52 >> 10)); y13 = ((H44 >> 2) + (H44 >> 4) + (H44 >> 10)) + (H51 - (H51 >> 5) - (H51 >> 6) - (H51 >> 8)); y45 = (H45 - (H45 >> 4) - (H45 >> 5) - (H45 >> 7) - (H45 >> 8) - (H45 >> 10)) + (H50 - (H50 >> 1) - (H50 >> 5) - (H50 >> 6) - (H50 >> 8)); y29 = (H46 - (H46 >> 2) - (H46 >> 4) - (H46 >> 5) - (H46 >> 9) - (H46 >> 10)) + ((H49 >> 1) + (H49 >> 2) + (H49 >> 8) + (H49 >> 9) + (H49 >> 10)); y61 = (H47 - (H47 >> 9) - (H47 >> 10)) + ((H48 >> 4) + (H48 >> 7) + (H48 >> 9) + (H48 >> 10)); y3 = (H48 - (H48 >> 9) - (H48 >> 10)) - ((H47 >> 4) + (H47 >> 7) + (H47 >> 9) + (H47 >> 10)); y35 = (H49 - (H49 >> 2) - (H49 >> 4) - (H49 >> 5) - (H49 >> 9) - (H49 >> 10)) - ((H46 >> 1) + (H46 >> 2) + (H46 >> 8) + (H46 >> 9) + (H46 >> 10)); y19 = (H50 - (H50 >> 4) - (H50 >> 5) - (H50 >> 7) - (H50 >> 8) - (H50 >> 10)) - (H45 - (H45 >> 1) - (H45 >> 5) - (H45 >> 6) - (H45 >> 8)); y51 = ((H51 >> 2) + (H51 >> 4) + (H51 >> 10)) - (H44 - (H44 >> 5) - (H44 >> 6) - (H44 >> 8)); y11 = (H52 - (H52 >> 5) - (H52 >> 8) - (H52 >> 10)) - ((H43 >> 2) + (H43 >> 6) + (H43 >> 10)); y43 = (H53 - (H53 >> 1) - (H53 >> 8) - (H53 >> 9) - (H53 >> 10)) - (H42 - (H42 >> 3) - (H42 >> 8) - (H42 >> 10)); y27 = (H54 - (H54 >> 3) - (H54 >> 4) - (H54 >> 6) - (H54 >> 7) - (H54 >> 10)) - (H41 - (H41 >> 2) - (H41 >> 3) - (H41 >> 7) - (H41 >> 9)); y59 = (H55 - (H55 >> 1) - (H55 >> 2) - (H55 >> 3) - (H55 >> 9) - (H55 >> 10)) - (H40 - (H40 >> 7)); y7 = (H56 - (H56 >> 7) - (H56 >> 8) - (H56 >> 9) - (H56 >> 10)) - (H39 - (H39 >> 1) - (H39 >> 2) - (H39 >> 4) - (H39 >> 6) - (H39 >> 10)); y39 = ((H57 >> 1) + (H57 >> 4) + (H57 >> 7) + (H57 >> 8) + (H57 >> 9)) - ((H38 >> 1) + (H38 >> 2) + (H38 >> 4) + (H38 >> 8) + (H38 >> 10)); y23 = ((H58 >> 1) + (H58 >> 2) + (H58 >> 4) + (H58 >> 5) + (H58 >> 10)) - ((H37 >> 1) +(H37 >> 5) + (H37 >> 8)); y55 = ((H59 >> 3) + (H59 >> 4) + (H59 >> 5)) - (H36 - (H36 >> 6) - (H36 >> 7) - (H36 >> 10)); y15 = (H60 - (H60 >> 4) - (H60 >> 8) - (H60 >> 10)) - ((H35 >> 2) + (H35 >> 4) + (H35 >> 5) + (H35 >> 6) + (H35 >> 10)); y47 = (H61 - (H61 >> 1) - (H61 >> 4) - (H61 >> 5) - (H61 >> 10)) - (H34 - (H34 >> 4) - (H34 >> 6) - (H34 >> 7)); y31 = (H62 - (H62 >> 2) - (H62 >> 6) - (H62 >> 7) - (H62 >> 9)) - ((H33 >> 1) + (H33 >> 3) + (H33 >> 4) + (H33 >> 9)); y63 = ((H63 >> 6) + (H63 >> 7) + (H63 >> 10)) - (H32);
이에 대응되는 64 포인트 역 이산 코사인 변환 과정은 다음의 연산 과정과 같이 표현된다. 다음의 연산 과정에서 Y0 내지 Y63은 역변환되어야 할 입력값, A0 내지 O63은 중간값, X0 내지 X63은 역변환된 값을 나타낸다.
H32 = ((y1 >> 6) + (y1 >> 7) + (y1 >> 10)) - (y63); H33 = (y33 - (y33 >> 2) - (y33 >> 6) - (y33 >> 7) - (y33 >> 9)) - ((y31 >> 1) + (y31 >> 3) + (y31 >> 4) + (y31 >> 9)); H34 = (y17 - (y17 >> 1) - (y17 >> 4) - (y17 >> 5) - (y17 >> 10)) - (y47 - (y47 >> 4) - (y47 >> 6) - (y47 >> 7)); H35 = (y49 - (y49 >> 4) - (y49 >> 8) - (y49 >> 10)) - ((y15 >> 2) + (y15 >> 4) + (y15 >> 5) + (y15 >> 6) + (y15 >> 10)); H36 = ((y9 >> 3) + (y9 >> 4) + (y9 >> 5)) - (y55 - (y55 >> 6) - (y55 >> 7) - (y55 >> 10)); H37 = ((y41 >> 1) + (y41 >> 2) + (y41 >> 4) + (y41 >> 5) + (y41 >> 10)) - ((y23 >> 1) +(y23 >> 5) + (y23 >> 8)); H38 = ((y25 >> 1) + (y25 >> 4) + (y25 >> 7) + (y25 >> 8) + (y25 >> 9)) - ((y39 >> 1) + (y39 >> 2) + (y39 >> 4) + (y39 >> 8) + (y39 >> 10)); H39 = (y57 - (y57 >> 7) - (y57 >> 8) - (y57 >> 9) - (y57 >> 10)) - (y7 - (y7 >> 1) - (y7 >> 2) - (y7 >> 4) - (y7 >> 6) - (y7 >> 10)); H40 = (y5 - (y5 >> 1) - (y5 >> 2) - (y5 >> 3) - (y5 >> 9) - (y5 >> 10)) - (y59 - (y59 >> 7)); H41 = (y37 - (y37 >> 3) - (y37 >> 4) - (y37 >> 6) - (y37 >> 7) - (y37 >> 10)) - (y27 - (y27 >> 2) - (y27 >> 3) - (y27 >> 7) - (y27 >> 9)); H42 = (y21 - (y21 >> 1) - (y21 >> 8) - (y21 >> 9) - (y21 >> 10)) - (y43 - (y43 >> 3) - (y43 >> 8) - (y43 >> 10)); H43 = (y53 - (y53 >> 5) - (y53 >> 8) - (y53 >> 10)) - ((y11 >> 2) + (y11 >> 6) + (y11 >> 10)); H44 = ((y13 >> 2) + (y13 >> 4) + (y13 >> 10)) - (y51 - (y51 >> 5) - (y51 >> 6) - (y51 >> 8)); H45 = (y45 - (y45 >> 4) - (y45 >> 5) - (y45 >> 7) - (y45 >> 8) - (y45 >> 10)) - (y19 - (y19 >> 1) - (y19 >> 5) - (y19 >> 6) - (y19 >> 8)); H46 = (y29 - (y29 >> 2) - (y29 >> 4) - (y29 >> 5) - (y29 >> 9) - (y29 >> 10)) - ((y35 >> 1) + (y35 >> 2) + (y35 >> 8) + (y35 >> 9) + (y35 >> 10)); H47 = (y61 - (y61 >> 9) - (y61 >> 10)) - ((y3 >> 4) + (y3 >> 7) + (y3 >> 9) + (y3 >> 10)); H48 = (y3 - (y3 >> 9) - (y3 >> 10)) + ((y61 >> 4) + (y61 >> 7) + (y61 >> 9) + (y61 >> 10)); H49 = (y35 - (y35 >> 2) - (y35 >> 4) - (y35 >> 5) - (y35 >> 9) - (y35 >> 10)) + ((y29 >> 1) + (y29 >> 2) + (y29 >> 8) + (y29 >> 9) + (y29 >> 10)); H50 = (y19 - (y19 >> 4) - (y19 >> 5) - (y19 >> 7) - (y19 >> 8) - (y19 >> 10)) + (y45 - (y45 >> 1) - (y45 >> 5) - (y45 >> 6) - (y45 >> 8)); H51 = ((y51 >> 2) + (y51 >> 4) + (y51 >> 10)) + (y13 - (y13 >> 5) - (y13 >> 6) - (y13 >> 8)); H52 = (y11 - (y11 >> 5) - (y11 >> 8) - (y11 >> 10)) + ((y53 >> 2) + (y53 >> 6) + (y53 >> 10)); H53 = (y43 - (y43 >> 1) - (y43 >> 8) - (y43 >> 9) - (y43 >> 10)) + (y21 - (y21 >> 3) - (y21 >> 8) - (y21 >> 10)); H54 = (y27 - (y27 >> 3) - (y27 >> 4) - (y27 >> 6) - (y27 >> 7) - (y27 >> 10)) + (y37 - (y37 >> 2) - (y37 >> 3) - (y37 >> 7) - (y37 >> 9)); H55 = (y59 - (y59 >> 1) - (y59 >> 2) - (y59 >> 3) - (y59 >> 9) - (y59 >> 10)) + (y5 - (y5 >> 7)); H56 = (y7 - (y7 >> 7) - (y7 >> 8) - (y7 >> 9) - (y7 >> 10)) + (y57 - (y57 >> 1) - (y57 >> 2) - (y57 >> 4) - (y57 >> 6) - (y57 >> 10)); H57 = ((y39 >> 1) + (y39 >> 4) + (y39 >> 7) + (y39 >> 8) + (y39 >> 9)) + ((y25 >> 1) + (y25 >> 2) + (y25 >> 4) + (y25 >> 8) + (y25 >> 10)); H58 = ((y23 >> 1) + (y23 >> 2) + (y23 >> 4) + (y23 >> 5) + (y23 >> 10)) + ((y41 >> 1) +(y41 >> 5) + (y41 >> 8)); H59 = ((y55 >> 3) + (y55 >> 4) + (y55 >> 5)) + (y9 - (y9 >> 6) - (y9 >> 7) - (y9 >> 10)); H60 = (y15 - (y15 >> 4) - (y15 >> 8) - (y15 >> 10)) + ((y49 >> 2) + (y49 >> 4) + (y49 >> 5) + (y49 >> 6) + (y49 >> 10)); H61 = (y47 - (y47 >> 1) - (y47 >> 4) - (y47 >> 5) - (y47 >> 10)) + (y17 - (y17 >> 4) - (y17 >> 6) - (y17 >> 7)); H62 = (y31 - (y31 >> 2) - (y31 >> 6) - (y31 >> 7) - (y31 >> 9)) + ((y33 >> 1) + (y33 >> 3) + (y33 >> 4) + (y33 >> 9)); H63 = ((y63 >> 6) + (y63 >> 7) + (y63 >> 10)) + (y1);
G16 = ((y2 >> 5) + (y2 >> 6) + (y2 >> 9)) - (y62 - (y62 >> 10)); G17 = (y34 - (y34 >> 2) - (y34 >> 7) - (y34 >> 10)) - ((y30 >> 1) + (y30 >> 3) + (y30 >> 5) + (y30 >> 6)); G18 = (y18 - (y18 >> 1) - (y18 >> 4) - (y18 >> 7) - (y18 >> 9)) - (y46 - (y46 >> 4) - (y46 >> 5) - (y46 >> 9)); G19 = (y50 - (y50 >> 5) - (y50 >> 6) - (y50 >> 7) - (y50 >> 8)) - ((y14 >> 2) + (y14 >> 4) + (y14 >> 6) + (y14 >> 7) + (y14 >> 10)); G20 = (y10 - (y10 >> 1) - (y10 >> 2) - (y10 >> 8) - (y10 >> 9) - (y10 >> 10)) - (y54 - (y54 >> 6) - (y54 >> 7) - (y54 >> 8) - (y54 >> 9) - (y54 >> 10)); G21 = (y42 - (y42 >> 3) - (y42 >> 6) - (y42 >> 9)) - ((y22 >> 1) + (y22 >> 7) + (y22 >> 8) + (y22 >> 9)); G22 = ((y26 >> 1) + (y26 >> 4) + (y26 >> 5) + (y26 >> 9)) - (y38 - (y38 >> 3) - (y38 >> 4) - (y38 >> 7) - (y38 >> 9)); G23 = (y58 - (y58 >> 7) - (y58 >> 9) - (y58 >> 10)) - ((y6 >> 3) + (y6 >> 6) + (y6 >> 8) + (y6 >> 9)); G24 = (y6 - (y6 >> 7) - (y6 >> 9) - (y6 >> 10)) + ((y58 >> 3) + (y58 >> 6) + (y58 >> 8) + (y58 >> 9)); G25 = ((y38 >> 1) + (y38 >> 4) + (y38 >> 5) + (y38 >> 9)) + (y26 - (y26 >> 3) - (y26 >> 4) - (y26 >> 7) - (y26 >> 9)); G26 = (y22 - (y22 >> 3) - (y22 >> 6) - (y22 >> 9)) + ((y42 >> 1) + (y42 >> 7) + (y42 >> 8) + (y42 >> 9)); G27 = (y54 - (y54 >> 1) - (y54 >> 2) - (y54 >> 8) - (y54 >> 9) - (y54 >> 10)) + (y10 - (y10 >> 6) - (y10 >> 7) - (y10 >> 8) - (y10 >> 9) - (y10 >> 10)); G28 = (y14 - (y14 >> 5) - (y14 >> 6) - (y14 >> 7) - (y14 >> 8)) + ((y50 >> 2) + (y50 >> 4) + (y50 >> 6) + (y50 >> 7) + (y50 >> 10)); G29 = (y46 - (y46 >> 1) - (y46 >> 4) - (y46 >> 7) - (y46 >> 9)) + (y18 - (y18 >> 4) - (y18 >> 5) - (y18 >> 9)); G30 = (y30 - (y30 >> 2) - (y30 >> 7) - (y30 >> 10)) + ((y34 >> 1) + (y34 >> 3) + (y34 >> 5) + (y34 >> 6)); G31 = ((y62 >> 5) + (y62 >> 6) + (y62 >> 9)) + (y2 - (y2 >> 10)); G32 = H32+H33; G33 = H32-H33; G34 = H35-H34; G35 = H35+H34; G36 = H36+H37; G37 = H36-H37; G38 = H39-H38; G39 = H39+H38; G40 = H40+H41; G41 = H40-H41; G42 = H43-H42; G43 = H43+H42; G44 = H44+H45; G45 = H44-H45; G46 = H47-H46; G47 = H47+H46; G48 = H48+H49; G49 = H48-H49; G50 = H51-H50; G51 = H51+H50; G52 = H52+H53; G53 = H52-H53; G54 = H55-H54; G55 = H55+H54; G56 = H56+H57; G57 = H56-H57; G58 = H59-H58; G59 = H59+H58; G60 = H60+H61; G61 = H60-H61; G62 = H63-H62; G63 = H63+H62;
F8 = ((y4 >> 4) + (y4 >> 5) + (y4 >> 8)) - (y60 - (y60 >> 8) - (y60 >> 10)); F9 = ((y36 >> 1) + (y36 >> 2) + (y36 >> 6) + (y36 >> 7)) - ((y28 >> 1) + (y28 >> 3) + (y28 >> 7) + (y28 >> 9)); F10 = ((y20 >> 2) + (y20 >> 3) + (y20 >> 4) + (y20 >> 5) + (y20 >> 9) + (y20 >> 10)) - (y44 - (y44 >> 4) - (y44 >> 5) - (y44 >> 6) - (y44 >> 7) - (y44 >> 10)); F11 = (y52 - (y52 >> 5) - (y52 >> 7) - (y52 >> 8)) - ((y12 >> 2) + (y12 >> 5) + (y12 >> 7) + (y12 >> 10)); F12 = (y12 - (y12 >> 5) - (y12 >> 7) - (y12 >> 8)) + ((y52 >> 2) + (y52 >> 5) + (y52 >> 7) + (y52 >> 10)); F13 = ((y44 >> 2) + (y44 >> 3) + (y44 >> 4) + (y44 >> 5) + (y44 >> 9) + (y44 >> 10)) + (y20 - (y20 >> 4) - (y20 >> 5) - (y20 >> 6) - (y20 >> 7) - (y20 >> 10)); F14 = ((y28 >> 1) + (y28 >> 2) + (y28 >> 6) + (y28 >> 7)) + ((y36 >> 1) + (y36 >> 3) + (y36 >> 7) + (y36 >> 9)); F15 = ((y60 >> 4) + (y60 >> 5) + (y60 >> 8)) + (y4 - (y4 >> 8) - (y4 >> 10)); F16 = G16+G17; F17 = G16-G17; F18 = G19-G18; F19 = G19+G18; F20 = G20+G21; F21 = G20-G21; F22 = G23-G22; F23 = G23+G22; F24 = G24+G25; F25 = G24-G25; F26 = G27-G26; F27 = G27+G26; F28 = G28+G29; F29 = G28-G29; F30 = G31-G30; F31 = G31+G30; F33 = ((G62 >> 4) + (G62 >> 5) + (G62 >> 8)) - (G33 - (G33 >> 8) - (G33 >> 10)); F34 = - (G61 - (G61 >> 8) - (G61 >> 10)) - ((G34 >> 4) + (G34 >> 5) + (G34 >> 8)); F37 = ((G58 >> 1) + (G58 >> 2) + (G58 >> 6) + (G58 >> 7)) - ((G37 >> 1) + (G37 >> 3) + (G37 >> 7) + (G37 >> 9)); F38 = - ((G57 >> 1) + (G57 >> 3) + (G57 >> 7) + (G57 >> 9)) - ((G38 >> 1) + (G38 >> 2) + (G38 >> 6) + (G38 >> 7)); F41 = ((G54 >> 2) + (G54 >> 3) + (G54 >> 4) + (G54 >> 5) + (G54 >> 9) + (G54 >> 10)) - (G41 - (G41 >> 4) - (G41 >> 5) - (G41 >> 6) - (G41 >> 7) - (G41 >> 10)); F42 = - (G53 - (G53 >> 4) - (G53 >> 5) - (G53 >> 6) - (G53 >> 7) - (G53 >> 10)) - ((G42 >> 2) + (G42 >> 3) + (G42 >> 4) + (G42 >> 5) + (G42 >> 9) + (G42 >> 10)); F45 = (G50 - (G50 >> 5) - (G50 >> 7) - (G50 >> 8)) - ((G45 >> 2) + (G45 >> 5) + (G45 >> 7) + (G45 >> 10)); F46 = - ((G49 >> 2) + (G49 >> 5) + (G49 >> 7) + (G49 >> 10)) - (G46 - (G46 >> 5) - (G46 >> 7) - (G46 >> 8)); F49 = (G49 - (G49 >> 5) - (G49 >> 7) - (G49 >> 8)) - ((G46 >> 2) + (G46 >> 5) + (G46 >> 7) + (G46 >> 10)); F50 = ((G50 >> 2) + (G50 >> 5) + (G50 >> 7) + (G50 >> 10)) + (G45 - (G45 >> 5) - (G45 >> 7) - (G45 >> 8)); F53 = ((G53 >> 2) + (G53 >> 3) + (G53 >> 4) + (G53 >> 5) + (G53 >> 9) + (G53 >> 10)) - (G42 - (G42 >> 4) - (G42 >> 5) - (G42 >> 6) - (G42 >> 7) - (G42 >> 10)); F54 = (G54 - (G54 >> 4) - (G54 >> 5) - (G54 >> 6) - (G54 >> 7) - (G54 >> 10)) + ((G41 >> 2) + (G41 >> 3) + (G41 >> 4) + (G41 >> 5) + (G41 >> 9) + (G41 >> 10)); F57 = ((G57 >> 1) + (G57 >> 2) + (G57 >> 6) + (G57 >> 7)) - ((G38 >> 1) + (G38 >> 3) + (G38 >> 7) + (G38 >> 9)); F58 = ((G58 >> 1) + (G58 >> 3) + (G58 >> 7) + (G58 >> 9)) + ((G37 >> 1) + (G37 >> 2) + (G37 >> 6) + (G37 >> 7)); F61 = ((G61 >> 4) + (G61 >> 5) + (G61 >> 8)) - (G34 - (G34 >> 8) - (G34 >> 10)); F62 = (G62 - (G62 >> 8) - (G62 >> 10)) + ((G33 >> 4) + (G33 >> 5) + (G33 >> 8));
E4 = ((y8 >> 3) + (y8 >> 4) + (y8 >> 7)) - (y56 - (y56 >> 6) - (y56 >> 8)); E5 = (y40 - (y40 >> 3) - (y40 >> 5) - (y40 >> 7) - (y40 >> 8) - (y40 >> 10)) - ((y24 >> 1) + (y24 >> 5) + (y24 >> 6) + (y24 >> 7) + (y24 >> 10)); E6 = (y24 - (y24 >> 3) - (y24 >> 5) - (y24 >> 7) - (y24 >> 8) - (y24 >> 10)) + ((y40 >> 1) + (y40 >> 5) + (y40 >> 6) + (y40 >> 7) + (y40 >> 10)); E7 = ((y56 >> 3) + (y56 >> 4) + (y56 >> 7)) + (y8 - (y8 >> 6) - (y8 >> 8)); E8 = F8+F9; E9 = F8-F9; E10 = F11-F10; E11 = F11+F10; E12 = F12+F13; E13 = F12-F13; E14 = F15-F14; E15 = F15+F14; E17 = ((F30 >> 3) + (F30 >> 4) + (F30 >> 7)) - (F17 - (F17 >> 6) - (F17 >> 8)); E18 = - (F29 - (F29 >> 6) - (F29 >> 8)) - ((F18 >> 3) + (F18 >> 4) + (F18 >> 7)); E21 = (F26 - (F26 >> 3) - (F26 >> 5) - (F26 >> 7) - (F26 >> 8) - (F26 >> 10)) - ((F21 >> 1) + (F21 >> 5) + (F21 >> 6) + (F21 >> 7) + (F21 >> 10)); E22 = - ((F25 >> 1) + (F25 >> 5) + (F25 >> 6) + (F25 >> 7) + (F25 >> 10)) - (F22 - (F22 >> 3) - (F22 >> 5) - (F22 >> 7) - (F22 >> 8) - (F22 >> 10)); E25 = (F25 - (F25 >> 3) - (F25 >> 5) - (F25 >> 7) - (F25 >> 8) - (F25 >> 10)) - ((F22 >> 1) + (F22 >> 5) + (F22 >> 6) + (F22 >> 7) + (F22 >> 10)); E26 = ((F26 >> 1) + (F26 >> 5) + (F26 >> 6) + (F26 >> 7) + (F26 >> 10)) + (F21 - (F21 >> 3) - (F21 >> 5) - (F21 >> 7) - (F21 >> 8) - (F21 >> 10)); E29 = ((F29 >> 3) + (F29 >> 4) + (F29 >> 7)) - (F18 - (F18 >> 6) - (F18 >> 8)); E30 = (F30 - (F30 >> 6) - (F30 >> 8)) + ((F17 >> 3) + (F17 >> 4) + (F17 >> 7)); E32 = G32+G35; E33 = F33+F34; E34 = F33-F34; E35 = G32-G35; E36 = G39-G36; E37 = F38-F37; E38 = F38+F37; E39 = G39+G36; E40 = G40+G43; E41 = F41+F42; E42 = F41-F42; E43 = G40-G43; E44 = G47-G44; E45 = F46-F45; E46 = F46+F45; E47 = G47+G44; E48 = G48+G51; E49 = F49+F50; E50 = F49-F50; E51 = G48-G51; E52 = G55-G52; E53 = F54-F53; E54 = F54+F53; E55 = G55+G52; E56 = G56+G59; E57 = F57+F58; E58 = F57-F58; E59 = G56-G59; E60 = G63-G60; E61 = F62-F61; E62 = F62+F61; E63 = G63+G60;
iTmp = (y0+y32); D0 = iTmp - (iTmp >> 2) - (iTmp >> 5) - (iTmp >> 7) - (iTmp >> 8); iTmp = (y0-y32); D1 = iTmp - (iTmp >> 2) - (iTmp >> 5) - (iTmp >> 7) - (iTmp >> 8); D2 = ((y16 >> 2) + (y16 >> 3) + (y16 >> 7)) - (y48 - (y48 >> 4) - (y48 >> 7) - (y48 >> 8) - (y48 >> 9)); D3 = (y16 - (y16 >> 4) - (y16 >> 7) - (y16 >> 8) - (y16 >> 9)) + ((y48 >> 2) + (y48 >> 3) + (y48 >> 7)); D4 = E4+E5; D5 = E4-E5; D6 = E7-E6; D7 = E7+E6; D9 = ((E14 >> 2) + (E14 >> 3) + (E14 >> 7)) - (E9 - (E9 >> 4) - (E9 >> 7) - (E9 >> 8) - (E9 >> 9)); D10 = - (E13 - (E13 >> 4) - (E13 >> 7) - (E13 >> 8) - (E13 >> 9)) - ((E10 >> 2) + (E10 >> 3) + (E10 >> 7)); D13 = ((E13 >> 2) + (E13 >> 3) + (E13 >> 7)) - (E10 - (E10 >> 4) - (E10 >> 7) - (E10 >> 8) - (E10 >> 9)); D14 = (E14 - (E14 >> 4) - (E14 >> 7) - (E14 >> 8) - (E14 >> 9)) + ((E9 >> 2) + (E9 >> 3) + (E9 >> 7)); D16 = F16+F19; D19 = F16-F19; D20 = F23-F20; D23 = F23+F20; D24 = F24+F27; D27 = F24-F27; D28 = F31-F28; D31 = F31+F28; D17 = E17+E18; D18 = E17-E18; D21 = E22-E21; D22 = E22+E21; D25 = E25+E26; D26 = E25-E26; D29 = E30-E29; D30 = E30+E29; D34 = ((E61 >> 3) + (E61 >> 4) + (E61 >> 7)) - (E34 - (E34 >> 6) - (E34 >> 8)); D35 = ((E60 >> 3) + (E60 >> 4) + (E60 >> 7)) - (E35 - (E35 >> 6) - (E35 >> 8)); D36 = - (E59 - (E59 >> 6) - (E59 >> 8)) - ((E36 >> 3) + (E36 >> 4) + (E36 >> 7)); D37 = - (E58 - (E58 >> 6) - (E58 >> 8)) - ((E37 >> 3) + (E37 >> 4) + (E37 >> 7)); D42 = (E53 - (E53 >> 3) - (E53 >> 5) - (E53 >> 7) - (E53 >> 8) - (E53 >> 10)) - ((E42 >> 1) + (E42 >> 5) + (E42 >> 6) + (E42 >> 7) + (E42 >> 10)); D43 = (E52 - (E52 >> 3) - (E52 >> 5) - (E52 >> 7) - (E52 >> 8) - (E52 >> 10)) - ((E43 >> 1) + (E43 >> 5) + (E43 >> 6) + (E43 >> 7) + (E43 >> 10)); D44 = - ((E51 >> 1) + (E51 >> 5) + (E51 >> 6) + (E51 >> 7) + (E51 >> 10)) - (E44 - (E44 >> 3) - (E44 >> 5) - (E44 >> 7) - (E44 >> 8) - (E44 >> 10)); D45 = - ((E50 >> 1) + (E50 >> 5) + (E50 >> 6) + (E50 >> 7) + (E50 >> 10)) - (E45 - (E45 >> 3) - (E45 >> 5) - (E45 >> 7) - (E45 >> 8) - (E45 >> 10)); D50 = (E50 - (E50 >> 3) - (E50 >> 5) - (E50 >> 7) - (E50 >> 8) - (E50 >> 10)) - ((E45 >> 1) + (E45 >> 5) + (E45 >> 6) + (E45 >> 7) + (E45 >> 10)); D51 = (E51 - (E51 >> 3) - (E51 >> 5) - (E51 >> 7) - (E51 >> 8) - (E51 >> 10)) - ((E44 >> 1) + (E44 >> 5) + (E44 >> 6) + (E44 >> 7) + (E44 >> 10)); D52 = ((E52 >> 1) + (E52 >> 5) + (E52 >> 6) + (E52 >> 7) + (E52 >> 10)) + (E43 - (E43 >> 3) - (E43 >> 5) - (E43 >> 7) - (E43 >> 8) - (E43 >> 10)); D53 = ((E53 >> 1) + (E53 >> 5) + (E53 >> 6) + (E53 >> 7) + (E53 >> 10)) + (E42 - (E42 >> 3) - (E42 >> 5) - (E42 >> 7) - (E42 >> 8) - (E42 >> 10)); D58 = ((E58 >> 3) + (E58 >> 4) + (E58 >> 7)) - (E37 - (E37 >> 6) - (E37 >> 8)); D59 = ((E59 >> 3) + (E59 >> 4) + (E59 >> 7)) - (E36 - (E36 >> 6) - (E36 >> 8)); D60 = (E60 - (E60 >> 6) - (E60 >> 8)) + ((E35 >> 3) + (E35 >> 4) + (E35 >> 7)); D61 = (E61 - (E61 >> 6) - (E61 >> 8)) + ((E34 >> 3) + (E34 >> 4) + (E34 >> 7));
C0 = D0+D3; C3 = D0-D3; C8 = E8+E11; C11 = E8-E11; C12 = E15-E12; C15 = E15+E12; C1 = D1+D2; C2 = D1-D2; C9 = D9+D10; C10 = D9-D10; C13 = D14-D13; C14 = D14+D13; iTmp = (D6-D5); C5 = iTmp - (iTmp >> 2) - (iTmp >> 5) - (iTmp >> 7) - (iTmp >> 8); iTmp = (D6+D5); C6 = iTmp - (iTmp >> 2) - (iTmp >> 5) - (iTmp >> 7) - (iTmp >> 8); C18 = ((D29 >> 2) + (D29 >> 3) + (D29 >> 7)) - (D18 - (D18 >> 4) - (D18 >> 7) - (D18 >> 8) - (D18 >> 9)); C20 = - (D27 - (D27 >> 4) - (D27 >> 7) - (D27 >> 8) - (D27 >> 9)) - ((D20 >> 2) + (D20 >> 3) + (D20 >> 7)); C26 = - (D21 - (D21 >> 4) - (D21 >> 7) - (D21 >> 8) - (D21 >> 9)) + ((D26 >> 2) + (D26 >> 3) + (D26 >> 7)); C28 = ((D19 >> 2) + (D19 >> 3) + (D19 >> 7)) + (D28 - (D28 >> 4) - (D28 >> 7) - (D28 >> 8) - (D28 >> 9)); C19 = ((D28 >> 2) + (D28 >> 3) + (D28 >> 7)) - (D19 - (D19 >> 4) - (D19 >> 7) - (D19 >> 8) - (D19 >> 9)); C21 = -(D26 - (D26 >> 4) - (D26 >> 7) - (D26 >> 8) - (D26 >> 9)) - ((D21 >> 2) + (D21 >> 3) + (D21 >> 7)); C27 = - (D20 - (D20 >> 4) - (D20 >> 7) - (D20 >> 8) - (D20 >> 9)) + ((D27 >> 2) + (D27 >> 3) + (D27 >> 7)); C29 = ((D18 >> 2) + (D18 >> 3) + (D18 >> 7)) + (D29 - (D29 >> 4) - (D29 >> 7) - (D29 >> 8) - (D29 >> 9)); C32 = E32+E39; C39 = E32-E39; C40 = E47-E40; C47 = E47+E40; C48 = E48+E55; C55 = E48-E55; C56 = E63-E56; C63 = E63+E56; C33 = E33+E38; C38 = E33-E38; C41 = E46-E41; C46 = E46+E41; C49 = E49+E54; C54 = E49-E54; C57 = E62-E57; C62 = E62+E57; C34 = D34+D37; C37 = D34-D37; C42 = D45-D42; C45 = D45+D42; C50 = D50+D53; C53 = D50-D53; C58 = D61-D58; C61 = D61+D58; C35 = D35+D36; C36 = D35-D36; C43 = D44-D43; C44 = D44+D43; C51 = D51+D52; C52 = D51-D52; C59 = D60-D59; C60 = D60+D59;
B0 = C0+D7; B7 = C0-D7; B1 = C1+C6; B6 = C1-C6; B2 = C2+C5; B5 = C2-C5; B3 = C3+D4; B4 = C3-D4; iTmp = (C13-C10); B10 = iTmp - (iTmp >> 2) - (iTmp >> 5) - (iTmp >> 7) - (iTmp >> 8); iTmp = (C13+C10); B13 = iTmp - (iTmp >> 2) - (iTmp >> 5) - (iTmp >> 7) - (iTmp >> 8); iTmp = (C12-C11); B11 = iTmp - (iTmp >> 2) - (iTmp >> 5) - (iTmp >> 7) - (iTmp >> 8); iTmp = (C12+C11); B12 = iTmp - (iTmp >> 2) - (iTmp >> 5) - (iTmp >> 7) - (iTmp >> 8); B16 = D16+D23; B23 = D16-D23; B24 = D31-D24; B31 = D31+D24; B17 = D17+D22; B22 = D17-D22; B25 = D30-D25; B30 = D30+D25; B18 = C18+C21; B21 = C18-C21; B26 = C29-C26; B29 = C29+C26; B19 = C19+C20; B20 = C19-C20; B27 = C28-C27; B28 = C28+C27; B36 = ((C59 >> 2) + (C59 >> 3) + (C59 >> 7)) - (C36 - (C36 >> 4) - (C36 >> 7) - (C36 >> 8) - (C36 >> 9)); B40 = - (C55 - (C55 >> 4) - (C55 >> 7) - (C55 >> 8) - (C55 >> 9)) - ((C40 >> 2) + (C40 >> 3) + (C40 >> 7)); B52 = - (C43 - (C43 >> 4) - (C43 >> 7) - (C43 >> 8) - (C43 >> 9)) + ((C52 >> 2) + (C52 >> 3) + (C52 >> 7)); B56 = ((C39 >> 2) + (C39 >> 3) + (C39 >> 7)) + (C56 - (C56 >> 4) - (C56 >> 7) - (C56 >> 8) - (C56 >> 9)); B37 = ((C58 >> 2) + (C58 >> 3) + (C58 >> 7)) - (C37 - (C37 >> 4) - (C37 >> 7) - (C37 >> 8) - (C37 >> 9)); B41 = - (C54 - (C54 >> 4) - (C54 >> 7) - (C54 >> 8) - (C54 >> 9)) - ((C41 >> 2) + (C41 >> 3) + (C41 >> 7)); B53 = - (C42 - (C42 >> 4) - (C42 >> 7) - (C42 >> 8) - (C42 >> 9)) + ((C53 >> 2) + (C53 >> 3) + (C53 >> 7)); B57 = ((C38 >> 2) + (C38 >> 3) + (C38 >> 7)) + (C57 - (C57 >> 4) - (C57 >> 7) - (C57 >> 8) - (C57 >> 9)); B38 = ((C57 >> 2) + (C57 >> 3) + (C57 >> 7)) - (C38 - (C38 >> 4) - (C38 >> 7) - (C38 >> 8) - (C38 >> 9)); B42 = - (C53 - (C53 >> 4) - (C53 >> 7) - (C53 >> 8) - (C53 >> 9)) - ((C42 >> 2) + (C42 >> 3) + (C42 >> 7)); B54 = - (C41 - (C41 >> 4) - (C41 >> 7) - (C41 >> 8) - (C41 >> 9)) + ((C54 >> 2) + (C54 >> 3) + (C54 >> 7)); B58 = ((C37 >> 2) + (C37 >> 3) + (C37 >> 7)) + (C58 - (C58 >> 4) - (C58 >> 7) - (C58 >> 8) - (C58 >> 9)); B39 = ((C56 >> 2) + (C56 >> 3) + (C56 >> 7)) - (C39 - (C39 >> 4) - (C39 >> 7) - (C39 >> 8) - (C39 >> 9)); B43 = - (C52 - (C52 >> 4) - (C52 >> 7) - (C52 >> 8) - (C52 >> 9)) - ((C43 >> 2) + (C43 >> 3) + (C43 >> 7)); B55 = - (C40 - (C40 >> 4) - (C40 >> 7) - (C40 >> 8) - (C40 >> 9)) + ((C55 >> 2) + (C55 >> 3) + (C55 >> 7)); B59 = ((C36 >> 2) + (C36 >> 3) + (C36 >> 7)) + (C59 - (C59 >> 4) - (C59 >> 7) - (C59 >> 8) - (C59 >> 9));
A0 = B0+C15; A15 = B0-C15; A1 = B1+C14; A14 = B1-C14; A2 = B2+B13; A13 = B2-B13; A3 = B3+B12; A12 = B3-B12; A4 = B4+B11; A11 = B4-B11; A5 = B5+B10; A10 = B5-B10; A6 = B6+C9; A9 = B6-C9; A7 = B7+C8; A8 = B7-C8; iTmp = (B27-B20); A20 = iTmp - (iTmp >> 2) - (iTmp >> 5) - (iTmp >> 7) - (iTmp >> 8); iTmp = (B27+B20); A27 = iTmp - (iTmp >> 2) - (iTmp >> 5) - (iTmp >> 7) - (iTmp >> 8); iTmp = (B26-B21); A21 = iTmp - (iTmp >> 2) - (iTmp >> 5) - (iTmp >> 7) - (iTmp >> 8); iTmp = (B26+B21); A26 = iTmp - (iTmp >> 2) - (iTmp >> 5) - (iTmp >> 7) - (iTmp >> 8); iTmp = (B25-B22); A22 = iTmp - (iTmp >> 2) - (iTmp >> 5) - (iTmp >> 7) - (iTmp >> 8); iTmp = (B25+B22); A25 = iTmp - (iTmp >> 2) - (iTmp >> 5) - (iTmp >> 7) - (iTmp >> 8); iTmp = (B24-B23); A23 = iTmp - (iTmp >> 2) - (iTmp >> 5) - (iTmp >> 7) - (iTmp >> 8); iTmp = (B24+B23); A24 = iTmp - (iTmp >> 2) - (iTmp >> 5) - (iTmp >> 7) - (iTmp >> 8); A32 = C32+C47; A47 = C32-C47; A48 = C63-C48; A63 = C63+C48; A33 = C33+C46; A46 = C33-C46; A49 = C62-C49; A62 = C62+C49; A34 = C34+C45; A45 = C34-C45; A50 = C61-C50; A61 = C61+C50; A35 = C35+C44; A44 = C35-C44; A51 = C60-C51; A60 = C60+C51; A36 = B36+B43; A43 = B36-B43; A52 = B59-B52; A59 = B59+B52; A37 = B37+B42; A42 = B37 -B42; A53 = B58-B53; A58 = B58+B53; A38 = B38+B41; A41 = B38-B41; A54 = B57-B54; A57 = B57+B54; A39 = B39+B40; A40 = B39-B40; A55 = B56-B55; A56 = B56+B55;
O0 = A0+B31; O31 = A0-B31; O1 = A1+B30; O30 = A1-B30; O2 = A2+B29; O29 = A2-B29; O3 = A3+B28; O28 = A3-B28; O4 = A4+A27; O27 = A4-A27; O5 = A5+A26; O26 = A5-A26; O6 = A6+A25; O25 = A6-A25; O7 = A7+A24; O24 = A7-A24; O8 = A8+A23; O23 = A8-A23; O9 = A9+A22; O22 = A9-A22; O10 = A10+A21; O21 = A10-A21; O11 = A11+A20; O20 = A11-A20; O12 = A12+B19; O19 = A12-B19; O13 = A13+B18; O18 = A13-B18; O14 = A14+B17; O17 = A14-B17; O15 = A15+B16; O16 = A15-B16; iTmp = (A55-A40); O40 = iTmp - (iTmp >> 2) - (iTmp >> 5) - (iTmp >> 7) - (iTmp >> 8); iTmp = (A55+A40); O55 = iTmp- (iTmp >> 2) - (iTmp >> 5) - (iTmp >> 7) - (iTmp >> 8); iTmp = (A54-A41); O41 = iTmp - (iTmp >> 2) - (iTmp >> 5) - (iTmp >> 7) - (iTmp >> 8); iTmp = (A54+A41); O54 = iTmp - (iTmp >> 2) - (iTmp >> 5) - (iTmp >> 7) - (iTmp >> 8); iTmp = (A53-A42); O42 = iTmp - (iTmp >> 2) - (iTmp >> 5) - (iTmp >> 7) - (iTmp >> 8); iTmp = (A53+A42); O53 = iTmp - (iTmp >> 2) - (iTmp >> 5) - (iTmp >> 7) - (iTmp >> 8); iTmp = (A52-A43); O43 = iTmp - (iTmp >> 2) - (iTmp >> 5) - (iTmp >> 7) - (iTmp >> 8); iTmp = (A52+A43); O52 = iTmp - (iTmp >> 2) - (iTmp >> 5) - (iTmp >> 7) - (iTmp >> 8); iTmp = (A51-A44); O44 = iTmp - (iTmp >> 2) - (iTmp >> 5) - (iTmp >> 7) - (iTmp >> 8); iTmp = (A51+A44); O51 = iTmp - (iTmp >> 2) - (iTmp >> 5) - (iTmp >> 7) - (iTmp >> 8); iTmp = (A50-A45); O45 = iTmp - (iTmp >> 2) - (iTmp >> 5) - (iTmp >> 7) - (iTmp >> 8); iTmp = (A50+A45); O50 = iTmp - (iTmp >> 2) - (iTmp >> 5) - (iTmp >> 7) - (iTmp >> 8); iTmp = (A49-A46); O46 = iTmp - (iTmp >> 2) - (iTmp >> 5) - (iTmp >> 7) - (iTmp >> 8); iTmp = (A49+A46); O49 = iTmp - (iTmp >> 2) - (iTmp >> 5) - (iTmp >> 7) - (iTmp >> 8); iTmp = (A48-A47); O47 = iTmp - (iTmp >> 2) - (iTmp >> 5) - (iTmp >> 7) - (iTmp >> 8); iTmp = (A48+A47); O48 = iTmp - (iTmp >> 2) - (iTmp >> 5) - (iTmp >> 7) - (iTmp >> 8);
x0 = O0+A63; x63 = O0-A63; x1 = O1+A62; x62 = O1-A62; x2 = O2+A61; x61 = O2-A61; x3 = O3+A60; x60 = O3-A60; x4 = O4+A59; x59 = O4-A59; x5 = O5+A58; x58 = O5-A58; x6 = O6+A57; x57 = O6-A57; x7 = O7+A56; x56 = O7-A56; x8 = O8+O55; x55 = O8-O55; x9 = O9+O54; x54 = O9-O54; x10 = O10+O53; x53 = O10-O53; x11 = O11+O52; x52 = O11-O52; x12 = O12+O51; x51 = O12-O51; x13 = O13+O50; x50 = O13-O50; x14 = O14+O49; x49 = O14-O49; x15 = O15+O48; x48 = O15-O48; x16 = O16+O47; x47 = O16-O47; x17 = O17+O46; x46 = O17-O46; x18 = O18+O45; x45 = O18-O45; x19 = O19+O44; x44 = O19-O44; x20 = O20+O43; x43 = O20-O43; x21 = O21+O42; x42 = O21-O42; x22 = O22+O41; x41 = O22-O41; x23 = O23+O40; x40 = O23-O40; x24 = O24+A39; x39 = O24-A39; x25 = O25+A38; x38 = O25-A38; x26 = O26+A37; x37 = O26-A37; x27 = O27+A36; x36 = O27-A36; x28 = O28+A35; x35 = O28-A35; x29 = O29+A34; x34 = O29-A34; x30 = O30+A33; x33 = O30-A33; x31 = O31+A32; x32 = O31-A32;
도 104은 본 발명의 또 다른 실시예에 따른 이산 코사인 변환의 흐름도(flow graph)를 도시한다.
도 104를 참조하면, x0 내지 x31은 입력값들을 나타낸다. y0 내지 y31은 이산 코사인 변환의 출력값들을 나타낸다. 변환시에 데이터 처리 방향은 좌측에서 우측이며, 역변환시에 데이터 처리 방향은 우측에서 좌측이다. 점에서 교차하는 2개의 라인은 2개의 수의 덧셈을 나타낸다. '-'는 부정(negation)을 나타낸다. 각 라인 위의 값 R(θ)는 도 16에 도시된 바와 같은 버터플라이 구조에 기초한 연산 과정을 나타낸다. 또한 도 104에서, 도면 부호 10410은 4x4 포인트 이산 코사인 변환, 도면 부호 10420은 8x8 포인트 이산 코사인 변환, 도면 부호 10430은 16x16 포인트 이산 코사인 변환을 수행하는 부분을 나타낸다.
전술한 본 발명의 또 다른 실시예와 유사하게, 도 104에 도시된 각 포인트 연산을 위한 원소들 중 삼각함수 sin 및 cos에 기초한 값들을 분모가 2의 거듭 제곱 형태인 소정의 유리수 값들로 치환된 값을 이용할 수 있다.
16 포인트 이산 코사인 변환에 이용되는 cos 및 sin 값들은 다음의 값들로 대체될 수 있다.
cos(pi*7/32) ~= 49/64; sin(pi*7/32) ~= 40/64; cos(pi*11/32) ~= 30/64; sin(pi*11/32) ~= 56/64; cos(pi*3/32) ~= 61/64; sin(pi*3/32) ~= 18/64; cos(pi*15/32) ~= 6/64; sin(pi*15/32) ~= 63/64; cos(pi*14/32) ~= 12/64; sin(pi*14/32) ~= 62/64; cos(pi*10/32) ~= 35/64; sin(pi*10/32) ~= 53/64; cos(pi*8/32) ~= 45/64; sin(pi*8/32) ~= 45/64; cos(pi*12/32) ~= 24/64; sin(pi*12/32) ~= 59/64
이와 같이 대체된 cos 및 sin 값을 이용하여 도 104의 16 포인트 이산 코사인 변환을 수행하는 단계는, X0 내지 X15은 변환되어야 할 입력값, B0 내지 B15, C0 내지 C15, D0 내지 D15, E0 내지 E15, F0 내지 F15, G0 내지 G15은 중간값, Y0 내지 Y15은 변환된 값을 나타낸다고 할 때, 다음의 연산 과정과 같이 표현될 수 있다.
// stage 1
A0 = x0 + x15; A1 = x1 + x14; A2 = x2 + x13; A3 = x3 + x12; A4 = x4 + x11; A5 = x5 + x10; A6 = x6 + x9; A7 = x7 + x8; A8 = x7 - x8; A9 = x6 - x9; A10 = x5 - x10; A11 = x4 - x11; A12 = x3 - x12; A13 = x2 - x13; A14 = x1 - x14; A15 = x0 - x15;
//stage 2
B0 = A0 + A7; B7 = A0 - A7; B1 = A1 + A6; B6 = A1 - A6; B2 = A2 + A5; B5 = A2 - A5; B3 = A3 + A4; B4 = A3 - A4; B8 = (49*A8 + 40*A15) >> 6; B15 = (-40*A8 + 49*A15) >> 6; B9 = (30*A9 - 56*A14) >> 6; B14 = (56*A9 + 30*A14) >> 6; B10 = (61*A10 + 18*A13) >> 6; B13 = (-18*A10 + 61*A13) >> 6; B11 = (6*A11 - 63*A12) >> 6; B12 = (63*A11 + 6*A12) >> 6;
//stage 3
C0 = B0 + B3; C3 = B0 - B3; C1 = B1 + B2; C2 = B1 - B2; C4 = (6*B4 + 31*B7) >> 5; C7 = (-31*B4 + 6*B7) >> 5; C5 = (35*B5 + 53*B6) >> 6; C6 = (-53*B5 + 35*B6) >> 6; C8 = B8 + B11; C11 = B8 - B11; C9 = B9 + B10; C10 = B9 - B10; C12 = B12 + B15; C15 = B12 - B15; C13 = B13 + B14; C14 = B13 - B14;
//stage 4
D0 = (45*(C0 + C1)) >> 6; D1 = (45*(-C0 + C1)) >> 6; D2 = (24*C2 + 59*C3) >> 6; D3 = (-59*C2 + 24*C3) >> 6; D4 = C4 + C5; D5 = C4 - C5; D6 = -C6 + C7; D7 = C6 + C7; D8 = C8 + C14; D14 = C8 - C14; D9 = C9 + C15; D15 = C9 - C15; D10 = C10 + C11; D11 = C10 - C11; D12 = C12 + C13; D13 = C12 - C13;
//stage 5
E5 = (45*(D5 + D7)) >> 6; E7 = (45*(-D5 + D7)) >> 6; E8 = (24*D8 - 59*D9) >> 6; E9 = (59*D8 + 24*D9) >> 6; E11 = (45*(D11 + D12)) >> 6; E12 = (45*(-D11 + D12)) >> 6; E14 = (24*D14 - 59*D15) >> 6; E15 = (59*D14 + 24*D15) >> 6;
//
y0 = D0; y8 = -D1; y4 = D2; y12 = D3; y2 = D4; y6 = E5; y14 = D6; y10 = -E7; y3 = E8; y13 = E9; y9 = D10; y15 = E11; y1 = E12; y7 = D13; y11 = -E14; y5
이에 대응되는 16 포인트 역 이산 코사인 변환 과정은 다음의 연산 과정과 같이 표현된다. 다음의 연산 과정에서 Y0 내지 Y15은 역변환되어야 할 입력값, B0 내지 B15, C0 내지 C15, D0 내지 D15, E0 내지 E15, F0 내지 F15, G0 내지 G15은 중간값, X0 내지 X15는 역변환된 값을 나타낸다.
D0 = y0; D1 = -y8; D2 = y4; D3 = y12; D4 = y2; E5 = y6 ; D6 = y14; E7 = -y10; E8 = y3; E9 = y13; D10 = y9; E11 = y15; E12 = y1; D13 = y7; E14 = -y11; E15 = y5;
//stage 5
D5 = (45*(E5 - E7) >> 6); D7 = (45*(E5 + E7) >> 6); D8 = (24*E8 + 59*E9) >> 6; D9 = (-59*E8 + 24*E9) >> 6; D11 = (45*(E11 - E12) >> 6); D12 = (45*(E11 + E12) >> 6); D14 = (24*E14 + 59*E15) >> 6; D15 = (-59*E14 + 24*E15) >> 6;
//stage 4
C0 = (45*(D0 - D1) >> 6); C1 = (45*(D0 + D1) >> 6); C2 = (24*D2 - 59*D3) >> 6; C3 = (59*D2 + 24*D3) >> 6; C4 = D4 + D5; C5 = D4 - D5; C6 = -D6 + D7; C7 = D6 + D7; C8 = D8 + D14; C14 = D8 - D14; C9 = D9 + D15; C15 = D9 - D15; C10 = D10 + D11; C11 = D10 - D11; C12 = D12 + D13; C13 = D12 - D13;
//stage 3
B0 = C0 + C3; B3 = C0 - C3; B1 = C1 + C2; B2 = C1 - C2; B4 = (6*C4 - 31*C7) >> 5; B7 = (31*C4 + 6*C7) >> 5; B5 = (35*C5 - 53*C6) >> 6; B6 = (53*C5 + 35*C6) >> 6; B8 = C8 + C11; B11 = C8 - C11; B9 = C9 + C10; B10 = C9 - C10; B12 = C12 + C15; B15 = C12 - C15; B13 = C13 + C14; B14 = C13 - C14;
//stage 2
A0 = B0 + B7; A7 = B0 - B7; A1 = B1 + B6; A6 = B1 - B6; A2 = B2 + B5; A5 = B2 - B5; A3 = B3 + B4; A4 = B3 - B4; A8 = (49*B8 - 40*B15) >> 6; A15 = (40*B8 + 49*B15) >> 6; A9 = (30*B9 + 56*B14) >> 6; A14 = (-56*B9 + 30*B14) >> 6; A10 = (61*B10 - 18*B13) >> 6; A13 = (18*B10 + 61*B13) >> 6; A11 = (6*B11 + 63*B12) >> 6; A12 = (-63*B11 + 6*B12) >> 6;
//stage 1
x0 = A0 + A15; x1 = A1 + A14; x2 = A2 + A13; x3 = A3 + A12; x4 = A4 + A11; x5 = A5 + A10; x6 = A6 + A9; x7 = A7 + A8; x8 = A7 - A8; x9 = A6 - A9; x10 = A5 - A10; x11 = A4 - A11; x12 = A3 - A12; x13 = A2 - A13; x14 = A1 - A14; x15 = A0
전술한 도 104에 도시된 이산 코사인 변환에 기초하여, cos 및 sin 값을 분모가 2의 거듭제곱꼴인 형태로 치환하여 이산 코사인 변환을 수행하는 경우 전술한 도 3의 단계 350과 유사하게, 이산 코사인 변환에 이용되는 원래의 NxN 변환 행렬(Original_A)과 치환된 삼각함수 값을 이용한 변환 사이의 차이값을 보정하기 위한 스케일링 행렬 및 시프트 연산을 적용하여 NxN 크기의 블록을 변환한 변환 블록에 대한 양자화를 수행할 수 있다.
본 발명의 또 다른 실시예에 따라서 16x16 블록의 변환시에 이용되는 양자화 파라메터(QP)에 따른 스케일링 행렬(MF)의 예는 도 105a 내지 도 105f와 같다. 16x16 블록의 변환시에 이용되는 양자화 파라메터(QP)에 따른 역스케일링 행렬(V)의 예는 도 106a 내지 도 106f와 같다.
한편, 본 발명의 또 다른 실시예에 따르면 스케일링 행렬(MF) 및 역스케일링 행렬(V)는 직접적인 디비젼을 통해 계산될 수 있다. 본 발명의 또 다른 실시예에 따른 16 포인트 이산 코사인 변환을 수행하는 행렬을 A라고 하면, 중간 행렬(S)의 i번째 행의 각 원소를 다음의 수학식;S(i)=1/sqrt(AAT(i,i)) 과 같이 정의한다. sqrt는 제곱근(square root) 함수를 의미한다. 중간 행렬(S)의 각 원소와 중간 행렬의 전치 행렬(ST)의 동일 위치의 원소를 곱한 행렬(SⓧST)을 PF라고 하면, 스케일링 행렬(MF)는 다음의 수학식; MF=PF*2^m/Qstep 과 같이 계산될 수 있다. 여기서, Qstep은 양자화 스텝, m은 양의 정수이다.
역스케일링 행렬(V)는 전술한 스케일링 행렬(MF)의 생성시에도 이용되는 중간 행렬(S)의 각 원소와 중간 행렬의 전치 행렬(ST)의 동일 위치의 원소를 각각 곱한 행렬(SⓧST)인 PF에 기초하여 생성될 수 있다. 구체적으로, 양자화 스텝을 Qstep, 중간 행렬(S)의 각 원소와 중간 행렬의 전치 행렬(ST)동일 위치의 원소들을 각각 곱한 행렬을 PF, n은 양의 정수라고 할 때, 역스케일링 행렬(V)은 다음의 수학식; V=Qstep*PF*2^n 을 통해 획득된다.
도 107a 내지 도 107f는 본 발명의 또 다른 실시예에 따라서 16 포인트 이산 코사인 변환시에 이용되는 양자화 파라메터(QP)에 따른 스케일링 행렬(MF)의 예를 도시한다. 도 107a 내지 도 107f에서 스케일링 행렬 계산시 m=10인 경우이다. 도 108a 내지 도 108f는 본 발명의 또 다른 실시예에 따라서 16 포인트 이산 코사인 변환시에 이용되는 양자화 파라메터(QP)에 따른 역스케일링 행렬(V)을 도시한다. 도 108a 내지 도 108f에서는 역스케일링 행렬 계산시 n=10인 경우를 나타낸다
또한, 도 104에 도시된 32 포인트 연산을 위한 원소들 중 삼각함수 sin 및 cos에 기초한 값들을 분모가 2의 거듭 제곱 형태인 다음의 유리수 값들로 대체하여 이용할 수 있다.
cos(pi*17/64) ~= 171/256; sin(pi*17/64) ~= 189/256; cos(pi*13/64) ~= 205/256; sin(pi*13/64) ~= 152/256; cos(pi*21/64) ~= 131/256; sin(pi*21/64) ~= 219/256; cos(pi*9/64) ~= 231/256; sin(pi*9/64) ~= 109/256; cos(pi*25/64) ~= 86/256; sin(pi*25/64) ~= 241/256; cos(pi*5/64) ~= 248/256; sin(pi*5/64) ~= 62/256; cos(pi*29/64) ~= 37/256; sin(pi*29/64) ~= 253/256; cos(pi*1/64) ~= 255/256; sin(pi*1/64) ~= 12/256; cos(pi*14/64) ~= 197/256; sin(pi*14/64) ~= 162/256; cos(pi*22/64) ~= 120/256; sin(pi*22/64) ~= 225/256; cos(pi*6/64) ~= 244/256; sin(pi*6/64) ~= 74/256; cos(pi*30/64) ~= 25/256; sin(pi*30/64) ~= 254/256; cos(pi*28/64) ~= 49/256; sin(pi*28/64) ~= 251/256; cos(pi*20/64) ~= 142/256; sin(pi*20/64) ~= 212/256; cos(pi*16/64) ~= 181/256; sin(pi*16/64) ~= 181/256; cos(pi*24/64) ~= 97/256; sin(pi*24/64) ~= 236/256; cos(pi*8/64) ~= 236/256; sin(pi*8/64) ~= 97/256; cos(pi*4/64) ~= 251/256; sin(pi*4/64) ~= 49/256; cos(pi*12/64) ~= 212/256; sin(pi*12/64) ~= 142/256;
이와 같이 대체된 cos 및 sin 값을 이용하여 도 104의 32포인트 이산 코사인 변환을 수행하는 단계는, X0 내지 X31은 변환되어야 할 입력값, A0 내지 Z31은 중간값, Y0 내지 Y31은 변환된 값을 나타낸다고 할 때, 다음의 연산 과정과 같이 표현될 수 있다.
//stage 0
Z0 = x0 + x31; Z31 = x0 - x31; Z1 = x1 + x30; Z30 = x1 - x30; Z2 = x2 + x29; Z29 = x2 - x29; Z3 = x3 + x28; Z28 = x3 - x28; Z4 = x4 + x27; Z27 = x4 - x27; Z5 = x5 + x26; Z26 = x5 - x26; Z6 = x6 + x25; Z25 = x6 - x25; Z7 = x7 + x24; Z24 = x7 - x24; Z8 = x8 + x23; Z23 = x8 - x23; Z9 = x9 + x22; Z22 = x9 - x22; Z10 = x10 + x21; Z21 = x10 - x21; Z11 = x11 + x20; Z20 = x11 - x20; Z12 = x12 + x19; Z19 = x12 - x19; Z13 = x13 + x18; Z18 = x13 - x18; Z14 = x14 + x17; Z17 = x14 - x17; Z15 = x15 + x16; Z16 = x15 - x16;
//stage 1
A0 = Z0 + Z15; A1 = Z1 + Z14; A2 = Z2 + Z13; A3 = Z3 + Z12; A4 = Z4 + Z11; A5 = Z5 + Z10; A6 = Z6 + Z9; A7 = Z7 + Z8; A8 = Z7 - Z8; A9 = Z6 - Z9; A10 = Z5 - Z10; A11 = Z4 - Z11; A12 = Z3 - Z12; A13 = Z2 - Z13; A14 = Z1 - Z14; A15 = Z0 - Z15; A16 = (171*Z16 - 189*Z31) >> 8; A31 = (189*Z16 + 171*Z31) >> 8; A17 = (205*Z17 + 152*Z30) >> 8; A30 = (-152*Z17 + 205*Z30) >> 8; A18 = (131*Z18 - 219*Z29) >> 8; A29 = (219*Z18 + 131*Z29) >> 8; A19 = (231*Z19 + 109*Z28) >> 8; A28 = (-109*Z19 + 231*Z28) >> 8; A20 = (86*Z20 - 241*Z27) >> 8; A27 = (241*Z20 + 86*Z27) >> 8; A21 = (248*Z21 + 62*Z26) >> 8; A26 = (-62*Z21 + 248*Z26) >> 8; A22 = (37*Z22 - 253*Z25) >> 8; A25 = (253*Z22 + 37*Z25) >> 8; A23 = (255*Z23 + 12*Z24) >> 8; A24 = (-12*Z23 + 255*Z24) >> 8;
//stage 2
B0 = A0 + A7; B7 = A0 - A7; B1 = A1 + A6; B6 = A1 - A6; B2 = A2 + A5; B5 = A2 - A5; B3 = A3 + A4; B4 = A3 - A4; B8 = (197*A8 + 162*A15) >> 8; B15 = (-162*A8 + 197*A15) >> 8; B9 = (120*A9 - 225*A14) >> 8; B14 = (225*A9 + 120*A14) >> 8; B10 = (244*A10 + 74*A13) >> 8; B13 = (-74*A10 + 244*A13) >> 8; B11 = (25*A11 - 254*A12) >> 8; B12 = (254*A11 + 25*A12) >> 8; B16 = A16 + A23; B23 = A16 - A23; B17 = A17 + A22; B22 = A17 - A22; B18 = A18 + A21; B21 = A18 - A21; B19 = A19 + A20; B20 = A19 - A20; B24 = A24 + A31; B31 = A24 - A31; B25 = A25 + A30; B30 = A25 - A30; B26 = A26 + A29; B29 = A26 - A29; B27 = A27 + A28; B28 = A27 - A28;
//stage 3
C0 = B0 + B3; C3 = B0 - B3; C1 = B1 + B2; C2 = B1 - B2; C4 = (49*B4 + 251*B7) >> 8; C7 = (-251*B4 + 49*B7) >> 8; C5 = (142*B5 + 212*B6) >> 8; C6 = (-212*B5 + 142*B6) >> 8; C8 = B8 + B11; C11 = B8 - B11; C9 = B9 + B10; C10 = B9 - B10; C12 = B12 + B15; C15 = B12 - B15; C13 = B13 + B14; C14 = B13 - B14; C16 = B16 + B28; C28 = B16 - B28; C17 = B17 + B29; C29 = B17 - B29; C18 = B18 + B30; C30 = B18 - B30; C19 = B19 + B31; C31 = B19 - B31; C20 = B20 + B23; C23 = B20 - B23; C21 = B21 + B22; C22 = B21 - B22; C24 = B24 + B27; C27 = B24 - B27; C25 = B25 + B26; C26 = B25 - B26;
//stage 4
D0 = (181*(C0 + C1)) >> 8; D1 = (181*(-C0 +C1)) >> 8; D2 = (97*C2 + 236*C3) >> 8; D3 = (-236*C2 + 97*C3) >> 8; D4 = C4 + C5; D5 = C4 - C5; D6 = -C6 + C7; D7 = C6 + C7; D8 = C8 + C14; D14 = C8 - C14; D9 = C9 + C15; D15 = C9 - C15; D10 = C10 + C11; D11 = C10 - C11; D12 = C12 + C13; D13 = C12 - C13; D16 = (181*(C16 + C19)) >> 8; D19 = (181*(-C16 + C19)) >> 8; D20 = C20 + C26; D26 = C20 - C26; D21 = C21 + C27; D27 = C21 - C27; D22 = C22 + C23; D23 = C22 - C23; D24 = C24 + C25; D25 = C24 - C25; D28 = (181*(C28 + C31)) >> 8; D31 = (181*(-C28 + C31)) >> 8;
//stage 5
E5 = (181*(D5 + D7)) >> 8; E7 = (181*(-D5 + D7)) >> 8; E8 = (97*D8 - 236*D9) >> 8; E9 = (236*D8 + 97*D9) >> 8; E11 = (181*(D11 + D12)) >> 8; E12 = (181*(-D11 + D12)) >> 8; E14 = (97*D14 - 236*D15) >> 8; E15 = (236*D14 + 97*D15) >> 8; E16 = D16 + C18; E18 = D16 - C18; E17 = C17 + D19; E19 = C17 - D19; E20 = (236*D20 + 97*D21) >> 8; E21 = (-97*D20 + 236*D21) >> 8; E23 = (181*(D23 + D24)) >> 8; E24 = (181*(-D23 + D24)) >> 8; E26 = (236*D26 + 97*D27) >> 8; E27 = (-97*D26 + 236*D27) >> 8; E28 = - D28 + C30; E30 = D28 + C30; E29 = - C29 + D31; E31 = C29 + D31;
//stage 6
F16 = (251*E16 - 49*E17) >> 8; F17 = (49*E16 + 251*E17) >> 8; F18 = (212*E18 - 142*E19) >> 8; F19 = (142*E18 + 212*E19) >> 8; F28 = (212*E28 - 142*E29) >> 8; F29 = (142*E28 + 212*E29) >> 8; F30 = (251*E30 - 49*E31) >> 8; F31 = (49*E30 + 251*E31) >> 8;
y0 = D0; y1 = E24; y2 = E12; y3 = -F16; y4 = D4; y5 = F31; y6 = E8; y7 = -E26; y8 = D2; y9 = E21; y10 = E15; y11 = F29; y12 = E5; y13 = -F18; y14 = D13; y15 = D22; y16 = -D1; y17 = D25; y18 = D10; y19 = -F19; y20 = -E7; y21 = -F28; y22 = -E14; y23 = -E20; y24 = D3; y25 = -E27; y26 = E9; y27 = -F30; y28 = D6; y29 = -F17; y30 = E11; y31 = -E23;
이에 대응되는 32 포인트 역 이산 코사인 변환 과정은 다음의 연산 과정과 같이 표현된다. 다음의 연산 과정에서 Y0 내지 Y31은 역변환되어야 할 입력값, A0 내지 G31은 중간값, X0 내지 X31은 역변환된 값을 나타낸다.
D0= y0; E24 = y1; E12 = y2; F16 = -y3; D4 = y4; F31 = y5; E8 = y6; E26 = -y7; D2 = y8; E21 = y9; E15 = y10; F29 = y11; E5 = y12; F18 = -y13; D13 = y14; D22 = y15; D1 = -y16; D25 = y17; D10 = y18; F19 = -y19; E7 = -y20; F28 = -y21 ; E14 = -y22; E20 = -y23; D3 = y24; E27 = -y25; E9 = y26; F30 = -y27; D6 = y28; F17 = -y29 ; E11 = y30; E23 = -y31;
//stage 6
E16 = (251*F16 + 49*F17) >> 8; E17 = (-49*F16 + 251*F17) >> 8; E18 = (212*F18 + 142*F19) >> 8; E19 = (-142*F18 + 212*F19) >> 8; E28 = (212*F28 + 142*F29) >> 8; E29 = (-142*F28 + 212*F29) >> 8; E30 = (251*F30 + 49*F31) >> 8; E31 = (-49*F30 + 251*F31) >> 8;
//stage 5
D5 = (181*(E5 - E7)) >> 8; D7 = (181*(E5 + E7)) >> 8; D8 = (97*E8 + 236*E9) >> 8; D9 = (-236*E8 + 97*E9) >> 8; D11 = (181*(E11 - E12)) >> 8; D12 = (181*(E11 + E12)) >> 8; D14 = (97*E14 + 236*E15) >> 8; D15 = (-236*E14 + 97*E15) >> 8; D16 = E16 + E18; C18 = E16 - E18; C17 = E17 + E19; D19 = E17 - E19; D20 = (236*E20 - 97*E21) >> 8; D21 = (97*E20 + 236*E21) >> 8; D23 = (181*(E23 - E24)) >> 8; D24 = (181*(E23 + E24)) >> 8; D26 = (236*E26 - 97*E27) >> 8; D27 = (97*E26 + 236*E27) >> 8; D28 = - E28 + E30; C30 = E28 + E30; C29 = - E29 + E31; D31 = E29 + E31;
//stage 4
C0 = (181*(D0 - D1)) >> 8; C1 = (181*(D0 + D1)) >> 8; C2 = (97*D2 - 236*D3) >> 8; C3 = (236*D2 + 97*D3) >> 8; C4 = D4 + D5; C5 = D4 - D5; C6 = -D6 + D7; C7 = D6 + D7; C8 = D8 + D14; C14 = D8 - D14; C9 = D9 + D15; C15 = D9 - D15; C10 = D10 + D11; C11 = D10 - D11; C12 = D12 + D13; C13 = D12 - D13; C16 = (181*(D16 - D19)) >> 8; C19 = (181*(D16 + D19)) >> 8; C20 = D20 + D26; C26 = D20 - D26; C21 = D21 + D27; C27 = D21 - D27; C22 = D22 + D23; C23 = D22 - D23; C24 = D24 + D25; C25 = D24 - D25; C28 = (181*(D28 - D31)) >> 8; C31 = (181*(D28 + D31)) >> 8;
//stage 3
B0 = C0 + C3; B3 = C0 - C3; B1 = C1 + C2; B2 = C1 - C2; B4 = (49*C4 - 251*C7) >> 8; B7 = (251*C4 + 49*C7) >> 8; B5 = (142*C5 - 212*C6) >> 8; B6 = (212*C5 + 142*C6) >> 8; B8 = C8 + C11; B11 = C8 - C11; B9 = C9 + C10; B10 = C9 - C10; B12 = C12 + C15; B15 = C12 - C15; B13 = C13 + C14; B14 = C13 - C14; B16 = C16 + C28; B28 = C16 - C28; B17 = C17 + C29; B29 = C17 - C29; B18 = C18 + C30; B30 = C18 - C30; B19 = C19 + C31; B31 = C19 - C31; B20 = C20 + C23; B23 = C20 - C23; B21 = C21 + C22; B22 = C21 - C22; B24 = C24 + C27; B27 = C24 - C27; B25 = C25 + C26; B26 = C25 - C26;
//stage 2
A0 = B0 + B7; A7 = B0 - B7; A1 = B1 + B6; A6 = B1 - B6; A2 = B2 + B5; A5 = B2 - B5; A3 = B3 + B4; A4 = B3 - B4; A8 = (197*B8 - 162*B15) >> 8; A15 = (162*B8 + 197*B15) >> 8; A9 = (120*B9 + 225*B14) >> 8; A14 = (-225*B9 + 120*B14) >> 8; A10 = (244*B10 - 74*B13) >> 8; A13 = (74*B10 + 244*B13) >> 8; A11 = (25*B11 + 254*B12) >> 8; A12 = (-254*B11 + 25*B12) >> 8; A16 = B16 + B23; A23 = B16 - B23; A17 = B17 + B22; A22 = B17 - B22; A18 = B18 + B21; A21 = B18 - B21; A19 = B19 + B20; A20 = B19 - B20; A24 = B24 + B31; A31 = B24 - B31; A25 = B25 + B30; A30 = B25 - B30; A26 = B26 + B29; A29 = B26 - B29; A27 = B27 + B28; A28 = B27 - B28;
//stage 1
Z0 = A0 + A15; Z1 = A1 + A14; Z2 = A2 + A13; Z3 = A3 + A12; Z4 = A4 + A11; Z5 = A5 + A10; Z6 = A6 + A9; Z7 = A7 + A8; Z8 = A7 - A8; Z9 = A6 - A9; Z10 = A5 - A10; Z11 = A4 - A11; Z12 = A3 - A12; Z13 = A2 - A13; Z14 = A1 - A14; Z15 = A0 - A15; Z16 = (171*A16 + 189*A31) >> 8; Z31 = (-189*A16 + 171*A31) >> 8; Z17 = (205*A17 - 152*A30) >> 8; Z30 = (152*A17 + 205*A30) >> 8; Z18 = (131*A18 + 219*A29) >> 8; Z29 = (-219*A18 + 131*A29) >> 8; Z19 = (231*A19 - 109*A28) >> 8; Z28 = (109*A19 + 231*A28) >> 8; Z20 = (86*A20 + 241*A27) >> 8; Z27 = (-241*A20 + 86*A27) >> 8; Z21 = (248*A21 - 62*A26) >> 8; Z26 = (62*A21 + 248*A26) >> 8; Z22 = (37*A22 + 253*A25) >> 8; Z25 = (-253*A22 + 37*A25) >> 8; Z23 = (255*A23 - 12*A24) >> 8; Z24 = (12*A23 + 255*A24) >> 8;
x0 = Z0 + Z31; x31 = Z0 - Z31; x1 = Z1 + Z30; x30 = Z1 - Z30; x2 = Z2 + Z29; x29 = Z2 - Z29; x3 = Z3 + Z28; x28 = Z3 - Z28; x4 = Z4 + Z27; x27 = Z4 - Z27; x5 = Z5 + Z26; x26 = Z5 - Z26; x6 = Z6 + Z25; x25 = Z6 - Z25; x7 = Z7 + Z24; x24 = Z7 - Z24; x8 = Z8 + Z23; x23 = Z8 - Z23; x9 = Z9 + Z22; x22 = Z9 - Z22; x10 = Z10 + Z21; x21 = Z10 - Z21; x11 = Z11 + Z20; x20 = Z11 - Z20; x12 = Z12 + Z19; x19 = Z12 - Z19; x13 = Z13 + Z18; x18 = Z13 - Z18; x14 = Z14 + Z17; x17 = Z14 - Z17; x15 = Z15 + Z16; x16 = Z15 - Z16;
전술한 도 104에 도시된 32 포인트 이산 코사인 변환에 기초하여, cos 및 sin 값을 분모가 2의 거듭제곱꼴인 형태로 치환하여 이산 코사인 변환을 수행하는 경우 전술한 도 3의 단계 350과 유사하게, 이산 코사인 변환에 이용되는 원래의 NxN 변환 행렬(Original_A)과 치환된 삼각함수 값을 이용한 변환 사이의 차이값을 보정하기 위한 스케일링 행렬 및 시프트 연산을 적용하여 NxN 크기의 블록을 변환한 변환 블록에 대한 양자화를 수행할 수 있다.
본 발명의 또 다른 실시예에 따라서 32x32 블록의 변환시에 이용되는 양자화 파라메터(QP)에 따른 스케일링 행렬(MF)의 예는 도 109a 내지 도 109f와 같다. 32x32 블록의 변환시에 이용되는 양자화 파라메터(QP)에 따른 역스케일링 행렬(V)의 예는 도 110a 내지 도 110f와 같다.
32 포인트 변환에 대해서 스케일링 행렬(MF) 및 역스케일링 행렬(V)를 직접적인 디비젼을 통해 계산하는 경우에는 전술한 도 109 및 도 110과 거의 유사한 스케일링 행렬 및 역스케일링 행렬이 획득된다. 구체적으로, 본 발명의 또 다른 실시예에 따른 32 포인트 이산 코사인 변환을 수행하는 행렬을 A라고 하면, 중간 행렬(S)의 i번째 행의 각 원소를 다음의 수학식;S(i)=1/sqrt(AAT(i,i)) 과 같이 정의한다. sqrt는 제곱근(square root) 함수를 의미한다. 중간 행렬(S)의 각 원소와 중간 행렬의 전치 행렬(ST)의 동일 위치의 원소를 곱한 행렬(SⓧST)을 PF라고 하면, 스케일링 행렬(MF)는 다음의 수학식; MF=PF*2^m/Qstep 과 같이 계산될 수 있다. 여기서, Qstep은 양자화 스텝, m은 양의 정수이다. 역스케일링 행렬(V)는 전술한 스케일링 행렬(MF)의 생성시에도 이용되는 중간 행렬(S)의 각 원소와 중간 행렬의 전치 행렬(ST)의 동일 위치의 원소를 각각 곱한 행렬(SⓧST)인 PF에 기초하여 생성될 수 있다. 구체적으로, 양자화 스텝을 Qstep, 중간 행렬(S)의 각 원소와 중간 행렬의 전치 행렬(ST)동일 위치의 원소들을 각각 곱한 행렬을 PF, n은 양의 정수라고 할 때, 역스케일링 행렬(V)은 다음의 수학식; V=Qstep*PF*2^n 을 통해 획득된다.
도 111a 내지 도 111f는 본 발명의 또 다른 실시예에 따라서 32 포인트 이산 코사인 변환시에 이용되는 양자화 파라메터(QP)에 따른 스케일링 행렬(MF)의 예를 도시한다. 도 111a 내지 도 111f에서 스케일링 행렬 계산시 m=10인 경우이다. 도 112a 내지 도 112f는 본 발명의 또 다른 실시예에 따라서 32 포인트 이산 코사인 변환시에 이용되는 양자화 파라메터(QP)에 따른 역스케일링 행렬(V)을 도시한다. 도 108a 내지 도 108f에서는 역스케일링 행렬 계산시 n=10인 경우를 나타낸다
전술한 도 104에 기초한 16 포인트 또는 32 포인트 변환 및 역변환 과정은 곱셈을 포함하지 않는 형태로 변경될 수 있다. 구체적으로, 각 변환 과정은 분모가 2의 거듭 제곱꼴인 유리수(dyadic rational)와 중간값들의 곱으로 표현될 수 있다. 도 113a는 16x16 변환에 이용되는 곱셈의 대체 연산 과정, 도 113b는 32x32 변환에 이용되는 곱셈의 대체 연산 과정을 나타낸다. 일 예로, 도 104에 기초한 16 포인트 이산 코사인 변환시에 첫 번째 표시된 49*x와 같은 연산은 (X<<5)+(x<<4)+x와 같이 쉬프트 연산 및 덧셈 연산만으로 대체될 수 있다.
한편, 전술한 바와 같이 곱셈 연산을 쉬프트 연산으로 대체하는 과정은 변환 및 역변환에 이용되는 값의 분모(denominator)를 고려하여 추가적인 연산을 줄일 수 있다. 도 104에 기초한 16 포인트 이산 코사인 변환에 이용되는 곱셈 연산은 도 114a에 도시된 테이블에 따라서 곱셈이 생략된 연산 형태로 대체될 수 있다. 또한, 도 104에 기초한 32 포인트 이산 코사인 변환에 이용되는 곱셈 연산은 도 114b에 도시된 테이블에 따라서 곱셈이 생략된 연산 형태로 대체될 수 있다.
한편, 전술한 도 104에 기초한 이산 코사인 변환에 포함된 버터 플라이 구조의 연산 과정은 도 20에 도시된 바와 같은 변경된 버터 플라이 구조의 연산으로 대체될 수 있다. 즉,버터 플라이 구조의 연산은 입력값 [X1,X2]에 대해서 다음의 수학식;
Figure PCTKR2011003006-appb-I000007
과 같은 연산을 통해 출력값 [Y1, Y2]를 출력하는 것인데, 이러한 버터 플라이 구조의 연산은 실질적으로 회전(rotation) 변환에 해당된다. 이러한 버터 플라이 구조의 연산은 다음의 수학식 4와 같이 대체될 수 있다.
수학식 4
Figure PCTKR2011003006-appb-M000004
수학식 4에서 p=(cosθ-1)/sinθ. u=sinθ이다. 따라서, 도 104에 구비된 버터 플라이 구조의 연산 과정은 수학식 4와 같은 도 20의 변경된 버터 플라이 구조로 대체될 수 있다. 변경된 버터 플라이 구조를 포함하는 도 104의 이산 코사인 변환에 이용되는 cos 및 sin 함수에 기초한 값들을 분모가 2의 거듭제곱 형태인 유리수(dyadic rational)로 치환한다. 구체적으로, 16 포인트 이산 코사인 변환에 이용되는 cos 및 sin 값들은 다음과 같이 우측의 분모가 2의 거듭제곱 형태인 유리수로 치환되어 치환된 값을 대신 이용될 수 있다.
(cos(pi*7/32) - 1)/sin(pi*7/32) ~= -22/64; sin(pi*7/32) ~= 40/64; (cos(pi*11/32) - 1)/sin(pi*11/32) ~= -38/64; sin(pi*11/32) ~= 56/64; (cos(pi*3/32) - 1)/sin(pi*3/32) ~= -9/64; sin(pi*3/32) ~= 18/64; (cos(pi*15/32) - 1)/sin(pi*15/32) ~= -58/64; sin(pi*15/32) ~= 63/64; (cos(pi*7/16) - 1)/sin(pi*7/16) ~= -52/64; sin(pi*7/16) ~= 62/64; (cos(pi*5/16) - 1)/sin(pi*5/16) ~= -34/64; sin(pi*5/16) ~= 53/64; cot(pi*3/8) ~= 26/64; sin(pi*3/8)*cos(pi*3/8) ~= 22/64;
32 포인트 이산 코사인 변환에 이용되는 cos 및 sin 값들은 다음처럼 분모가 2의 거듭제곱 형태인 유리수로 치환될 수 있다.
(cos(pi*17/64) - 1)/sin(pi*17/64) = -113/256; sin(pi*17/64) = 189/256; (cos(pi*13/64) - 1)/sin(pi*13/64) = -84/256; sin(pi*13/64) = 152/256; (cos(pi*21/64) - 1)/sin(pi*21/64) = -145/256; sin(pi*21/64) = 219/256; (cos(pi*9/64) - 1)/sin(pi*9/64) = -57/256; sin(pi*9/64) = 109/256; (cos(pi*25/64) - 1)/sin(pi*25/64) = -180/256; sin(pi*25/64) = 241/256; (cos(pi*5/64) - 1)/sin(pi*5/64) = -31/256; sin(pi*5/64) = 62/256; (cos(pi*29/64) - 1)/sin(pi*29/64) = -220/256; sin(pi*29/64) = 253/256; (cos(pi/64) - 1)/sin(pi/64) = -6/256; sin(pi*1/64) = 12/256; (cos(pi*14/64) - 1)/sin(pi*14/64) = -91/256; sin(pi*14/64) = 162/256; (cos(pi*22/64) - 1)/sin(pi*22/64) = -153/256; sin(pi*22/64) = 225/256; (cos(pi*6/64) - 1)/sin(pi*6/64) = -37/256; sin(pi*6/64) = 74/256; (cos(pi*30/64) - 1)/sin(pi*30/64) = -232/256; sin(pi*30/64) = 254/256; (cos(pi*28/64) - 1)/sin(pi*28/64) = -210/256; sin(pi*28/64) = 251/256; (cos(pi*20/64) - 1)/sin(pi*20/64) = -136/256; sin(pi*20/64) = 212/256; (cos(pi*16/64) - 1)/sin(pi*16/64) = -106/256; sin(pi*16/64) = 181/256; cot(pi*24/64) = 106/256; sin(pi*24/64)*cos(pi*24/64) = 90/256; tan(pi*8/64) = 106/256; sin(pi*8/64)*cos(pi*8/64) = 90/256; tan(pi*4/64) = 50/256; sin(pi*4/64)*cos(pi*4/64) = 48/256; tan(pi*12/64) = 171/256; sin(pi*12/64)*cos(pi*12/64) = 118/256;
도 104의 16 포인트 이산 코사인 변환의 버터 플라이 구조를 수학식 4를 이용하여 대체하는 한편, 각 삼각함수 값을 전술한 바와 같이 분모가 2의 거듭제곱꼴인 유리수로 치환하는 경우, 16 포인트 이산 코사인 변환 과정은 다음의 연산 과정을 통해 수행될 수 있다. X0 내지 X15은 변환되어야 할 입력값, B0 내지 B15, C0 내지 C15, D0 내지 D15, E0 내지 E15, F0 내지 F15, G0 내지 G15은 중간값, Y0 내지 Y15은 변환된 값을 나타낸다.
// stage 1
A0 = x0 + x15; A1 = x1 + x14; A2 = x2 + x13; A3 = x3 + x12; A4 = x4 + x11; A5 = x5 + x10; A6 = x6 + x9; A7 = x7 + x8; A8 = x7 - x8; A9 = x6 - x9; A10 = x5 - x10; A11 = x4 - x11; A12 = x3 - x12; A13 = x2 - x13; A14 = x1 - x14; A15 = x0 - x15;
//stage 2
B0 = A0 + A7; B7 = A0 - A7; B1 = A1 + A6; B6 = A1 - A6; B2 = A2 + A5; B5 = A2 - A5; B3 = A3 + A4; B4 = A3 - A4; B8 = A8 + (22*A15 >> 6); B15 = A15 - (40*B8 >> 6); B8 = B8 + (22*B15 >> 6); B9 = A9 - (38*A14 >> 6); B14 = A14 + (56*B9 >> 6); B9 = B9 - (38*B14 >> 6); B10 = A10 + (9*A13 >> 6); B13 = A13 - (18*B10 >> 6); B10 = B10 + (9*B13 >> 6); B11 = A11 - (58*A12 >> 6); B12 = A12 + (63*B11 >> 6); B11 = B11 - (58*B12 >> 6);
//stage 3
C0 = B0 + B3; C3 = B0 - B3; C1 = B1 + B2; C2 = B1 - B2; C4 = B4 + (52*B7 >> 6); C7 = B7 - (62*C4 >> 6); C4 = C4 + (52*C7 >> 6); C5 = B5 + (34*B6 >> 6); C6 = B6 - (53*C5 >> 6); C5 = C5 + (34*C6 >> 6); C8 = B8 + B11; C11 = B8 - B11; C9 = B9 + B10; C10 = B9 - B10; C12 = B12 + B15; C15 = B12 - B15; C13 = B13 + B14; C14 = B13 - B14;
//stage 4
D0 = C0 + C1; D1 = C1 - 1/2*D0; D3 = C2 - (26*C3 >> 6); D2 = (C3 + (22*D3 >> 6)); D3 = -D3; D4 = C4 + C5; D5 = C4 - C5; D6 = -C6 + C7; D7 = C6 + C7; D8 = C8 + C14; D14 = C8 - C14; D9 = C9 + C15; D15 = C9 - C15; D10 = C10 + C11; D11 = C10 - C11; D12 = C12 + C13; D13 = C12 - C13;
//stage 5
E5 = D5 + D7; E7 = D7 - 1/2*E5; E9 = D8 + (26*D9 >> 6); E8 = -(D9 - (22*E9 >> 6)); E11 = D11 + D12; E12 = D12 - 1/2*E11; E15 = D14 + (26*D15 >> 6); E14 = -(D15 - (22*E15 >> 6));
y0 = D0; y1 = E12; y2 = D4; y3 = E8; y4 = D2; y5 = E15; y6 = E5; y7 = D13; y8 = -D1; y9 = D10; y10 = -E7; y11 = -E14; y12 = D3; y13 = E9; y14 = D6; y15 = E11;
대응되는 16포인트 역 이산 코사인 변환 과정은 다음의 연산 과정과 같이 표현된다. 다음의 연산 과정에서 Y0 내지 Y15은 역변환되어야 할 입력값, A0 내지 G15은 중간값, X0 내지 X15은 역변환된 값을 나타낸다.
D0 = y0; E12 = y1; D4 = y2; E8 = y3; D2 = y4; E15 = y5; E5 = y6; D13 = y7; D1 = -y8; D10 = y9; E7 = -y10; E14 = -y11; D3 = y12; E9 = y13; D6 = y14; E11 = y15;
//stage 5
D7 = E7 + 1/2*E5; D5 = E5 - D7; D9 = -E8 + (22*E9 >> 6); D8 = E9 - (26*D9 >> 6); D12 = E12 + 1/2*E11; D11 = E11 - D12; D15 = -E14 + (22*E15 >> 6); D14 = E15 - (26*D15 >> 6);
//stage 4
C1 = D1 + 1/2*D0; C0 = D0 - C1; D3 = -D3; C3 = D2 - (22*D3 >> 6); C2 = D3 + (26*C3 >> 6); C4 = D4 + D5; C5 = D4 - D5; C6 = -D6 + D7; C7 = D6 + D7;C8 = D8 + D14; C14 = D8 - D14; C9 = D9 + D15; C15 = D9 - D15; C10 = D10 + D11; C11 = D10 - D11; C12 = D12 + D13; C13 = D12 - D13;
//stage 3
B0 = C0 + C3; B3 = C0 - C3; B1 = C1 + C2; B2 = C1 - C2; C4 = C4 - (52*C7 >> 6); B7 = C7 + (62*C4 >> 6); B4 = C4 - (52*B7 >> 6); C5 = C5 - (34*C6 >> 6); B6 = C6 + (53*C5 >> 6); B5 = C5 - (34*B6 >> 6); B8 = C8 + C11; B11 = C8 - C11; B9 = C9 + C10; B10 = C9 - C10; B12 = C12 + C15; B15 = C12 - C15; B13 = C13 + C14; B14 = C13 - C14;
//stage 2
A0 = B0 + B7; A7 = B0 - B7; A1 = B1 + B6; A6 = B1 - B6; A2 = B2 + B5; A5 = B2 - B5; A3 = B3 + B4; A4 = B3 - B4; B8 = B8 - (22*B15 >> 6); A15 = B15 + (40*B8 >> 6); A8 = B8 - (22*A15 >> 6); B9 = B9 + (38*B14 >> 6); A14 = B14 - (56*B9 >> 6); A9 = B9 + (38*A14 >> 6); B10 = B10 - (9*B13 >> 6); A13 = B13 + (18*B10 >> 6); A10 = B10 - (9*A13 >> 6); B11 = B11 + (58*B12 >> 6); A12 = B12 - (63*B11 >> 6); A11 = B11 + (58*A12 >> 6);
//stage 1
x0 = A0 + A15; x1 = A1 + A14; x2 = A2 + A13; x3 = A3 + A12; x4 = A4 + A11; x5 = A5 + A10; x6 = A6 + A9; x7 = A7 + A8; x8 = A7 - A8; x9 = A6 - A9; x10 = A5 - A10; x11 = A4 - A11; x12 = A3 - A12; x13 = A2 - A13; x14 = A1 - A14; x15 = A0 - A15;
전술한 도 104에 도시된 16 포인트 이산 코사인 변환에 기초하여, 버터플라이 구조를 수학식 4와 같이 변경하고 삼각함수값을 분모가 2의 거듭제곱꼴인 형태로 치환하여 이산 코사인 변환을 수행하는 경우 전술한 도 3의 단계 350과 유사하게, 이산 코사인 변환에 이용되는 원래의 NxN 변환 행렬(Original_A)과 치환된 삼각함수 값을 이용한 변환 사이의 차이값을 보정하기 위한 스케일링 행렬 및 시프트 연산을 적용하여 NxN 크기의 블록을 변환한 변환 블록에 대한 양자화를 수행할 수 있다.
본 발명의 또 다른 실시예에 따라서 16 포인트 이산 코사인 변환시에 이용되는 양자화 파라메터(QP)에 따른 스케일링 행렬(MF)의 예는 도 115a 내지 도 115f와 같다. 16 포인트 역 이산 코사인 변환시에 이용되는 양자화 파라메터(QP)에 따른 역스케일링 행렬(V)의 예는 도 116a 내지 도 116f와 같다. 여기서, 전술한 역스케일링 행렬(V)를 구하는 방식과 다르게 다음의 수학식; V=Qstep./*PF*2^n/64 에 따라서 역스케일링 행렬이 계산된다.
16 포인트 이산 코사인 변환에 대해서 스케일링 행렬(MF) 및 역스케일링 행렬(V)를 직접적인 디비젼을 통해 계산하는 경우에는 전술한 도 115 및 도 116과 거의 유사한 스케일링 행렬 및 역스케일링 행렬이 획득된다. 구체적으로, 본 발명의 또 다른 실시예에 따른 16 포인트 이산 코사인 변환을 수행하는 행렬을 A라고 하면, 중간 행렬(S)의 i번째 행의 각 원소를 다음의 수학식;S(i)=1/sqrt(AAT(i,i)) 과 같이 정의한다. sqrt는 제곱근(square root) 함수를 의미한다. 중간 행렬(S)의 각 원소와 중간 행렬의 전치 행렬(ST)의 동일 위치의 원소를 곱한 행렬(SⓧST)을 PF라고 하면, 스케일링 행렬(MF)는 다음의 수학식; MF=PF*2^m/Qstep 과 같이 계산될 수 있다. 여기서, Qstep은 양자화 스텝, m은 양의 정수이다. 역스케일링 행렬(V)는 전술한 스케일링 행렬(MF)의 생성시에도 이용되는 중간 행렬(S)의 각 원소와 중간 행렬의 전치 행렬(ST)의 동일 위치의 원소를 각각 곱한 행렬(SⓧST)인 PF에 기초하여 생성될 수 있다. 구체적으로, 양자화 스텝을 Qstep, 중간 행렬(S)의 각 원소와 중간 행렬의 전치 행렬(ST)동일 위치의 원소들을 각각 곱한 행렬을 PF, n은 양의 정수라고 할 때, 역스케일링 행렬(V)은 다음의 수학식; V=Qstep./*PF*2^n/64 을 통해 획득된다.
도 117a 내지 도 117f는 본 발명의 또 다른 실시예에 따라서 16 포인트 이산 코사인 변환시에 이용되는 양자화 파라메터(QP)에 따른 스케일링 행렬(MF)의 예를 도시한다. 도 117a 내지 도 117f에서 스케일링 행렬 계산시 m=10인 경우이다. 도 118a 내지 도 118f는 본 발명의 또 다른 실시예에 따라서 16 포인트 이산 코사인 변환시에 이용되는 양자화 파라메터(QP)에 따른 역스케일링 행렬(V)을 도시한다. 도 118a 내지 도 118f에서는 역스케일링 행렬 계산시 n=10인 경우를 나타낸다
도 104의 32 포인트 이산 코사인 변환의 버터 플라이 구조를 수학식 4를 이용하여 대체하는 한편, 각 삼각함수 값을 전술한 바와 같이 분모가 2의 거듭제곱꼴인 유리수로 치환하는 경우, 32 포인트 이산 코사인 변환 과정은 다음의 연산 과정을 통해 수행될 수 있다. X0 내지 X31은 변환되어야 할 입력값, A0 내지 Z31은 중간값, Y0 내지 Y31은 변환된 값을 나타낸다.
//stage 0
Z0 = x0 + x31; Z31 = x0 - x31; Z1 = x1 + x30; Z30 = x1 - x30; Z2 = x2 + x29; Z29 = x2 - x29; Z3 = x3 + x28; Z28 = x3 - x28; Z4 = x4 + x27; Z27 = x4 - x27; Z5 = x5 + x26; Z26 = x5 - x26; Z6 = x6 + x25; Z25 = x6 - x25; Z7 = x7 + x24; Z24 = x7 - x24; Z8 = x8 + x23; Z23 = x8 - x23; Z9 = x9 + x22; Z22 = x9 - x22; Z10 = x10 + x21; Z21 = x10 - x21; Z11 = x11 + x20; Z20 = x11 - x20; Z12 = x12 + x19; Z19 = x12 - x19; Z13 = x13 + x18; Z18 = x13 - x18; Z14 = x14 + x17; Z17 = x14 - x17; Z15 = x15 + x16; Z16 = x15 - x16;
//stage 1
A0 = Z0 + Z15; A1 = Z1 + Z14; A2 = Z2 + Z13; A3 = Z3 + Z12; A4 = Z4 + Z11; A5 = Z5 + Z10; A6 = Z6 + Z9; A7 = Z7 + Z8; A8 = Z7 - Z8; A9 = Z6 - Z9; A10 = Z5 - Z10; A11 = Z4 - Z11; A12 = Z3 - Z12; A13 = Z2 - Z13; A14 = Z1 - Z14; A15 = Z0 - Z15; A16 = Z16 - ZTrRound(113*Z31 >> 8); A31 = Z31 + ZTrRound(189*A16 >> 8); A16 = A16 - ZTrRound(113*A31 >> 8); A17 = Z17 + ZTrRound(84*Z30 >> 8); A30 = Z30 - ZTrRound(152*A17 >> 8); A17 = A17 + ZTrRound(84*A30 >> 8); A18 = Z18 - ZTrRound(145*Z29 >> 8); A29 = Z29 + ZTrRound(219*A18 >> 8); A18 = A18 - ZTrRound(145*A29 >> 8); A19 = Z19 + ZTrRound(57*Z28 >> 8); A28 = Z28 - ZTrRound(109*A19 >> 8); A19 = A19 + ZTrRound(57*A28 >> 8); A20 = Z20 - ZTrRound(180*Z27 >> 8); A27 = Z27 + ZTrRound(241*A20 >> 8); A20 = A20 - ZTrRound(180*A27 >> 8); A21 = Z21 + ZTrRound(31*Z26 >> 8); A26 = Z26 - ZTrRound(62*A21 >> 8); A21 = A21 + ZTrRound(31*A26 >> 8); A22 = Z22 - ZTrRound(220*Z25 >> 8); A25 = Z25 + ZTrRound(253*A22 >> 8); A22 = A22 - ZTrRound(220*A25 >> 8); A23 = Z23 + ZTrRound(6*Z24 >> 8); A24 = Z24 - ZTrRound(12*A23 >> 8); A23 = A23 + ZTrRound(6*A24 >> 8);
//stage 2
B0 = A0 + A7; B7 = A0 - A7; B1 = A1 + A6; B6 = A1 - A6; B2 = A2 + A5; B5 = A2 - A5; B3 = A3 + A4; B4 = A3 - A4; B8 = A8 + (91*A15 >> 8); B15 = A15 - (162*B8 >> 8); B8 = B8 + (91*B15 >> 8); B9 = A9 - (153*A14 >> 8); B14 = A14 + (225*B9 >> 8); B9 = B9 - (153*B14 >> 8); B10 = A10 + (37*A13 >> 8); B13 = A13 - (74*B10 >> 8); B10 = B10 + (37*B13 >> 8); B11 = A11 - (232*A12 >> 8); B12 = A12 + (254*B11 >> 8); B11 = B11 - (232*B12 >> 8); B16 = A16 + A23; B23 = A16 - A23; B17 = A17 + A22; B22 = A17 - A22; B18 = A18 + A21; B21 = A18 - A21; B19 = A19 + A20; B20 = A19 - A20; B24 = A24 + A31; B31 = A24 - A31; B25 = A25 + A30; B30 = A25 - A30; B26 = A26 + A29; B29 = A26 - A29; B27 = A27 + A28; B28 = A27 - A28;
//stage 3
C0 = B0 + B3; C3 = B0 - B3; C1 = B1 + B2; C2 = B1 - B2; C4 = B4 + (210*B7 >> 8); C7 = B7 - (251*C4 >> 8); C4 = C4 + (210*C7 >> 8); C5 = B5 + (136*B6 >> 8); C6 = B6 - (212*C5 >> 8); C5 = C5 + (136*C6 >> 8); C8 = B8 + B11; C11 = B8 - B11; C9 = B9 + B10; C10 = B9 - B10; C12 = B12 + B15; C15 = B12 - B15; C13 = B13 + B14; C14 = B13 - B14; C16 = B16 + B28; C28 = B16 - B28; C17 = B17 + B29; C29 = B17 - B29; C18 = B18 + B30; C30 = B18 - B30; C19 = B19 + B31; C31 = B19 - B31; C20 = B20 + B23; C23 = B20 - B23; C21 = B21 + B22; C22 = B21 - B22; C24 = B24 + B27; C27 = B24 - B27; C25 = B25 + B26; C26 = B25 - B26;
//stage 4
D0 = C0 + C1; D1 = C1 - (D0 >> 1); D3 = C2 - (106*C3 >> 8); D2 = C3 + (90*D3 >> 8); D3 = -D3; D4 = C4 + C5; D5 = C4 - C5; D6 = -C6 + C7; D7 = C6 + C7; D8 = C8 + C14; D14 = C8 - C14; D9 = C9 + C15; D15 = C9 - C15; D10 = C10 + C11; D11 = C10 - C11; D12 = C12 + C13; D13 = C12 - C13; D16 = C16 + (106*C19 >> 8); D19 = C19 - (181*D16 >> 8); D16 = D16 + (106*D19 >> 8); D20 = C20 + C26; D26 = C20 - C26; D21 = C21 + C27; D27 = C21 - C27; D22 = C22 + C23; D23 = C22 - C23; D24 = C24 + C25; D25 = C24 - C25; D28 = C28 + (106*C31 >> 8); D31 = C31 - (181*D28 >> 8); D28 = D28 + (106*D31 >> 8);
//stage 5
E5 = D5 + D7; E7 = D7 - (E5 >> 1); E9 = D8 + (106*D9 >> 8); E8 = -(D9 - (90*E9 >> 8)); E11 = D11 + D12; E12 = D12 - (E11 >> 1); E15 = D14 + (106*D15 >> 8); E14 = -(D15 - (90*E15 >> 8)); E16 = D16 + C18; E18 = D16 - C18; E17 = C17 + D19; E19 = C17 - D19; E20 = D20 + (106*D21 >> 8); E21 = D21 - (90*E20 >> 8); E23 = D23 + D24; E24 = D24 - (E23 >> 1); E26 = D26 + (106*D27 >> 8); E27 = D27 - (90*E26 >> 8); E28 = - D28 + C30; E30 = D28 + C30; E29 = - C29 + D31; E31 = C29 + D31;
//stage 6
F16 = E16 - (50*E17 >> 8); F17 = E17 + (48*F16 >> 8); F18 = E18 - (171*E19 >> 8); F19 = E19 + (118*F18 >> 8); F28 = E28 - (171*E29 >> 8); F29 = E29 + (118*F28 >> 8); F30 = E30 - (50*E31 >> 8); F31 = E31 + (48*F30 >> 8); y0 = D0; y1 = E24; y2 = E12; y3 = -F16; y4 = D4; y5 = F31; y6 = E8; y7 = -E26; y8 = D2; y9 = E21; y10 = E15; y11 = F29; y12 = E5; y13 = -F18; y14 = D13; y15 = D22; y16 = -D1; y17 = D25; y18 = D10; y19 = -F19; y20 = -E7; y21 = -F28; y22 = -E14; y23 = -E20; y24 = D3; y25 = -E27; y26 = E9; y27 = -F30; y28 = D6; y29 = -F17; y30 = E11; y31 = -E23;
대응되는 32포인트 역 이산 코사인 변환 과정은 다음의 연산 과정과 같이 표현된다. 다음의 연산 과정에서 Y0 내지 Y31은 역변환되어야 할 입력값, A0 내지 z31은 중간값, X0 내지 X31은 역변환된 값을 나타낸다.
D0= y0;E24 = y1; E12 = y2; F16 = -y3; D4 = y4; F31 = y5; E8 = y6; E26 = -y7; D2 = y8; E21 = y9; E15 = y10; F29 = y11; E5 = y12; F18 = -y13; D13 = y14; D22 = y15; D1 = -y16; D25 = y17; D10 = y18; F19 = -y19; E7 = -y20; F28 = -y21; E14 = -y22; E20 = -y23; D3 = y24; E27 = -y25; E9 = y26; F30 = -y27; D6 = y28; F17 = -y29; E11 = y30; E23 = -y31;
//stage 6
E17 = F17 - (48*F16 >> 8); E16 = F16 + (50*E17 >> 8); E19 = F19 - (118*F18 >> 8); E18 = F18 + (171*E19 >> 8); E29 = F29 - (118*F28 >> 8); E28 = F28 + (171*E29 >> 8); E31 = F31 - (48*F30 >> 8); E30 = F30 + (50*E31 >> 8);
//stage 5
D7 = E7 + (E5 >> 1); D5= E5 - D7; D9 = -E8 + (90*E9 >> 8); D8 = E9 - (106*D9 >> 8); D12 = E12 + (E11 >> 1); D11 = E11 - D12; D15 = -E14 + (90*E15 >> 8); D14 = E15 - (106*D15 >> 8); D16 = E16 + E18; C18 = E16 - E18; C17 = E17 + E19; D19 = E17 - E19; D21 = E21 + (90*E20 >> 8); D20 = E20 - (106*D21 >> 8); D24 = E24 + (E23 >> 1); D23 = E23 - D24; D27 = E27 + (90*E26 >> 8); D26 = E26 - (106*D27 >> 8); D28 = - E28 + E30; C30 = E28 + E30; C29 = - E29 + E31; D31 = E29 + E31;
//stage 4
C1 = D1 + (D0 >> 1); C0 = D0 - C1; D3 = -D3; C3 = D2 - (90*D3 >> 8); C2 = D3 + (106*C3 >> 8); C4 = D4 + D5; C5 = D4 - D5; C6 = -D6 + D7; C7 = D6 + D7; C8 = D8 + D14; C14 = D8 - D14; C9 = D9 + D15; C15 = D9 - D15; C10 = D10 + D11; C11 = D10 - D11; C12 = D12 + D13; C13 = D12 - D13; D16 = D16 - (106*D19 >> 8); C19 = D19 + (181*D16 >> 8); C16 = D16 - (106*C19 >> 8); C20 = D20 + D26; C26 = D20 - D26; C21 = D21 + D27; C27 = D21 - D27; C22 = D22 + D23; C23 = D22 - D23; C24 = D24 + D25; C25 = D24 - D25; D28 = D28 -(106*D31 >> 8); C31 = D31 + (181*D28 >> 8); C28 = D28 - (106*C31 >> 8);
//stage 3
B0 = C0 + C3; B3 = C0 - C3; B1 = C1 + C2; B2 = C1 - C2; C4 = C4 - (210*C7 >> 8); B7 = C7 + (251*C4 >> 8); B4 = C4 - (210*B7 >> 8); C5 = C5 - (136*C6 >> 8); B6 = C6 + (212*C5 >> 8); B5 = C5 - (136*B6 >> 8); B8 = C8 + C11; B11 = C8 - C11; B9 = C9 + C10; B10 = C9 - C10; B12 = C12 + C15; B15 = C12 - C15; B13 = C13 + C14; B14 = C13 - C14; B16 = C16 + C28; B28 = C16 - C28; B17 = C17 + C29; B29 = C17 - C29; B18 = C18 + C30; B30 = C18 - C30; B19 = C19 + C31; B31 = C19 - C31; B20 = C20 + C23; B23 = C20 - C23; B21 = C21 + C22; B22 = C21 - C22; B24 = C24 + C27; B27 = C24 - C27; B25 = C25 + C26; B26 = C25 - C26;
//stage 2
A0 = B0 + B7; A7 = B0 - B7; A1 = B1 + B6; A6 = B1 - B6; A2 = B2 + B5; A5 = B2 - B5; A3 = B3 + B4; A4 = B3 - B4; B8 = B8 - (91*B15 >> 8); A15 = B15 + (162*B8 >> 8); A8 = B8 - (91*A15 >> 8); B9 = B9 + (153*B14 >> 8); A14 = B14 - (225*B9 >> 8); A9 = B9 + (153*A14 >> 8); B10 = B10 - (37*B13 >> 8); A13 = B13 + (74*B10 >> 8); A10 = B10 - (37*A13 >> 8); B11 = B11 + (232*B12 >> 8); A12 = B12 - (254*B11 >> 8); A11 = B11 + (232*A12 >> 8); A16 = B16 + B23; A23 = B16 - B23; A17 = B17 + B22; A22 = B17 - B22; A18 = B18 + B21; A21 = B18 - B21; A19 = B19 + B20; A20 = B19 - B20; A24 = B24 + B31; A31 = B24 - B31; A25 = B25 + B30; A30 = B25 - B30; A26 = B26 + B29; A29 = B26 - B29; A27 = B27 + B28; A28 = B27 - B28;
//stage 1
Z0 = A0 + A15; Z1 = A1 + A14; Z2 = A2 + A13; Z3 = A3 + A12; Z4 = A4 + A11; Z5 = A5 + A10; Z6 = A6 + A9; Z7 = A7 + A8; Z8 = A7 - A8; Z9 = A6 - A9; Z10 = A5 - A10; Z11 = A4 - A11; Z12 = A3 - A12; Z13 = A2 - A13; Z14 = A1 - A14; Z15 = A0 - A15; A16 = A16 + (113*A31 >> 8); Z31 = A31 - (189*A16 >> 8); Z16 = A16 + (113*Z31 >> 8); A17 = A17 - (84*A30 >> 8); Z30 = A30 + (152*A17 >> 8); Z17 = A17 - (84*Z30 >> 8); A18 = A18 + (145*A29 >> 8); Z29 = A29 - (219*A18 >> 8); Z18 = A18 + (145*Z29 >> 8); A19 = A19 - (57*A28 >> 8); Z28 = A28 + (109*A19 >> 8); Z19 = A19 - (57*Z28 >> 8); A20 = A20 + (180*A27 >> 8); Z27 = A27 - (241*A20 >> 8); Z20 = A20 + (180*Z27 >> 8); A21 = A21 - (31*A26 >> 8); Z26 = A26 + (62*A21 >> 8); Z21 = A21 - (31*Z26 >> 8); A22 = A22 + (220*A25 >> 8); Z25 = A25 - (253*A22 >> 8); Z22 = A22 + (220*Z25 >> 8); A23 = A23 - (6*A24 >> 8); Z24 = A24 + (12*A23 >> 8); Z23 = A23 - (6*Z24 >> 8);
x0 = Z0 + Z31; x31 = Z0 - Z31; x1 = Z1 + Z30; x30 = Z1 - Z30; x2 = Z2 + Z29; x29 = Z2 - Z29; x3 = Z3 + Z28; x28 = Z3 - Z28; x4 = Z4 + Z27; x27 = Z4 - Z27; x5 = Z5 + Z26; x26 = Z5 - Z26; x6 = Z6 + Z25; x25 = Z6 - Z25; x7 = Z7 + Z24; x24 = Z7 - Z24; x8 = Z8 + Z23; x23 = Z8 - Z23; x9 = Z9 + Z22; x22 = Z9 - Z22; x10 = Z10 + Z21; x21 = Z10 - Z21; x11 = Z11 + Z20; x20 = Z11 - Z20; x12 = Z12 + Z19; x19 = Z12 - Z19; x13 = Z13 + Z18; x18 = Z13 - Z18; x14 = Z14 +Z17; x17 = Z14 - Z17; x15 = Z15 + Z16; x16 = Z15 - Z16;
본 발명의 또 다른 실시예에 따라서 32 포인트 이산 코사인 변환시에 이용되는 양자화 파라메터(QP)에 따른 스케일링 행렬(MF)의 예는 도 119a 내지 도 119f와 같다. 32 포인트 역 이산 코사인 변환시에 이용되는 양자화 파라메터(QP)에 따른 역스케일링 행렬(V)의 예는 도 120a 내지 도 120f와 같다. 여기서, 전술한 역스케일링 행렬(V)를 구하는 방식과 다르게 다음의 수학식; V=Qstep./*PF*2^n/256 에 따라서 역스케일링 행렬이 계산된다.
32 포인트 이산 코사인 변환에 대해서 스케일링 행렬(MF) 및 역스케일링 행렬(V)를 직접적인 디비젼을 통해 계산하는 경우에는 전술한 도 119 및 도 120과 거의 유사한 스케일링 행렬 및 역스케일링 행렬이 획득된다. 구체적으로, 본 발명의 또 다른 실시예에 따른 32 포인트 이산 코사인 변환을 수행하는 행렬을 A라고 하면, 중간 행렬(S)의 i번째 행의 각 원소를 다음의 수학식;S(i)=1/sqrt(AAT(i,i)) 과 같이 정의한다. sqrt는 제곱근(square root) 함수를 의미한다. 중간 행렬(S)의 각 원소와 중간 행렬의 전치 행렬(ST)의 동일 위치의 원소를 곱한 행렬(SⓧST)을 PF라고 하면, 스케일링 행렬(MF)는 다음의 수학식; MF=PF*2^m/Qstep 과 같이 계산될 수 있다. 여기서, Qstep은 양자화 스텝, m은 양의 정수이다. 역스케일링 행렬(V)는 전술한 스케일링 행렬(MF)의 생성시에도 이용되는 중간 행렬(S)의 각 원소와 중간 행렬의 전치 행렬(ST)의 동일 위치의 원소를 각각 곱한 행렬(SⓧST)인 PF에 기초하여 생성될 수 있다. 구체적으로, 양자화 스텝을 Qstep, 중간 행렬(S)의 각 원소와 중간 행렬의 전치 행렬(ST)동일 위치의 원소들을 각각 곱한 행렬을 PF, n은 양의 정수라고 할 때, 역스케일링 행렬(V)은 다음의 수학식; V=Qstep./*PF*2^n/256 을 통해 획득된다.
도 121a 내지 도 121f는 본 발명의 또 다른 실시예에 따라서 32 포인트 이산 코사인 변환시에 이용되는 양자화 파라메터(QP)에 따른 스케일링 행렬(MF)의 예를 도시한다. 도 121a 내지 도 121f에서 스케일링 행렬 계산시 m=10인 경우이다. 도 122a 내지 도 122f는 본 발명의 또 다른 실시예에 따라서 32 포인트 이산 코사인 변환시에 이용되는 양자화 파라메터(QP)에 따른 역스케일링 행렬(V)을 도시한다. 도 122a 내지 도 122f에서는 역스케일링 행렬 계산시 n=10인 경우를 나타낸다
전술한 도 104 및 수학식 4에 기초한 16 포인트 또는 32 포인트 변환 및 역변환 과정은 곱셈을 포함하지 않는 형태로 변경될 수 있다. 구체적으로, 각 변환 과정은 분모가 2의 거듭 제곱꼴인 유리수(dyadic rational)와 중간값들의 곱으로 표현될 수 있다. 도 123a는 16x16 변환에 이용되는 곱셈의 대체 연산 과정, 도 123b는 32x32 변환에 이용되는 곱셈의 대체 연산 과정을 나타낸다. 또한, 전술한 바와 같이 곱셈 연산을 쉬프트 연산으로 대체하는 과정은 변환 및 역변환에 이용되는 값의 분모(denominator)를 고려하여 추가적인 연산을 줄일 수 있다. 도 104 및 수학식 4에 기초한 16 포인트 이산 코사인 변환에 이용되는 곱셈 연산은 도 124a에 도시된 테이블에 따라서 곱셈이 생략된 연산 형태로 대체될 수 있다. 또한, 도 104 및 수학식 4에 기초한 32 포인트 이산 코사인 변환에 이용되는 곱셈 연산은 도 124b에 도시된 테이블에 따라서 곱셈이 생략된 연산 형태로 대체될 수 있다.
도 125는 본 발명의 또 다른 실시예에 따른 이산 코사인 변환의 흐름도를 도시한다.
도 125를 참조하면, x0 내지 x31은 입력값들을 나타낸다. y0 내지 y31은 이산 코사인 변환의 출력값들을 나타낸다. 변환시에 데이터 처리 방향은 좌측에서 우측이며, 역변환시에 데이터 처리 방향은 우측에서 좌측이다. 점에서 교차하는 2개의 라인은 2개의 수의 덧셈을 나타낸다. '-'는 부정(negation)을 나타낸다. 각 라인 위의 값 R(θ)는 도 16에 도시된 바와 같은 버터플라이 구조에 기초한 연산 과정을 나타낸다. 도 125에 도시된 바와 같이, 짝수 번째(0번째, 2번째, 4번째...) 이산 코사인 변환은 대칭적이며, 홀수 번째(1번째, 3번째, 5번째...) 이산 코사인 변환은 마이너스 대칭적이다. 즉 짝수 번째 행에 대해서 dctmtx(2k,i)=dctmtx(2k, N-i)이며, 홀수 번째 행에 대해서 dctmtx(2k+1, i)=-dctmtx(2k+1, i)인 것을 알 수 있다. 여기서, dctmtx는 이산 코사인 변환 행렬을 나타낸다. 전술한 본 발명의 또 다른 실시예와 유사하게, 도 125에 도시된 각 포인트 연산을 위한 원소들 중 삼각함수에 기초한 값들을 분모가 2의 거듭 제곱 형태인 소정의 유리수 값들로 치환된 값을 이용할 수 있다. 구체적으로, 도 125의 이산코사인 변환을 위한 R(θ)는 도 126에 도시된 바와 같이 분모가 2의 거듭 제곱 형태인 소정의 유리수값들로 치환될 수 있다. 도 128은 도 126에 따라서 도 125의 R(θ)를 분모가 2의 거듭제곱인 유리수 형태로 치환하였을 때의 이산 코사인 변환을 위한 흐름도를 나타낸다.
전술한 도 125 또는 도 128에 기초한 이산 코사인 변환에 포함된 버터 플라이 구조의 연산 과정은 도 20에 도시된 바와 같은 변경된 버터 플라이 구조의 연산으로 대체될 수 있다. 즉, 버터 플라이 구조의 연산은 전술한 수학식 4와 같이 대체될 수 있다. 만약, θ가 pi/4보다 큰 경우, 버터 플라이 구조의 연산은 도 129에 도시된 바와 같이 변경될 수 있다. 따라서, 도 125 또는 도 128에 구비된 버터 플라이 구조의 연산 과정은 수학식 4와 같은 도 20의 변경된 버터 플라이 구조로 대체되거나, θ가 pi/4보다 큰 경우 도 129와 같은 변경된 버터 플라이 구조로 대체될 수 있다. 이러한 θ값에 따라서 변경된 버터 플라이 구조를 포함하는 도 125의 이산 코사인 변환에 이용되는 삼각함수에 기초한 값들을 분모가 2의 거듭제곱 형태인 유리수(dyadic rational)로 치환한다. 구체적으로, 변경된 버터플라이 구조를 포함하는 도 125의 이산 코사인 변환에 이용되는 삼각함수값들은 도 130과 같이 분모가 2의 거듭제곱 형태인 유리수로 치환되어 치환된 값이 대신 이용될 수 있다.
도 128과 같이 삼각함수를 유리수값으로 대체한 32포인트 이산 코사인 변환을 수행하는 단계는, X0 내지 X31은 변환되어야 할 입력값, A0 내지 Z31은 중간값, Y0 내지 Y31은 변환된 값을 나타낸다고 할 때, 다음의 연산 과정과 같이 표현될 수 있다.
//stage 0
Z0 = x0 + x31; Z31 = x0 - x31; Z1 = x1 + x30; Z30 = x1 - x30; Z2 = x2 + x29; Z29 = x2 - x29; Z3 = x3 + x28; Z28 = x3 - x28; Z4 = x4 + x27; Z27 = x4 - x27; Z5 = x5 + x26; Z26 = x5 - x26; Z6 = x6 + x25; Z25 = x6 - x25; Z7 = x7 + x24; Z24 = x7 - x24; Z8 = x8 + x23; Z23 = x8 - x23; Z9 = x9 + x22; Z22 = x9 - x22; Z10 = x10 + x21; Z21 = x10 - x21; Z11 = x11 + x20; Z20 = x11 - x20; Z12 = x12 + x19; Z19 = x12 - x19; Z13 = x13 + x18; Z18 = x13 - x18; Z14 = x14 + x17; Z17 = x14 - x17; Z15 = x15 + x16; Z16 = x15 - x16;
//stage 1
A0 = Z0 + Z15; A1 = Z1 + Z14; A2 = Z2 + Z13; A3 = Z3 + Z12; A4 = Z4 + Z11; A5 = Z5 + Z10; A6 = Z6 + Z9; A7 = Z7 + Z8; A8 = Z7 - Z8; A9 = Z6 - Z9; A10 = Z5 - Z10; A11 = Z4 - Z11; A12 = Z3 - Z12; A13 = Z2 - Z13; A14 = Z1 - Z14; A15 = Z0 - Z15; A16 = (171*Z16 - 189*Z31) >> 8; A31 = (189*Z16 + 171*Z31) >> 8; A17 = (205*Z17 + 152*Z30) >> 8; A30 = (-152*Z17 + 205*Z30) >> 8; A18 = (131*Z18 - 219*Z29) >> 8; A29 = (219*Z18 + 131*Z29) >> 8; A19 = (231*Z19 + 109*Z28) >> 8; A28 = (-109*Z19 + 231*Z28) >> 8; A20 = (86*Z20 - 241*Z27) >> 8; A27 = (241*Z20 + 86*Z27) >> 8; A21 = (248*Z21 + 62*Z26) >> 8; A26 = (-62*Z21 + 248*Z26) >> 8; A22 = (37*Z22 - 253*Z25) >> 8; A25 = (253*Z22 + 37*Z25) >> 8; A23 = (255*Z23 + 12*Z24) >> 8; A24 = (-12*Z23 + 255*Z24) >> 8;
//stage 2
B0 = A0 + A7; B7 = A0 - A7; B1 = A1 + A6; B6 = A1 - A6; B2 = A2 + A5; B5 = A2 - A5; B3 = A3 + A4; B4 = A3 - A4; B8 = (197*A8 + 162*A15) >> 8; B15 = (-162*A8 + 197*A15) >> 8; B9 = (120*A9 - 225*A14) >> 8; B14 = (225*A9 + 120*A14) >> 8; B10 = (244*A10 + 74*A13) >> 8; B13 = (-74*A10 + 244*A13) >> 8; B11 = (25*A11 - 254*A12) >> 8; B12 = (254*A11 + 25*A12) >> 8; B16 = A16 + A23; B23 = A16 - A23; B17 = A17 + A22; B22 = A17 - A22; B18 = A18 + A21; B21 = A18 - A21; B19 = A19 + A20; B20 = A19 - A20; B24 = A24 + A31; B31 = A24 - A31; B25 = A25 + A30; B30 = A25 - A30; B26 = A26 + A29; B29 = A26 - A29; B27 = A27 + A28; B28 = A27 - A28;
//stage 3
C0 = B0 + B3; C3 = B0 - B3; C1 = B1 + B2; C2 = B1 - B2; C4 = (49*B4 + 251*B7) >> 8; C7 = (-251*B4 + 49*B7) >> 8; C5 = (142*B5 + 212*B6) >> 8; C6 = (-212*B5 + 142*B6) >> 8; C8 = B8 + B11; C11 = B8 - B11; C9 = B9 + B10; C10 = B9 - B10; C12 = B12 + B15; C15 = B12 - B15; C13 = B13 + B14; C14 = B13 - B14; C16 = B16 + B28; C28 = B16 - B28; C17 = B17 + B29; C29 = B17 - B29; C18 = B18 + B30; C30 = B18 - B30; C19 = B19 + B31; C31 = B19 - B31; C20 = B20 + B23; C23 = B20 - B23; C21 = B21 + B22; C22 = B21 - B22; C24 = B24 + B27; C27 = B24 - B27; C25 = B25 + B26; C26 = B25 - B26;
//stage 4
D0 = (181*(C0 + C1)) >> 8; D1 = (181*(-C0 +C1)) >> 8; D2 = (97*C2 + 236*C3) >> 8; D3 = (-236*C2 + 97*C3) >> 8; D4 = C4 + C5; D5 = C4 - C5; D6 = -C6 + C7; D7 = C6 + C7; D8 = C8 + C14; D14 = C8 - C14; D9 = C9 + C15; D15 = C9 - C15; D10 = C10 + C11; D11 = C10 - C11; D12 = C12 + C13; D13 = C12 - C13; D16 = (181*(C16 + C19)) >> 8; D19 = (181*(-C16 + C19)) >> 8; D20 = C20 + C26; D26 = C20 - C26; D21 = C21 + C27; D27 = C21 - C27; D22 = C22 + C23; D23 = C22 - C23; D24 = C24 + C25; D25 = C24 - C25; D28 = (181*(C28 + C31)) >> 8; D31 = (181*(-C28 + C31)) >> 8;
//stage 5
E5 = (181*(D5 + D7)) >> 8; E7 = (181*(-D5 + D7)) >> 8; E8 = (97*D8 - 236*D9) >> 8; E9 = (236*D8 + 97*D9) >> 8; E11 = (181*(D11 + D12)) >> 8; E12 = (181*(-D11 + D12)) >> 8; E14 = (97*D14 - 236*D15) >> 8; E15 = (236*D14 + 97*D15) >> 8; E16 = D16 + C18; E18 = D16 - C18; E17 = C17 + D19; E19 = C17 - D19; E20 = (236*D20 + 97*D21) >> 8; E21 = (-97*D20 + 236*D21) >> 8; E23 = (181*(D23 + D24)) >> 8; E24 = (181*(-D23 + D24)) >> 8; E26 = (236*D26 + 97*D27) >> 8; E27 = (-97*D26 + 236*D27) >> 8; E28 = - D28 + C30; E30 = D28 + C30; E29 = - C29 + D31; E31 = C29 + D31;
//stage 6
F16 = (251*E16 - 49*E17) >> 8; F17 = (49*E16 + 251*E17) >> 8; F18 = (212*E18 - 142*E19) >> 8; F19 = (142*E18 + 212*E19) >> 8; F28 = (212*E28 - 142*E29) >> 8; F29 = (142*E28 + 212*E29) >> 8; F30 = (251*E30 - 49*E31) >> 8; F31 = (49*E30 + 251*E31) >> 8;
y0 = D0; y1 = E24; y2 = E12; y3 = -F16; y4 = D4; y5 = F31; y6 = E8; y7 = -E26; y8 = D2; y9 = E21; y10 = E15; y11 = F29; y12 = E5; y13 = -F18; y14 = D13; y15 = D22; y16 = -D1; y17 = D25; y18 = D10; y19 = -F19; y20 = -E7; y21 = -F28; y22 = -E14; y23 = -E20; y24 = D3; y25 = -E27; y26 = E9; y27 = -F30; y28 = D6; y29 = -F17; y30 = E11; y31 = -E23;
이에 대응되는 32 포인트 역 이산 코사인 변환 과정은 다음의 연산 과정과 같이 표현된다. 다음의 연산 과정에서 Y0 내지 Y31은 역변환되어야 할 입력값, A0 내지 G31은 중간값, X0 내지 X31은 역변환된 값을 나타낸다.
D0= y0; E24 = y1; E12 = y2; F16 = -y3; D4 = y4; F31 = y5; E8 = y6; E26 = -y7; D2 = y8; E21 = y9; E15 = y10; F29 = y11; E5 = y12; F18 = -y13; D13 = y14; D22 = y15; D1 = -y16; D25 = y17; D10 = y18; F19 = -y19; E7 = -y20; F28 = -y21 ; E14 = -y22; E20 = -y23; D3 = y24; E27 = -y25; E9 = y26; F30 = -y27; D6 = y28; F17 = -y29 ; E11 = y30; E23 = -y31;
//stage 6
E16 = (251*F16 + 49*F17) >> 8; E17 = (-49*F16 + 251*F17) >> 8; E18 = (212*F18 + 142*F19) >> 8; E19 = (-142*F18 + 212*F19) >> 8; E28 = (212*F28 + 142*F29) >> 8; E29 = (-142*F28 + 212*F29) >> 8; E30 = (251*F30 + 49*F31) >> 8; E31 = (-49*F30 + 251*F31) >> 8;
//stage 5
D5 = (181*(E5 - E7)) >> 8; D7 = (181*(E5 + E7)) >> 8; D8 = (97*E8 + 236*E9) >> 8; D9 = (-236*E8 + 97*E9) >> 8; D11 = (181*(E11 - E12)) >> 8; D12 = (181*(E11 + E12)) >> 8; D14 = (97*E14 + 236*E15) >> 8; D15 = (-236*E14 + 97*E15) >> 8; D16 = E16 + E18; C18 = E16 - E18; C17 = E17 + E19; D19 = E17 - E19; D20 = (236*E20 - 97*E21) >> 8; D21 = (97*E20 + 236*E21) >> 8; D23 = (181*(E23 - E24)) >> 8; D24 = (181*(E23 + E24)) >> 8; D26 = (236*E26 - 97*E27) >> 8; D27 = (97*E26 + 236*E27) >> 8; D28 = - E28 + E30; C30 = E28 + E30; C29 = - E29 + E31; D31 = E29 + E31;
//stage 4
C0 = (181*(D0 - D1)) >> 8; C1 = (181*(D0 + D1)) >> 8; C2 = (97*D2 - 236*D3) >> 8; C3 = (236*D2 + 97*D3) >> 8; C4 = D4 + D5; C5 = D4 - D5; C6 = -D6 + D7; C7 = D6 + D7; C8 = D8 + D14; C14 = D8 - D14; C9 = D9 + D15; C15 = D9 - D15; C10 = D10 + D11; C11 = D10 - D11; C12 = D12 + D13; C13 = D12 - D13; C16 = (181*(D16 - D19)) >> 8; C19 = (181*(D16 + D19)) >> 8; C20 = D20 + D26; C26 = D20 - D26; C21 = D21 + D27; C27 = D21 - D27; C22 = D22 + D23; C23 = D22 - D23; C24 = D24 + D25; C25 = D24 - D25; C28 = (181*(D28 - D31)) >> 8; C31 = (181*(D28 + D31)) >> 8;
//stage 3
B0 = C0 + C3; B3 = C0 - C3; B1 = C1 + C2; B2 = C1 - C2; B4 = (49*C4 - 251*C7) >> 8; B7 = (251*C4 + 49*C7) >> 8; B5 = (142*C5 - 212*C6) >> 8; B6 = (212*C5 + 142*C6) >> 8; B8 = C8 + C11; B11 = C8 - C11; B9 = C9 + C10; B10 = C9 - C10; B12 = C12 + C15; B15 = C12 - C15; B13 = C13 + C14; B14 = C13 - C14; B16 = C16 + C28; B28 = C16 - C28; B17 = C17 + C29; B29 = C17 - C29; B18 = C18 + C30; B30 = C18 - C30; B19 = C19 + C31; B31 = C19 - C31; B20 = C20 + C23; B23 = C20 - C23; B21 = C21 + C22; B22 = C21 - C22; B24 = C24 + C27; B27 = C24 - C27; B25 = C25 + C26; B26 = C25 - C26;
//stage 2
A0 = B0 + B7; A7 = B0 - B7; A1 = B1 + B6; A6 = B1 - B6; A2 = B2 + B5; A5 = B2 - B5; A3 = B3 + B4; A4 = B3 - B4; A8 = (197*B8 - 162*B15) >> 8; A15 = (162*B8 + 197*B15) >> 8; A9 = (120*B9 + 225*B14) >> 8; A14 = (-225*B9 + 120*B14) >> 8; A10 = (244*B10 - 74*B13) >> 8; A13 = (74*B10 + 244*B13) >> 8; A11 = (25*B11 + 254*B12) >> 8; A12 = (-254*B11 + 25*B12) >> 8; A16 = B16 + B23; A23 = B16 - B23; A17 = B17 + B22; A22 = B17 - B22; A18 = B18 + B21; A21 = B18 - B21; A19 = B19 + B20; A20 = B19 - B20; A24 = B24 + B31; A31 = B24 - B31; A25 = B25 + B30; A30 = B25 - B30; A26 = B26 + B29; A29 = B26 - B29; A27 = B27 + B28; A28 = B27 - B28;
//stage 1
Z0 = A0 + A15; Z1 = A1 + A14; Z2 = A2 + A13; Z3 = A3 + A12; Z4 = A4 + A11; Z5 = A5 + A10; Z6 = A6 + A9; Z7 = A7 + A8; Z8 = A7 - A8; Z9 = A6 - A9; Z10 = A5 - A10; Z11 = A4 - A11; Z12 = A3 - A12; Z13 = A2 - A13; Z14 = A1 - A14; Z15 = A0 - A15; Z16 = (171*A16 + 189*A31) >> 8; Z31 = (-189*A16 + 171*A31) >> 8; Z17 = (205*A17 - 152*A30) >> 8; Z30 = (152*A17 + 205*A30) >> 8; Z18 = (131*A18 + 219*A29) >> 8; Z29 = (-219*A18 + 131*A29) >> 8; Z19 = (231*A19 - 109*A28) >> 8; Z28 = (109*A19 + 231*A28) >> 8; Z20 = (86*A20 + 241*A27) >> 8; Z27 = (-241*A20 + 86*A27) >> 8; Z21 = (248*A21 - 62*A26) >> 8; Z26 = (62*A21 + 248*A26) >> 8; Z22 = (37*A22 + 253*A25) >> 8; Z25 = (-253*A22 + 37*A25) >> 8; Z23 = (255*A23 - 12*A24) >> 8; Z24 = (12*A23 + 255*A24) >> 8;
x0 = Z0 + Z31; x31 = Z0 - Z31; x1 = Z1 + Z30; x30 = Z1 - Z30; x2 = Z2 + Z29; x29 = Z2 - Z29; x3 = Z3 + Z28; x28 = Z3 - Z28; x4 = Z4 + Z27; x27 = Z4 - Z27; x5 = Z5 + Z26; x26 = Z5 - Z26; x6 = Z6 + Z25; x25 = Z6 - Z25; x7 = Z7 + Z24; x24 = Z7 - Z24; x8 = Z8 + Z23; x23 = Z8 - Z23; x9 = Z9 + Z22; x22 = Z9 - Z22; x10 = Z10 + Z21; x21 = Z10 - Z21; x11 = Z11 + Z20; x20 = Z11 - Z20; x12 = Z12 + Z19; x19 = Z12 - Z19; x13 = Z13 + Z18; x18 = Z13 - Z18; x14 = Z14 + Z17; x17 = Z14 - Z17; x15 = Z15 +Z16; x16 = Z15 - Z16;
전술한 도 125에 도시된 32 포인트 이산 코사인 변환에 기초하여, cos 및 sin 값을 분모가 2의 거듭제곱꼴인 형태로 치환하여 이산 코사인 변환을 수행하는 경우 전술한 도 3의 단계 350과 유사하게, 이산 코사인 변환에 이용되는 원래의 NxN 변환 행렬(Original_A)과 치환된 삼각함수 값을 이용한 변환 사이의 차이값을 보정하기 위한 스케일링 행렬 및 시프트 연산을 적용하여 NxN 크기의 블록을 변환한 변환 블록에 대한 양자화를 수행할 수 있다.
본 발명의 또 다른 실시예에 따라서 32x32 블록의 변환시에 이용되는 양자화 파라메터(QP)에 따른 스케일링 행렬(MF)의 예는 도 131a 내지 도 131f와 같다. 32x32 블록의 변환시에 이용되는 양자화 파라메터(QP)에 따른 역스케일링 행렬(V)의 예는 도 132a 내지 도 132f와 같다.
32 포인트 변환에 대해서 스케일링 행렬(MF) 및 역스케일링 행렬(V)를 직접적인 디비젼을 통해 계산하는 경우에는 전술한 도 131 및 도 132과 거의 유사한 스케일링 행렬 및 역스케일링 행렬이 획득된다. 구체적으로, 본 발명의 또 다른 실시예에 따른 32 포인트 이산 코사인 변환을 수행하는 행렬을 A라고 하면, 중간 행렬(S)의 i번째 행의 각 원소를 다음의 수학식;S(i)=1/sqrt(AAT(i,i)) 과 같이 정의한다. sqrt는 제곱근(square root) 함수를 의미한다. 중간 행렬(S)의 각 원소와 중간 행렬의 전치 행렬(ST)의 동일 위치의 원소를 곱한 행렬(SⓧST)을 PF라고 하면, 스케일링 행렬(MF)는 다음의 수학식; MF=PF*2^m/Qstep 과 같이 계산될 수 있다. 여기서, Qstep은 양자화 스텝, m은 양의 정수이다. 역스케일링 행렬(V)는 전술한 스케일링 행렬(MF)의 생성시에도 이용되는 중간 행렬(S)의 각 원소와 중간 행렬의 전치 행렬(ST)의 동일 위치의 원소를 각각 곱한 행렬(SⓧST)인 PF에 기초하여 생성될 수 있다. 구체적으로, 양자화 스텝을 Qstep, 중간 행렬(S)의 각 원소와 중간 행렬의 전치 행렬(ST)동일 위치의 원소들을 각각 곱한 행렬을 PF, n은 양의 정수라고 할 때, 역스케일링 행렬(V)은 다음의 수학식; V=Qstep*PF*2^n 을 통해 획득된다.
도 134a 내지 도 134f는 본 발명의 또 다른 실시예에 따라서 32 포인트 이산 코사인 변환시에 이용되는 양자화 파라메터(QP)에 따른 스케일링 행렬(MF)의 예를 도시한다. 도 134a 내지 도 134f에서 스케일링 행렬 계산시 m=10인 경우이다. 도 135a 내지 도 135f는 본 발명의 또 다른 실시예에 따라서 32 포인트 이산 코사인 변환시에 이용되는 양자화 파라메터(QP)에 따른 역스케일링 행렬(V)을 도시한다. 도 108a 내지 도 108f에서는 역스케일링 행렬 계산시 n=10인 경우를 나타낸다
한편, 도 128의 이산 코사인 변환에 포함된 버터 플라이 구조를 θ값에 따라 도 20 또는 도 129의 변경된 버터 플라이 구조로 치환하고, 전술한 도 130과 같이 분모가 2의 거듭제곱 형태인 유리수를 이용하여 32 포인트 이산 코사인 변환을 수행하는 단계는, X0 내지 X31은 변환되어야 할 입력값, A0 내지 Z31은 중간값, Y0 내지 Y31은 변환된 값을 나타낸다고 할 때, 다음의 연산 과정과 같이 표현될 수 있다.
//stage 0
Z0 = x0 + x31; Z31 = x0 - x31; Z1 = x1 + x30; Z30 = x1 - x30; Z2 = x2 + x29; Z29 = x2 - x29; Z3 = x3 + x28; Z28 = x3 - x28; Z4 = x4 + x27; Z27 = x4 - x27; Z5 = x5 + x26; Z26 = x5 - x26; Z6 = x6 + x25; Z25 = x6 - x25; Z7 = x7 + x24; Z24 = x7 - x24; Z8 = x8 + x23; Z23 = x8 - x23; Z9 = x9 + x22; Z22 = x9 - x22; Z10 = x10 + x21; Z21 = x10 - x21; Z11 = x11 + x20; Z20 = x11 - x20; Z12 = x12 + x19; Z19 = x12 - x19; Z13 = x13 + x18; Z18 = x13 - x18; Z14 = x14 + x17; Z17 = x14 - x17; Z15 = x15 + x16; Z16 = x15 - x16;
//stage 1
A0 = Z0 + Z15; A1 = Z1 + Z14; A2 = Z2 + Z13; A3 = Z3 + Z12; A4 = Z4 + Z11; A5 = Z5 + Z10; A6 = Z6 + Z9; A7 = Z7 + Z8; A8 = Z7 - Z8; A9 = Z6 - Z9; A10 = Z5 - Z10; A11 = Z4 - Z11; A12 = Z3 - Z12; A13 = Z2 - Z13; A14 = Z1 - Z14; A15 = Z0 - Z15; A16 = Z16 - (113*Z31 >> 8); A31 = Z31 + (189*A16 >> 8); A16 = A16 - (113*A31 >> 8); A17 = Z17 + (84*Z30 >> 8); A30 = Z30 - (152*A17 >> 8); A17 = A17 + (84*A30 >> 8); A18 = Z18 - (145*Z29 >> 8); A29 = Z29 + (219*A18 >> 8); A18 = A18 - (145*A29 >> 8); A19 = Z19 + (57*Z28 >> 8); A28 = Z28 - (109*A19 >> 8); A19 = A19 + (57*A28 >> 8); A20 = Z20 - (180*Z27 >> 8); A27 = Z27 + (241*A20 >> 8); A20 = A20 - (180*A27 >> 8); A21 = Z21 + (31*Z26 >> 8); A26 = Z26 - (62*A21 >> 8); A21 = A21 + (31*A26 >> 8); A22 = Z22 - (220*Z25 >> 8); A25 = Z25 + (253*A22 >> 8); A22 = A22 - (220*A25 >> 8); A23 = Z23 + (6*Z24 >> 8); A24 = Z24 - (12*A23 >> 8); A23 = A23 + (6*A24 >> 8);
//stage 2
B0 = A0 + A7; B7 = A0 - A7; B1 = A1 + A6; B6 = A1 - A6; B2 = A2 + A5; B5 = A2 - A5; B3 = A3 + A4; B4 = A3 - A4; B8 = A8 + (91*A15 >> 8); B15 = A15 - (162*B8 >> 8); B8 = B8 + (91*B15 >> 8); B9 = A9 - (153*A14 >> 8); B14 = A14 + (225*B9 >> 8); B9 = B9 - (153*B14 >> 8); B10 = A10 + (37*A13 >> 8); B13 = A13 - (74*B10 >> 8); B10 = B10 + (37*B13 >> 8); B11 = A11 - (232*A12 >> 8); B12 = A12 + (254*B11 >> 8); B11 = B11 - (232*B12 >> 8); B16 = A16 + A23; B23 = A16 - A23; B17 = A17 + A22; B22 = A17 - A22; B18 = A18 + A21; B21 = A18 - A21; B19 = A19 + A20; B20 = A19 - A20; B24 = A24 + A31; B31 = A24 - A31; B25 = A25 + A30; B30 = A25 - A30; B26 = A26 + A29; B29 = A26 - A29; B27 = A27 + A28; B28 = A27 - A28;
//stage 3
C0 = B0 + B3; C3 = B0 - B3; C1 = B1 + B2; C2 = B1 - B2; C4 = B4 + (210*B7 >> 8); C7 = B7 - (251*C4 >> 8); C4 = C4 + (210*C7 >> 8); C5 = B5 + (136*B6 >> 8); C6 = B6 - (212*C5 >> 8); C5 = C5 + (136*C6 >> 8); C8 = B8 + B11; C11 = B8 - B11; C9 = B9 + B10; C10 = B9 - B10; C12 = B12 + B15; C15 = B12 - B15; C13 = B13 + B14; C14 = B13 - B14; C16 = B16 + B28; C28 = B16 - B28; C17 = B17 + B29; C29 = B17 - B29; C18 = B18 + B30; C30 = B18 - B30; C19 = B19 + B31; C31 = B19 - B31; C20 = B20 + B23; C23 = B20 - B23; C21 = B21 + B22; C22 = B21 - B22; C24 = B24 + B27; C27 = B24 - B27; C25 = B25 + B26; C26 = B25 - B26;
//stage 4
D0 = C0 + C1; D1 = C1 - (D0 >> 1); D3 = C2 - (106*C3 >> 8); D2 = C3 + (90*D3 >> 8); D3 = -D3; D4 = C4 + C5; D5 = C4 - C5; D6 = -C6 + C7; D7 = C6 + C7; D8 = C8 + C14; D14 = C8 - C14; D9 = C9 + C15; D15 = C9 - C15; D10 = C10 + C11; D11 = C10 - C11; D12 = C12 + C13; D13 = C12 - C13; D16 = C16 + (106*C19 >> 8); D19 = C19 - (181*D16 >> 8); D16 = D16 + (106*D19 >> 8);D20 = C20 + C26; D26 = C20 - C26; D21 = C21 + C27; D27 = C21 - C27; D22 = C22 + C23; D23 = C22 - C23; D24 = C24 + C25; D25 = C24 - C25; D28 = C28 + (106*C31 >> 8); D31 = C31 - (181*D28 >> 8); D28 = D28 + (106*D31 >> 8); //stage 5
E5 = D5 + D7; E7 = D7 - (E5 >> 1); E9 = D8 + (106*D9 >> 8); E8 = -(D9 - (90*E9 >> 8)); E11 = D11 + D12; E12 = D12 - (E11 >> 1); E15 = D14 + (106*D15 >> 8); E14 = -(D15 - (90*E15 >> 8)); E16 = D16 + C18; E18 = D16 - C18; E17 = C17 + D19; E19 = C17 - D19; E20 = D20 + (106*D21 >> 8); E21 = D21 - (90*E20 >> 8); E23 = D23 + D24; E24 = D24 - (E23 >> 1); E26 = D26 + (106*D27 >> 8); E27 = D27 - (90*E26 >> 8); E28 = - D28 + C30; E30 = D28 + C30; E29 = - C29 + D31; E31 = C29 + D31;
//stage 6
F16 = E16 - (50*E17 >> 8); F17 = E17 + (48*F16 >> 8); F18 = E18 - (171*E19 >> 8); F19 = E19 + (118*F18 >> 8); F28 = E28 - (171*E29 >> 8); F29 = E29 + (118*F28 >> 8); F30 = E30 - (50*E31 >> 8); F31 = E31 + (48*F30 >> 8);
y0 = D0; y1 = E24; y2 = E12; y3 = -F16; y4 = D4; y5 = F31; y6 = E8; y7 = -E26; y8 = D2; y9 = E21; y10 = E15; y11 = F29; y12 = E5; y13 = -F18; y14 = D13; y15 = D22; y16 = -D1; y17 = D25; y18 = D10; y19 = -F19; y20 = -E7; y21 = -F28; y22 = -E14; y23 = -E20; y24 = D3; y25 = -E27; y26 = E9; y27 = -F30; y28 = D6; y29 = -F17; y30 = E11; y31 = -E23;
이에 대응되는 32 포인트 역 이산 코사인 변환 과정은 다음의 연산 과정과 같이 표현된다. 다음의 연산 과정에서 Y0 내지 Y31은 역변환되어야 할 입력값, A0 내지 G31은 중간값, X0 내지 X31은 역변환된 값을 나타낸다.
D0= y0; E24 = y1; E12 = y2; F16 = -y3; D4 = y4; F31 = y5; E8 = y6; E26 = -y7; D2 = y8; E21 = y9; E15 = y10; F29 = y11; E5 = y12; F18 = -y13; D13 = y14; D22 = y15; D1 = -y16; D25 = y17; D10 = y18; F19 = -y19; E7 = -y20; F28 = -y21; E14 = -y22; E20 = -y23; D3 = y24; E27 = -y25; E9 = y26; F30 = -y27; D6 = y28; F17 = -y29; E11 = y30; E23 = -y31;
//stage 6
E17 = F17 - (48*F16 >> 8); E16 = F16 + (50*E17 >> 8); E19 = F19 - (118*F18 >> 8); E18 = F18 + (171*E19 >> 8); E29 = F29 - (118*F28 >> 8); E28 = F28 + (171*E29 >> 8); E31 = F31 - (48*F30 >> 8); E30 = F30 + (50*E31 >> 8);
//stage 5
D7 = E7 + (E5 >> 1); D5= E5 - D7; D9 = -E8 + (90*E9 >> 8); D8 = E9 - (106*D9 >> 8); D12 = E12 + (E11 >> 1); D11 = E11 - D12; D15 = -E14 + (90*E15 >> 8); D14 = E15 - (106*D15 >> 8); D16 = E16 + E18; C18 = E16 - E18; C17 = E17 + E19; D19 = E17 - E19; D21 = E21 + (90*E20 >> 8); D20 = E20 - (106*D21 >> 8); D24 = E24 + (E23 >> 1); D23 = E23 - D24; D27 = E27 + (90*E26 >> 8); D26 = E26 - (106*D27 >> 8); D28 = - E28 + E30; C30 = E28 + E30; C29 = - E29 + E31; D31 = E29 + E31;
//stage 4
C1 = D1 + (D0 >> 1); C0 = D0 - C1; D3 = -D3; C3 = D2 - (90*D3 >> 8); C2 = D3 + (106*C3 >> 8); C4 = D4 + D5; C5 = D4 - D5; C6 = -D6 + D7; C7 = D6 + D7; C8 = D8 + D14; C14 = D8 - D14; C9 = D9 + D15; C15 = D9 - D15; C10 = D10 + D11; C11 = D10 - D11; C12 = D12 + D13; C13 = D12 - D13; D16 = D16 - (106*D19 >> 8); C19 = D19 + (181*D16 >> 8); C16 = D16 - (106*C19 >> 8); C20 = D20 + D26; C26 = D20 - D26; C21 = D21 + D27; C27 = D21 - D27; C22 = D22 + D23; C23 = D22 - D23; C24 = D24 + D25; C25 = D24 - D25; D28 = D28 - (106*D31 >> 8); C31 = D31 + (181*D28 >> 8); C28 = D28 - (106*C31 >> 8);
//stage 3
B0 = C0 + C3; B3 = C0 - C3; B1 = C1 + C2; B2 = C1 - C2; C4 = C4 - (210*C7 >> 8); B7 = C7 + (251*C4 >> 8); B4 = C4 - (210*B7 >> 8); C5 = C5 - (136*C6 >> 8); B6 = C6 + (212*C5 >> 8); B5 = C5 - (136*B6 >> 8); B8 = C8 + C11; B11 = C8 - C11; B9 = C9 + C10; B10 = C9 - C10; B12 = C12 + C15; B15 = C12 - C15; B13 = C13 + C14; B14 = C13 - C14; B16 = C16 + C28; B28 = C16 - C28; B17 = C17 + C29; B29 = C17 - C29; B18 = C18 + C30; B30 = C18 - C30; B19 = C19 + C31; B31 = C19 - C31; B20 = C20 + C23; B23 = C20 - C23; B21 = C21 + C22; B22 = C21 - C22; B24 = C24 + C27; B27 = C24 - C27; B25 = C25 + C26; B26 = C25 - C26;
//stage 2
A0 = B0 + B7; A7 = B0 - B7; A1 = B1 + B6; A6 = B1 - B6; A2 = B2 + B5; A5 = B2 - B5; A3 = B3 + B4; A4 = B3 - B4; B8 = B8 - (91*B15 >> 8); A15 = B15 + (162*B8 >> 8); A8 = B8 - (91*A15 >> 8); B9 = B9 + (153*B14 >> 8); A14 = B14 - (225*B9 >> 8); A9 = B9 + (153*A14 >> 8); B10 = B10 - (37*B13 >> 8); A13 = B13 + (74*B10 >> 8); A10 = B10 - (37*A13 >> 8); B11 = B11 + (232*B12 >> 8); A12 = B12 - (254*B11 >> 8); A11 = B11 + (232*A12 >> 8); A16 = B16 + B23; A23 = B16 - B23; A17 = B17 + B22; A22 = B17 - B22; A18 = B18 + B21; A21 = B18 - B21; A19 = B19 + B20; A20 = B19 - B20; A24 = B24 + B31; A31 = B24 - B31; A25 = B25 + B30; A30 = B25 - B30; A26 = B26 + B29; A29 = B26 - B29; A27 = B27 + B28; A28 = B27 - B28;
//stage 1
Z0 = A0 + A15; Z1 = A1 + A14; Z2 = A2 + A13; Z3 = A3 + A12; Z4 = A4 + A11; Z5 = A5 + A10; Z6 = A6 + A9; Z7 = A7 + A8; Z8 = A7 - A8; Z9 = A6 - A9; Z10 = A5 - A10; Z11 = A4 - A11; Z12 = A3 - A12; Z13 = A2 - A13; Z14 = A1 - A14; Z15 = A0 - A15; A16 = A16 + (113*A31 >> 8); Z31 = A31 - (189*A16 >> 8); Z16 = A16 + (113*Z31 >> 8); A17 = A17 - (84*A30 >> 8); Z30 = A30 + (152*A17 >> 8); Z17 = A17 - (84*Z30 >> 8); A18 = A18 + (145*A29 >> 8); Z29 = A29 - (219*A18 >> 8); Z18 = A18 + (145*Z29 >> 8); A19 = A19 - (57*A28 >> 8); Z28 = A28 + (109*A19 >> 8); Z19 = A19 - (57*Z28 >> 8); A20 = A20 + (180*A27 >> 8); Z27 = A27 - (241*A20 >> 8); Z20 = A20 + (180*Z27 >> 8); A21 = A21 - (31*A26 >> 8); Z26 = A26 + (62*A21 >> 8); Z21 = A21 - (31*Z26 >> 8); A22 = A22 + (220*A25 >> 8); Z25 = A25 - (253*A22 >> 8); Z22 = A22 + (220*Z25 >> 8);A23 = A23 - (6*A24 >> 8); Z24 = A24 + (12*A23 >> 8); Z23 = A23 - (6*Z24 >> 8);
x0 = Z0 + Z31; x31 = Z0 - Z31; x1 = Z1 + Z30; x30 = Z1 - Z30; x2 = Z2 + Z29; x29 = Z2 - Z29; x3 = Z3 + Z28; x28 = Z3 - Z28; x4 = Z4 + Z27; x27 = Z4 - Z27; x5 = Z5 + Z26; x26 = Z5 - Z26; x6 = Z6 + Z25; x25 = Z6 - Z25; x7 = Z7 + Z24; x24 = Z7 - Z24; x8 = Z8 + Z23; x23 = Z8 - Z23; x9 = Z9 + Z22; x22 = Z9 - Z22; x10 = Z10 + Z21; x21 = Z10 - Z21; x11 = Z11 + Z20; x20 = Z11 - Z20; x12 = Z12 + Z19; x19 = Z12 - Z19; x13 = Z13 + Z18; x18 = Z13 - Z18; x14 = Z14 + Z17; x17 = Z14 - Z17; x15 = Z15 + Z16; x16 = Z15 - Z16;
전술한 도 128에 도시된 32 포인트 이산 코사인 변환에 기초하여, cos 및 sin 값을 분모가 2의 거듭제곱꼴인 형태로 치환하여 이산 코사인 변환을 수행하는 경우 전술한 도 3의 단계 350과 유사하게, 이산 코사인 변환에 이용되는 원래의 NxN 변환 행렬(Original_A)과 치환된 삼각함수 값을 이용한 변환 사이의 차이값을 보정하기 위한 스케일링 행렬 및 시프트 연산을 적용하여 NxN 크기의 블록을 변환한 변환 블록에 대한 양자화를 수행할 수 있다.
본 발명의 또 다른 실시예에 따라서 32x32 블록의 변환시에 이용되는 양자화 파라메터(QP)에 따른 스케일링 행렬(MF)의 예는 도 136a 내지 도 136f와 같다. 32x32 블록의 변환시에 이용되는 양자화 파라메터(QP)에 따른 역스케일링 행렬(V)의 예는 도 137a 내지 도 137f와 같다.
32 포인트 변환에 대해서 스케일링 행렬(MF) 및 역스케일링 행렬(V)를 직접적인 디비젼을 통해 계산하는 경우에는 전술한 도 136 및 도 137과 거의 유사한 스케일링 행렬 및 역스케일링 행렬이 획득된다. 구체적으로, 본 발명의 또 다른 실시예에 따른 32 포인트 이산 코사인 변환을 수행하는 행렬을 A라고 하면, 중간 행렬(S)의 i번째 행의 각 원소를 다음의 수학식;S(i)=1/sqrt(AAT(i,i)) 과 같이 정의한다. sqrt는 제곱근(square root) 함수를 의미한다. 중간 행렬(S)의 각 원소와 중간 행렬의 전치 행렬(ST)의 동일 위치의 원소를 곱한 행렬(SⓧST)을 PF라고 하면, 스케일링 행렬(MF)는 다음의 수학식; MF=PF*2^m/Qstep 과 같이 계산될 수 있다. 여기서, Qstep은 양자화 스텝, m은 양의 정수이다. 역스케일링 행렬(V)는 전술한 스케일링 행렬(MF)의 생성시에도 이용되는 중간 행렬(S)의 각 원소와 중간 행렬의 전치 행렬(ST)의 동일 위치의 원소를 각각 곱한 행렬(SⓧST)인 PF에 기초하여 생성될 수 있다. 구체적으로, 양자화 스텝을 Qstep, 중간 행렬(S)의 각 원소와 중간 행렬의 전치 행렬(ST)동일 위치의 원소들을 각각 곱한 행렬을 PF, n은 양의 정수라고 할 때, 역스케일링 행렬(V)은 다음의 수학식; V=Qstep*PF*2^n 을 통해 획득된다.
도 138a 내지 도 138f는 본 발명의 또 다른 실시예에 따라서 32 포인트 이산 코사인 변환시에 이용되는 양자화 파라메터(QP)에 따른 스케일링 행렬(MF)의 예를 도시한다. 도 138a 내지 도 138f에서 스케일링 행렬 계산시 m=10인 경우이다. 도 139a 내지 도 139f는 본 발명의 또 다른 실시예에 따라서 32 포인트 이산 코사인 변환시에 이용되는 양자화 파라메터(QP)에 따른 역스케일링 행렬(V)을 도시한다. 도 139a 내지 도 139f에서는 역스케일링 행렬 계산시 n=10인 경우를 나타낸다
전술한 도 128에 기초한 32 포인트 변환 및 역변환 과정은 곱셈을 포함하지 않는 형태로 변경될 수 있다. 구체적으로, 각 변환 과정은 분모가 2의 거듭 제곱꼴인 유리수(dyadic rational)와 중간값들의 곱으로 표현될 수 있다. 도 140는 32 포인트 변환에 이용되는 곱셈의 대체 연산 과정을 나타낸다. 또한, 전술한 바와 같이 곱셈 연산을 쉬프트 연산으로 대체하는 과정은 변환 및 역변환에 이용되는 값의 분모(denominator)를 고려하여 추가적인 연산을 줄일 수 있다. 도 128에 기초한 32 포인트 이산 코사인 변환에 이용되는 곱셈 연산은 도 141에 도시된 테이블에 따라서 곱셈이 생략된 연산 형태로 대체될 수 있다.
또한, 도 128의 이산 코사인 변환에 포함된 버터 플라이 구조를 θ값에 따라 도 20 또는 도 129의 변경된 버터 플라이 구조로 치환하고, 전술한 도 130과 같이 분모가 2의 거듭제곱 형태인 유리수를 이용하여 32 포인트 이산 코사인 변환을 수행할 때 곱셈 연산은 도 142에 도시된 바와 같이 곱셈을 쉬프트 연산등으로 대체한 연산 과정을 통해 수행될 수 있다. 또한, 전술한 바와 같이 곱셈 연산을 쉬프트 연산으로 대체하는 과정은 변환 및 역변환에 이용되는 값의 분모(denominator)를 고려하여 추가적인 연산을 줄일 수 있다. 도 142에 기초한 32 포인트 이산 코사인 변환에 이용되는 곱셈 연산은 도 133에 도시된 테이블에 따른 연산 형태로 대체될 수 있다.
도 127은 본 발명의 또 다른 실시예에 따른 영상 역변환 방법을 나타낸 플로우 차트이다.
도 127을 참조하면, 단계 12710에서 복호화되는 영상을 구성하는 NxN(N은 정수) 크기의 블록의 양자화된 변환 계수들을 수신한다.
단계 12720에서 수신된 양자화된 변환 계수들을 역양자화한다.
단계 12730에서 NxN 크기의 블록의 1차원 이산 코사인 역변환에 이용되는 NxN 역변환 행렬의 원소들 중 삼각함수에 기초한 값들을 소정의 유리수 값들로 치환하고, 치환된 값들을 갖는 행렬을 이용하여 상기 NxN 크기의 블록의 역양자화된 변환 계수들을 역변환한다.
이상과 같이 본 발명은 비록 한정된 실시예와 도면에 의해 설명되었으나, 본 발명이 상기의 실시예에 한정되는 것은 아니며, 이는 본 발명이 속하는 분야에서 통상의 지식을 가진 자라면 이러한 기재로부터 다양한 수정 및 변형이 가능하다. 따라서, 본 발명의 사상은 아래에 기재된 특허청구범위에 의해서만 파악되어야 하고, 이와 균등하거나 또는 등가적인 변형 모두는 본 발명 사상의 범주에 속한다 할 것이다. 또한, 본 발명에 따른 시스템은 컴퓨터로 읽을 수 있는 기록매체에 컴퓨터가 읽을 수 있는 코드로서 구현하는 것이 가능하다. 컴퓨터가 읽을 수 있는 기록매체는 컴퓨터 시스템에 의하여 읽혀질 수 있는 데이터가 저장되는 모든 종류의 기록장치를 포함한다. 기록매체의 예로는 ROM, RAM, CD-ROM, 자기 테이프, 플로피 디스크, 광데이터 저장장치 등을 포함한다. 또한 컴퓨터가 읽을 수 있는 기록매체는 네트워크로 연결된 컴퓨터 시스템에 분산되어 분산방식으로 컴퓨터가 읽을 수 있는 코드가 저장되고 실행될 수 있다.

Claims (14)

  1. 영상의 변환 방법에 있어서,
    NxN(N은 정수) 크기의 블록의 1차원 이산 코사인 변환에 이용되는 NxN 변환 행렬의 원소들 중 삼각함수에 기초한 값들을 소정의 유리수 값들로 치환하는 단계; 및
    상기 치환된 값들을 갖는 행렬을 이용하여 상기 NxN 크기의 블록을 변환하는 단계를 포함하는 것을 특징으로 하는 영상 변환 방법.
  2. 제 1항에 있어서,
    상기 치환하는 단계는
    상기 삼각함수에 기초한 값들을 분모가 2의 거듭 제곱꼴인 유리수로 치환하는 것을 특징으로 하는 영상 변환 방법.
  3. 제 1항에 있어서,
    상기 치환하는 단계는
    상기 NxN 변환 행렬을 소정의 순열 행렬과 회전 행렬들의 곱셈 형태로 분해하고, 상기 분해된 순열 행렬과 회전 행렬에 구비된 삼각함수에 기초한 값을 소정의 유리수로 치환하는 것을 특징으로 하는 영상 변환 방법.
  4. 제 1항에 있어서,
    상기 변환하는 단계는
    상기 치환된 값들을 갖는 행렬을 이용한 변환 과정에 포함된 곱셈 연산을 쉬프트 연산, 덧셈 연산 및 뺄셈 연산으로 대체한 대체 연산을 통해 수행하는 것을 특징으로 하는 영상 변환 방법.
  5. 제 1항에 있어서,
    이산 코사인 변환에 이용되는 원래의 NxN 변환 행렬과 상기 치환된 NxN 변환 행렬 사이의 차이값을 보정하기 위한 스케일링 행렬 및 시프트 연산을 적용하여 상기 NxN 크기의 블록을 변환한 변환 블록에 대한 양자화를 수행하는 단계를 더 포함하는 것을 특징으로 하는 영상 변환 방법.
  6. 영상 변환 장치에 있어서,
    NxN(N은 정수) 크기의 블록의 1차원 이산 코사인 변환에 이용되는 NxN 변환 행렬의 원소들 중 삼각함수에 기초한 값들을 소정의 유리수 값들로 치환하고, 치환된 값들을 갖는 행렬을 이용하여 상기 NxN 크기의 블록을 변환하는 변환부를 포함하는 것을 특징으로 하는 영상 변환 장치.
  7. 영상의 역변환 방법에 있어서,
    복호화되는 영상을 구성하는 NxN(N은 정수) 크기의 블록의 양자화된 변환 계수들을 수신하는 단계;
    상기 수신된 양자화된 변환 계수들을 역양자화하는 단계; 및
    상기 NxN 크기의 블록의 1차원 이산 코사인 역변환에 이용되는 NxN 역변환 행렬의 원소들 중 삼각함수에 기초한 값들을 소정의 유리수 값들로 치환하고, 치환된 값들을 갖는 행렬을 이용하여 상기 NxN 크기의 블록의 역양자화된 변환 계수들을 역변환하는 단계를 포함하는 것을 특징으로 하는 영상 역변환 방법.
  8. 제 7항에 있어서,
    상기 역변환하는 단계는
    상기 삼각함수에 기초한 값들을 분모가 2의 거듭 제곱꼴인 유리수로 치환하는 것을 특징으로 하는 영상 역변환 방법.
  9. 제 7항에 있어서,
    상기 역변환하는 단계는
    상기 NxN 역변환 행렬을 소정의 순열 행렬과 회전 행렬들의 곱셈 형태로 분해하고, 상기 분해된 순열 행렬과 회전 행렬에 구비된 삼각함수에 기초한 값을 소정의 유리수로 치환하는 것을 특징으로 하는 영상 역변환 방법.
  10. 제 7항에 있어서,
    상기 역변환하는 단계는
    상기 치환된 값들을 갖는 행렬을 이용한 역변환 과정에 포함된 곱셈 연산을 쉬프트 연산, 덧셈 연산 및 뺄셈 연산으로 대체한 대체 연산을 통해 수행하는 것을 특징으로 하는 영상 역변환 방법.
  11. 제 7항에 있어서,
    상기 역양자화하는 단계는
    이산 코사인 역변환에 이용되는 원래의 NxN 역변환 행렬과 상기 치환된 NxN 역변환 행렬 사이의 차이값을 보정하기 위한 역스케일링 행렬 및 시프트 연산을 적용하여 상기 역양자화를 수행하는 단계를 더 포함하는 것을 특징으로 하는 영상 역변환 방법.
  12. 영상의 역변환 장치에 있어서,
    복호화되는 영상을 구성하는 NxN(N은 정수) 크기의 블록의 1차원 이산 코사인 역변환에 이용되는 NxN 역변환 행렬의 원소들 중 삼각함수에 기초한 값들을 소정의 유리수 값들로 치환하고, 치환된 값들을 갖는 행렬을 이용하여 상기 NxN 크기의 블록의 역양자화된 변환 계수들을 역변환하는 역변환부를 포함하는 것을 특징으로 하는 영상 역변환 장치.
  13. 제 1항 내지 제 5항에 기재된 영상 변환 방법을 구현하기 위한 프로그램이 기록된 컴퓨터로 판독가능한 기록 매체.
  14. 제 7항 내지 제 11항에 기재된 영상 역변환 방법을 구현하기 위한 프로그램이 기록된 컴퓨터로 판독가능한 기록 매체.
PCT/KR2011/003006 2010-04-23 2011-04-25 영상의 변환 방법 및 장치, 역변환 방법 및 장치 WO2011133008A2 (ko)

Applications Claiming Priority (6)

Application Number Priority Date Filing Date Title
US32730810P 2010-04-23 2010-04-23
US61/327,308 2010-04-23
US33098010P 2010-05-04 2010-05-04
US61/330,980 2010-05-04
US34608210P 2010-05-19 2010-05-19
US61/346,082 2010-05-19

Publications (2)

Publication Number Publication Date
WO2011133008A2 true WO2011133008A2 (ko) 2011-10-27
WO2011133008A3 WO2011133008A3 (ko) 2012-03-15

Family

ID=44834704

Family Applications (1)

Application Number Title Priority Date Filing Date
PCT/KR2011/003006 WO2011133008A2 (ko) 2010-04-23 2011-04-25 영상의 변환 방법 및 장치, 역변환 방법 및 장치

Country Status (2)

Country Link
KR (1) KR20110118598A (ko)
WO (1) WO2011133008A2 (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2023124602A1 (zh) * 2021-12-28 2023-07-06 中国电信股份有限公司 数据变换与恢复方法、装置、系统、电子设备及存储介质

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101423083B1 (ko) * 2013-01-16 2014-07-25 한밭대학교 산학협력단 Hevc 복호기용 역변환기 설계 방법
CN108200439B (zh) 2013-06-14 2020-08-21 浙江大学 提高数字信号变换性能的方法及数字信号变换方法和装置

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH07319849A (ja) * 1994-05-27 1995-12-08 Hitachi Ltd 離散コサイン高速演算器
JP2000137703A (ja) * 1998-11-02 2000-05-16 Sharp Corp 離散コサイン変換装置及び逆離散コサイン変換装置
JP2007299221A (ja) * 2006-04-28 2007-11-15 Samsung Electronics Co Ltd データ処理装置

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CA2171335A1 (en) * 1993-11-30 1995-06-08 Munib A. Wober Coding methods and apparatus for scaling and filtering images using discrete cosine transforms

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH07319849A (ja) * 1994-05-27 1995-12-08 Hitachi Ltd 離散コサイン高速演算器
JP2000137703A (ja) * 1998-11-02 2000-05-16 Sharp Corp 離散コサイン変換装置及び逆離散コサイン変換装置
JP2007299221A (ja) * 2006-04-28 2007-11-15 Samsung Electronics Co Ltd データ処理装置

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2023124602A1 (zh) * 2021-12-28 2023-07-06 中国电信股份有限公司 数据变换与恢复方法、装置、系统、电子设备及存储介质

Also Published As

Publication number Publication date
KR20110118598A (ko) 2011-10-31
WO2011133008A3 (ko) 2012-03-15

Similar Documents

Publication Publication Date Title
WO2012044075A2 (ko) 영상의 변환 방법 및 장치, 역변환 방법 및 장치
WO2012044076A2 (ko) 비디오의 부호화 방법 및 장치, 복호화 방법 및 장치
WO2019235797A1 (ko) 축소된 변환을 이용하여 비디오 신호를 처리하는 방법 및 장치
WO2019235896A1 (ko) 적응적 모션 벡터 레졸루션을 이용하는 비디오 신호 처리 방법 및 장치
WO2010085125A9 (ko) 영상의 변환 방법 및 장치, 역변환 방법 및 장치
WO2020222588A1 (ko) 적응적 모션 벡터 해상도를 이용한 비디오 신호 처리 방법 및 장치
WO2017192011A2 (ko) 화면 내 예측을 이용한 영상 부호화/복호화 방법 및 장치
WO2013005961A2 (en) Mode-dependent transforms for residual coding with low latency
WO2012044105A2 (ko) 평활화 보간 필터를 이용하여 영상을 보간하는 방법 및 그 장치
WO2016182317A1 (ko) 인트라 예측을 수행하는 영상 복호화 방법 및 그 장치 및 인트라 예측을 수행하는 영상 부호화 방법 및 그 장치
WO2013002579A2 (ko) 비대칭형 보간 필터를 이용하여 영상을 보간하는 방법 및 그 장치
WO2016182316A1 (ko) 인트라 예측을 수행하는 영상 복호화 방법 및 그 장치 및 인트라 예측을 수행하는 영상 부호화 방법 및 그 장치
WO2018047995A1 (ko) 인트라 예측 모드 기반 영상 처리 방법 및 이를 위한 장치
WO2016195455A1 (ko) 그래프 기반 변환을 이용하여 비디오 신호를 처리하는 방법 및 장치
WO2020111843A1 (ko) 화면 내 예측 필터링을 이용한 비디오 신호 처리 방법 및 장치
WO2021006558A1 (ko) 크로마 양자화 파라미터 데이터를 코딩하는 영상 디코딩 방법 및 그 장치
WO2020159316A1 (ko) 이차 변환에 기반한 영상 코딩 방법 및 그 장치
WO2017222331A1 (ko) 비디오 신호 처리 방법 및 장치
WO2021107641A1 (ko) 적응적 컬러 공간 변환을 이용하는 비디오 신호 처리 방법 및 장치
WO2019194425A1 (ko) 영상 부호화 또는 복호화에 인공 신경망을 적용하는 장치 및 방법
WO2020080782A1 (en) Artificial intelligence (ai) encoding device and operating method thereof and ai decoding device and operating method thereof
WO2019139393A1 (ko) 색차 성분에 관한 화면내 예측 부호화/복호화 방법 및 장치
WO2020251278A1 (ko) 크로마 양자화 파라미터 데이터 기반 영상 디코딩 방법 및 그 장치
WO2021091178A1 (en) Artificial intelligence (ai) encoding apparatus and operating method thereof and ai decoding apparatus and operating method thereof
EP3868097A1 (en) Artificial intelligence (ai) encoding device and operating method thereof and ai decoding device and operating method thereof

Legal Events

Date Code Title Description
121 Ep: the epo has been informed by wipo that ep was designated in this application

Ref document number: 11772296

Country of ref document: EP

Kind code of ref document: A2

NENP Non-entry into the national phase

Ref country code: DE

122 Ep: pct application non-entry in european phase

Ref document number: 11772296

Country of ref document: EP

Kind code of ref document: A2