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

Дискретное косинусное преобразование (DCT) тесно связано с дискретным преобразованием Фурье (DFT). ДПФ является на самом деле одним шагом в вычислении DCT для последовательности. DCT, однако, имеет лучшее энергетическое уплотнение, чем ДПФ со всего несколькими коэффициентов преобразования, представляющих большинство энергии в последовательности. Это свойство DCT делает его полезным в приложениях, таких как передача данных и кодирование сигнала.

Варианты DCT

DCT имеет четыре стандартных варианта. Для сигнала x длины N, и с δk Кронекерова дельта, преобразования заданы:

  • DCT-1:

y(k)=2N-1n=1Nx(n)11+δn1+δnN11+δk1+δkNпотому что(πN-1(n-1)(k-1))

  • DCT-2:

y(k)=2Nn=1Nx(n)11+δk1потому что(π2N(2n-1)(k-1))

  • DCT-3:

y(k)=2Nn=1Nx(n)11+δn1потому что(π2N(n-1)(2k-1))

  • DCT-4:

y(k)=2Nn=1Nx(n)потому что(π4N(2n-1)(2k-1))

Функция Signal Processing Toolbox dct вычисляет унитарный DCT входного массива.

Обратные варианты DCT

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

  • Инверсия DCT-1:

x(n)=2N-1k=1Ny(k)11+δk1+δkN11+δn1+δnNпотому что(πN-1(k-1)(n-1))

  • Инверсия DCT-2:

x(n)=2Nk=1Ny(k)11+δk1потому что(π2N(k-1)(2n-1))

  • Инверсия DCT-3:

x(n)=2Nk=1Ny(k)11+δn1потому что(π2N(2k-1)(n-1))

  • Инверсия DCT-4:

x(n)=2Nk=1Ny(k)потому что(π4N(2k-1)(2n-1))

Функциональный idct вычисляет обратный DCT для входной последовательности, восстанавливая сигнал от полного или частичного набора коэффициентов DCT.

Реконструкция сигнала Используя DCT

Из-за энергетического свойства уплотнения DCT можно восстановить сигнал только от части его коэффициентов DCT. Например, сгенерируйте синусоидальную последовательность на 25 Гц, выбранную на уровне 1 000 Гц.

t = 0:1/1000:1;
x = sin(2*pi*25*t);

Вычислите DCT этой последовательности и восстановите сигнал с помощью только те компоненты со значением, больше, чем 0,1. Определите, сколько коэффициентов из оригинала 1000 удовлетворяет требование.

y = dct(x);
y2 = find(abs(y) < 0.1);
y(y2) = zeros(size(y2));
z = idct(y);

howmany = length(find(y))
howmany = 64

Постройте исходные и восстановленные последовательности.

subplot(2,1,1)
plot(t,x)
ax = axis;
title('Original Signal')

subplot(2,1,2)
plot(t,z)
axis(ax)
title('Reconstructed Signal')

Одной мерой точности реконструкции является норма различия между исходными и восстановленными сигналами, разделенными на норму исходного сигнала. Вычислите эту оценку и выразите ее как процент.

norm(x-z)/norm(x)*100
ans = 1.9437

Восстановленный сигнал сохраняет приблизительно 98% энергии в исходном сигнале.

Смотрите также

|

Похожие темы