Цель этого примера состоит в том, чтобы показать функции многомерного шумоподавления, представленных в Wavelet Toolbox™.
Многомерные проблемы шумоподавления вейвлетов имеют дело с моделями вида
где наблюдение X является p-мерным, F является детерминированным сигналом, который должен быть восстановлен, и e является пространственно-коррелированным шумовым сигналом. Этот пример использует несколько шумовых сигналов и выполняет следующие шаги, чтобы деноизировать детерминированный сигнал.
Чтобы загрузить многомерный сигнал, введите следующий код в приглашение MATLAB ®:
load ex4mwden
whos
Name Size Bytes Class Attributes covar 4x4 128 double x 1024x4 32768 double x_orig 1024x4 32768 double
Обычно только матрица данных x
доступно. Здесь у нас также есть истинная шумовая ковариационная матрица covar
и исходные сигналы x_orig
. Эти сигналы являются шумными версиями простых комбинаций двух исходных сигналов. Первый сигнал является «Блоками», который является нерегулярным, а второй - «HeavySine», который является регулярным, за исключением времени 750. Другие два сигнала являются суммой и различием двух исходных сигналов, соответственно. Многомерный Гауссов белый шум, проявляющий сильную пространственную корреляцию, добавляется к полученным четырем сигналам, что генерирует наблюдаемые данные, хранящиеся в x
.
Чтобы отобразить исходные и наблюдаемые сигналы, введите:
kp = 0; for i = 1:4 subplot(4,2,kp+1), plot(x_orig(:,i)); axis tight; title(['Original signal ',num2str(i)]) subplot(4,2,kp+2), plot(x(:,i)); axis tight; title(['Observed signal ',num2str(i)]) kp = kp + 2; end
Истинная шумовая ковариационная матрица задается:
covar
covar = 4×4
1.0000 0.8000 0.6000 0.7000
0.8000 1.0000 0.5000 0.6000
0.6000 0.5000 1.0000 0.7000
0.7000 0.6000 0.7000 1.0000
Стратегия шумоподавления комбинирует одномерное шумоподавление вейвлет в базисе, где предполагаемая шумовая ковариационная матрица является диагональной с неконцентрированным анализом основного компонента (PCA) на приближениях в области вейвлет или с конечным PCA.
Во-первых, выполните одномерное шумоподавление путем ввода следующих линий, чтобы задать параметры шумоподавления:
level = 5; wname = 'sym4'; tptr = 'sqtwolog'; sorh = 's';
Затем установите параметры PCA путем сохранения всех основных компонентов:
npc_app = 4; npc_fin = 4;
Наконец, выполните многомерное шумоподавление путем ввода:
x_den = wmulden(x, level, wname, npc_app, npc_fin, tptr, sorh);
Для отображения исходных и деноизированных сигналов введите следующее:
clf kp = 0; for i = 1:4 subplot(4,3,kp+1), plot(x_orig(:,i)); axis tight; title(['Original signal ',num2str(i)]) subplot(4,3,kp+2), plot(x(:,i)); axis tight; title(['Observed signal ',num2str(i)]) subplot(4,3,kp+3), plot(x_den(:,i)); axis tight; title(['Denoised signal ',num2str(i)]) kp = kp + 3; end
Мы видим, что в целом результаты удовлетворительны. Фокусируясь на двух первых сигналах, обратите внимание, что они правильно восстановлены, но мы можем улучшить результат, используя преимущества отношений между сигналами, что приводит к дополнительному деноизирующему эффекту.
Чтобы автоматически выбрать номера сохраненных основных компонентов с помощью правила Кайзера, которое сохраняет компоненты, сопоставленные с собственными значениями, превышающими среднее значение всех собственных значений, введите:
npc_app = 'kais'; npc_fin = 'kais';
Выполните многомерное шумоподавление снова путем ввода:
[x_den, npc, nestco] = wmulden(x, level, wname, npc_app, ...
npc_fin, tptr, sorh);
Второй выходной аргумент npc
количество сохраненных основных компонентов для PCA для приближений и для окончательного PCA.
npc
npc = 1×2
2 2
Как ожидалось, поскольку сигналы являются комбинациями двух исходных сигналов, правило Кайзера автоматически обнаруживает, что только две основные компоненты представляют интерес.
Третий выходной аргумент nestco
содержит предполагаемую шумовую ковариационную матрицу:
nestco
nestco = 4×4
1.0784 0.8333 0.6878 0.8141
0.8333 1.0025 0.5275 0.6814
0.6878 0.5275 1.0501 0.7734
0.8141 0.6814 0.7734 1.0967
Как можно увидеть при сравнении с истинным матричным коваром, данным ранее, оценка является удовлетворительной.
Чтобы отобразить тип исходных и конечных деноизированных сигналов:
kp = 0; for i = 1:4 subplot(4,3,kp+1), plot(x_orig(:,i)); axis tight; title(['Original signal ',num2str(i)]) subplot(4,3,kp+2), plot(x(:,i)); axis tight; title(['Observed signal ',num2str(i)]) subplot(4,3,kp+3), plot(x_den(:,i)); axis tight; title(['Denoised signal ',num2str(i)]) kp = kp + 3; end
Эти результаты лучше, чем ранее полученные. Первый сигнал, который является нерегулярным, все еще правильно восстановлен, в то время как второй сигнал, который является более регулярным, лучше обесценивается после этого второго каскада PCA.
Вы можете найти больше информации о многомерном шумоподавлении, включая некоторые теории, симуляции и реальные примеры, в следующей ссылке:
М. Амингхафари, Н. Чезе и Дж-М. Poggi (2006), «Многомерное шумоподавление с использованием вейвлетов и анализа основных компонентов», Computational Statistics & Data Analysis, 50, pp. 2381-2398.