\n", "0 | 0 | def dft_real(x, fft_length=None, transpose=True): | def dft_real_d3(x, fft_length=None, transpose=True):
|
\n", "1 | 1 | if len(x.shape) == 1: | if len(x.shape) != 3:
|
\n", "2 | 2 | x = x.reshape((1, -1)) | raise RuntimeError(\"Not implemented for shape=%r.\" % x.shape)
|
\n", "3 | | N = 1 | |
\n", "4 | | else: | |
\n", "5 | 3 | N = x.shape[0] | N = x.shape[1]
|
\n", "6 | 4 | C = x.shape[-1] if transpose else x.shape[-2] | C = x.shape[-1] if transpose else x.shape[-2] |
\n", "7 | 5 | if fft_length is None: | if fft_length is None: |
\n", "8 | 6 | fft_length = x.shape[-1] | fft_length = x.shape[-1] |
\n", "9 | 7 | size = fft_length // 2 + 1 | size = fft_length // 2 + 1 |
\n", "10 | 8 |
|
|
\n", "11 | 9 | cst = dft_real_cst(C, fft_length) | cst = dft_real_cst(C, fft_length) |
\n", "12 | 10 | if transpose: | if transpose: |
\n", "13 | 11 | x = numpy.transpose(x, (1, 0)) | x = numpy.transpose(x, (0, 2, 1))
|
\n", "14 | 12 | a = cst[:, :, :fft_length] | a = cst[:, :, :fft_length] |
\n", "15 | 13 | b = x[:fft_length] | b = x[:, :fft_length, :]
|
\n", " | 14 | | a = numpy.expand_dims(a, 0) |
\n", " | 15 | | b = numpy.expand_dims(b, 1) |
\n", "16 | 16 | res = numpy.matmul(a, b) | res = numpy.matmul(a, b) |
\n", "17 | 17 | res = res[:, :size, :] | res = res[:, :, :size, :]
|
\n", "18 | 18 | return numpy.transpose(res, (0, 2, 1)) | return numpy.transpose(res, (1, 0, 3, 2))
|
\n", "19 | 19 | else: | else: |
\n", "20 | 20 | a = cst[:, :, :fft_length] | a = cst[:, :, :fft_length] |
\n", "21 | 21 | b = x[:fft_length] | b = x[:, :fft_length, :]
|
\n", " | 22 | | a = numpy.expand_dims(a, 0) |
\n", " | 23 | | b = numpy.expand_dims(b, 1) |
\n", "22 | 24 | return numpy.matmul(a, b) | res = numpy.matmul(a, b)
|
\n", " | 25 | | return numpy.transpose(res, (1, 0, 2, 3)) |
\n", "23 | 26 |
|
|
\n", "
"], "text/plain": ["