Документация Engee

idct

Обратное дискретное косинусное преобразование.

Библиотека

EngeeDSP

Синтаксис

Вызов функции

  • x = idct(y) — возвращает обратное дискретное косинусное преобразование входного массива y. Размер выходного массива x совпадает с размером y. Если y имеет несколько измерений, функция idct выполняет операцию по первому измерению массива, размер которого больше 1.

  • x = idct(y,n) — дополняет нулями или усекает соответствующее измерение y до длины n перед преобразованием.

Аргументы

Входные аргументы

# y — входное дискретное косинусное преобразование
вектор | матрица | N-мерный массив

Details

Входное дискретное косинусное преобразование, заданное как вектор, матрица или N-мерный массив с вещественными или комплексными значениями.

Типы данных

Float32, Float64

Поддержка комплексных чисел

Да

# n — длина обратного преобразования
положительный целочисленный скаляр

Details

Длина обратного преобразования, заданная как положительный целочисленный скаляр.

Типы данных

Float32, Float64

Выходные аргументы

# x — обратное дискретное косинусное преобразование
вектор | матрица | N-мерный массив

Details

Обратное дискретное косинусное преобразование, возвращаемое в виде вещественного или комплексного вектора, матрицы или N-мерного массива.

Примеры

Восстановление сигнала с помощью обратного дискретного косинусного преобразования

Details

Сгенерируем сигнал, состоящий из синусоиды частотой 25 Гц, дискретизированной с частотой 1000 Гц в течение 1 секунды. К синусоиде добавлен белый гауссовский шум с дисперсией 0.01.

import EngeeDSP.Functions: randn

using Random
Random.seed!(1234)

Fs = 1000
t = 0:1/Fs:1-1/Fs
x = sin.(2π * 25 * t) + randn(length(t), 1) / 10

Вычислим дискретное косинусное преобразование (ДКП) последовательности. Определим, сколько из 1000 коэффициентов ДКП являются значимыми. Выберем порог значимости 1.

import EngeeDSP.Functions: dct

y = dct(x)

sigcoeff = abs.(y) .>= 1

howmany = sum(sigcoeff)
17

Реконструируем сигнал, используя только значимые компоненты.

import EngeeDSP.Functions: idct

y[.!sigcoeff] .= 0

z = idct(y)

Построим графики исходного и восстановленного сигналов.

p1 = plot(t, x, title = "Original")
yl = ylims(p1)

p2 = plot(t, z, title = "Reconstructed")
ylims!(p2, yl)

plot(p1, p2, layout = (2, 1), legend = false)

idct

Дополнительно

Обратное дискретное косинусное преобразование

Details

Обратное дискретное косинусное преобразование восстанавливает последовательность по ее коэффициентам дискретного косинусного преобразования (ДКП). Функция idct является обратной к функции dct.

ДКП имеет четыре стандартных варианта. Для данной функции реализован только тип ДКП-2. Для преобразованного сигнала длины и символа Кронекера обратные преобразования определяются следующим образом:

  • Обратное ДКП-1:

  • Обратное ДКП-2:

  • Обратное ДКП-3:

  • Обратное ДКП-4:

Ряды индексируются от и вместо обычных и , поскольку векторы Engee изменяются от до , а не от до .

Все варианты ДКП унитарны (или, что эквивалентно, ортогональны): чтобы найти прямые преобразования, поменяйте местами и в каждом определении. ДКП-1 и ДКП-4 являются обратными друг другу. ДКП-2 и ДКП-3 являются обратными друг другу.

Литература

  1. Jain, A. K. Fundamentals of Digital Image Processing. Englewood Cliffs, NJ: Prentice-Hall, 1989.

  2. Oppenheim, Alan V., Ronald W. Schafer, and John R. Buck. Discrete-Time Signal Processing. 2nd Ed. Upper Saddle River, NJ: Prentice Hall, 1999.

  3. Pennebaker, W. B., and J. L. Mitchell. JPEG Still Image Data Compression Standard. New York: Van Nostrand Reinhold, 1993.