В настоящее время я создаю различные сигналы с использованием Matlab, смешиваю их, умножая их на матрицу микширования A, а затем пытаюсь вернуть исходные сигналы с помощью FastICA .
Пока что восстановленные сигналы действительно плохи по сравнению с оригинальными, что оказалось не таким, как я ожидал.
Я пытаюсь понять, делаю ли я что-то не так. Сигналы, которые я генерирую, следующие:
s1 = (-x.^2 + 100*x + 500) / 3000; % quadratic
s2 = exp(-x / 10); % -ve exponential
s3 = (sin(x)+ 1) * 0.5; % sine
s4 = 0.5 + 0.1 * randn(size(x, 2), 1); % gaussian
s5 = (sawtooth(x, 0.75)+ 1) * 0.5; % sawtooth
Одним из условий успеха ICA является то, что не более одного сигнала является гауссовским, и я наблюдал это при генерации моего сигнала.
Однако другое условие заключается в том, что все сигналы статистически независимы.
Все, что я знаю, это то, что это означает, что, учитывая два сигнала A & B, знание одного сигнала не дает никакой информации относительно другого, то есть: P (A | B) = P (A), где P - вероятность .
Теперь мой вопрос заключается в следующем: являются ли мои сигналы статистически независимыми? Есть ли способ, которым я могу определить это? Возможно, какое-то свойство, которое необходимо соблюдать?
Еще одна вещь, которую я заметил, это то, что когда я вычисляю собственные значения ковариационной матрицы (рассчитанной для матрицы, содержащей смешанные сигналы), собственный спектр, похоже, показывает, что существует только один (основной) главный компонент . Что это на самом деле значит? Разве не должно быть 5, так как у меня есть 5 (предположительно) независимых сигналов?
Например, при использовании следующей матрицы смешения:
A =
0.2000 0.4267 0.2133 0.1067 0.0533
0.2909 0.2000 0.2909 0.1455 0.0727
0.1333 0.2667 0.2000 0.2667 0.1333
0.0727 0.1455 0.2909 0.2000 0.2909
0.0533 0.1067 0.2133 0.4267 0.2000
Собственные значения: 0.0000 0.0005 0.0022 0.0042 0.0345
(только 4!)
При использовании матрицы тождественности в качестве матрицы смешения (т.е. смешанные сигналы , такие же , как и оригинальные), то есть спектр собственных: 0.0103 0.0199 0.0330 0.0811 0.1762
. Там все еще есть одно значение, намного большее, чем остальные.
Спасибо за помощь.
Я извиняюсь, если ответы на мои вопросы до боли очевидны, но я действительно плохо знаком со статистикой, ICA и Matlab. Еще раз спасибо.
РЕДАКТИРОВАТЬ
У меня есть 500 выборок каждого сигнала в диапазоне [0,2, 100] с шагом 0,2, то есть х = 0: 0,1: 100.
Кроме того, учитывая модель ICA: X = As + n (в данный момент я не добавляю шума), я имею в виду собственный спектр транспонирования X, то есть eig (cov (X ')).
ОБНОВИТЬ
Как и предлагалось (см. Комментарии), я попробовал FastICA только на 2 сигналах. Результаты были довольно хорошими (см. Рис ниже). Используемая матрица смешивания была A = [0.75 0.25; 0.25 0.75]
. Тем не менее, eigenspectrum по- 0.1657 0.7732
прежнему показал только один основной основной компонент.
Поэтому мой вопрос сводится к следующему: какую функцию / уравнение / свойство я могу использовать, чтобы проверить, является ли число векторов сигнала статистически независимым?
источник
Ответы:
Сигналы 3 и 5 выглядят достаточно коррелированными - они имеют свою первую гармонику. Если бы мне дали две их смеси, я бы не смог их разделить, я бы соблазнил поставить общую гармонику в качестве одного сигнала и высшую гармонику в качестве второго сигнала. И я был бы неправ! Это может объяснить отсутствующее собственное значение.
Сигналы 1 и 2 тоже не выглядят независимыми.
Быстрая и грязная «проверка работоспособности» для независимости двух рядов состоит в том, чтобы сделать (x, y) график одного сигнала против другого:
и затем сделать тот же (x, y) график с одним перетасованным сигналом:
Если два графика имеют разный вид, ваши сигналы не являются независимыми. В более общем смысле, если график (x, y) данных показывает «особенности», несимметрии и т. Д., Это плохое предзнаменование.
Надлежащие тесты на независимость (и это целевые функции, используемые в цикле оптимизации ICA) включают, например, взаимную информацию.
ICA восстанавливает большинство независимых сигналов, линейное микширование которых дает ваши входные данные . Он будет работать как методы разделения сигналов и восстанавливать исходные сигналы, только если они были максимально независимыми в соответствии с критерием оптимизации, используемым в вашей реализации ICA.
источник
Я не эксперт по ICA, но могу немного рассказать о независимости.
Как упоминалось в некоторых комментариях, статистическую независимость между двумя случайными переменными можно приблизительно интерпретировать как «количество информации, которую дает одна переменная о другой».
Вот код Matlab, который будет генерировать два независимых сигнала из построенного совместного распределения и два из независимого совместного распределения, а затем вычислять взаимную информацию о соединениях.
Функция «computeMIplugin.m» - это простая функция, которую я написал, которая вычисляет взаимную информацию, используя формулу суммирования выше.
Опять же, это предполагает, что у вас есть хорошая оценка совместного распределения (вместе с другими легкими предположениями), но это должно быть полезно, как правило.
источник
Как упомянуто выше, оба сигнала 3 и 5 выглядят достаточно коррелированными и имеют одинаковый период.
Мы можем думать о том, что два сигнала коррелируют, если мы можем сместить один из источников влево или вправо и увеличить или уменьшить его амплитуду так, чтобы он подходил поверх другого источника. Обратите внимание, что мы не меняем частоту источника, мы просто выполняем сдвиг фазы и амплитуды.
В приведенном выше случае мы можем сместить источник 3 так, чтобы его пики совпадали с источником 5. Это такая вещь, которая будет мешать извлечению источника при использовании ICA из-за предположения о независимости.
Примечание : хорошая иллюстрация вышеупомянутой концепции - это думать о двух синусоидальных волнах. Они оба полностью детерминированы. Если они оба имеют одинаковую частоту (даже с разной фазой), то они идеально коррелируют и ICA не сможет их разделить. Если вместо этого они имеют разные частоты (которые не являются целыми числами, кратными друг другу), то они независимы и могут быть разделены.
Ниже приведен код Matlab, чтобы вы могли убедиться в этом сами.
Обратите внимание, что для волн одинаковой частоты ICA просто возвращает входные сигналы, но для разных частот возвращает исходные источники.
источник
Рэйчел,
Из моих исследований я до сих пор смог найти что-то под названием « Тест хи-квадрат на независимость », но я не уверен, как он работает в данный момент, но, возможно, стоит посмотреть.
источник