Используйте сигнал электрокардиограммы (ECG), чтобы проиллюстрировать работу с преобразованием Уолша-Адамара. Сигналы ЭКГ обычно являются очень большими и должны храниться для анализа и поиска в будущем. Преобразования Уолша-Адамара особенно хорошо подходят для этого приложения, потому что они обеспечивают сжатие и, таким образом, требуют меньшего пространства для хранения. Они также обеспечивают быструю реконструкцию сигнала.
Начните с сигнала ECG. Реплицируйте его, чтобы создать более длинный сигнал и вставить дополнительный случайный шум.
xe = ecg(512); xr = repmat(xe,1,8); x = xr + 0.1.*randn(1,length(xr));
Преобразуйте сигнал с помощью быстрого преобразования Уолша-Адамара. Постройте график исходного сигнала и преобразованного сигнала.
y = fwht(x); subplot(2,1,1) plot(x) xlabel('Sample index') ylabel('Amplitude') title('ECG Signal') subplot(2,1,2) plot(abs(y)) xlabel('Sequency index') ylabel('Magnitude') title('WHT Coefficients')
График показывает, что большая часть энергии сигнала находится в более низких значениях последовательности, ниже приблизительно 1100. Сохраните только первые 1024 коэффициента (из 4096). Попытайтесь точно восстановить сигнал только из этих сохраненных коэффициентов.
y(1025:length(x)) = 0; xHat = ifwht(y); figure plot(x) hold on plot(xHat) xlabel('Sample Index') ylabel('ECG Signal Amplitude') legend('Original','Reconstructed')
Воспроизведенный сигнал очень близок к исходному, но был сжат до четверти размера. Хранение большего количества коэффициентов является компромиссом между увеличенным разрешением и увеличенным шумом, в то время как хранение меньшего количества коэффициентов может вызвать потерю peaks.