cmddenoise

Интервально-зависимое шумоподавление

Описание

пример

sigden = cmddenoise(sig,wname,level) возвращает деноизированный сигнал, sigden, полученный от зависящего от интервала шумоподавления сигнала, sig, используя ортогональные или биортогональные вейвлеты и масштабирующие фильтры, wname. cmddenoise порождает коэффициенты вейвлет (детализация) до уровня, levelи восстанавливает приближение сигнала, используя измененные коэффициенты детализации. cmddenoise разделяет сигнал на интервалы, основанные на точках изменения отклонения в коэффициентах детализации первого уровня, и пороги каждого интервала отдельно. Расположение и количество точек изменения отклонения автоматически выбираются с помощью штрафованной функции контрастности [2]. Минимальная задержка между точками изменения составляет 10 выборок. Пороги получаются с помощью минимаксного порогового правила, и мягкое пороговое значение используется для изменения вейвлет-коэффициентов [1].

пример

sigden = cmddenoise(sig,wname,level,sorh) возвращает деноизированный сигнал, sigden, используя метод порогового значения, sorh, для изменения коэффициентов вейвлета. Допустимые варианты для sorh являются 's' для мягкого порога или 'h' для жесткого порога.

пример

sigden = cmddenoise(sig,wname,level,sorh,nb_inter) возвращает деноизированный сигнал, sigden, с количеством деноизирующих интервалов как положительное целое число от 1 до 6: 1≤ nb_inter ≤ 6. Для nb_inter ≥ 2, cmddenoise оценивает местоположение точек изменения с контрастной функцией [2].

пример

sigden = cmddenoise(sig,wname,level,sorh,nb_inter,thrParamsIn) возвращает деноизированный сигнал, sigden, с шумоподавлением и соответствующими порогами, заданными как массив ячеек матриц с длиной, равной level. Каждый элемент массива ячеек содержит интервал и порог информацию для соответствующего уровня преобразования вейвлета. Элементы thrParamsIn являются N-by-3 матрицами с N, равными количеству интервалов. 1-й и 2-й столбцы содержат начальный и конечный индексы интервалов, а 3-й столбец содержит соответствующее пороговое значение. Если вы задаете thrParamsIn, cmddenoise игнорирует значение nb_inter.

пример

[sigden,coefs] = cmddenoise(___) возвращает приближение (масштабирование) и коэффициенты детализации (вейвлет), coefs. Организация coefs идентичен структуре, возвращенной wavedec. Этот синтаксис может включать любой из входных параметров, используемых в предыдущих синтаксисах.

пример

[sigden,coefs,thrParamsOut] = cmddenoise(___) возвращает массив ячеек, thrParamsOut, с длиной, равной level. Каждый элемент thrParamsOut является матрицей N-by-3. Размерность строка элементов матрицы является количеством интервалов и определяется значением входных параметров. Каждая строка матрицы содержит начальную и конечную точки (индексы) порогового интервала и соответствующее пороговое значение.

пример

[sigden,coefs,thrParamsOut,int_DepThr_Cell] = cmddenoise(sig,wname,level,sorh,nb_inter) возвращает массив ячеек, int_DepThr_Cell, с длиной, равной 6. int_DepThr_Cell содержит интервальную и пороговую информацию, предполагающую, что количество точек изменения находится в областях значений от 0 до 5. N-й элемент int_DepThr_Cell - матрица N-by-3, содержащая информацию о интервале, принимающую N-1 точки изменения. Каждая строка матрицы содержит начальную и конечную точки (индексы) порогового интервала и соответствующее пороговое значение. Попытка вывода int_DepThr_Cell если вы используете входной параметр, thrParamsIn, приводит к ошибке.

пример

[sigden,coefs,thrParamsOut,int_DepThr_Cell,BestNbofInt] = cmddenoise(sig,wname,level,sorh,nb_inter) возвращает оптимальное количество интервалов сигнала на основе оцененных точек изменения отклонения в коэффициентах детализации уровня 1. Чтобы оценить количество точек изменения, cmddenoise принимает, что общее число меньше или равно 6, и использует штрафованный контраст [2]. Попытка вывода BestNbofInt если вы используете входной параметр, thrParamsIn, приводит к ошибке.

Примеры

свернуть все

Загрузите сигнал шумных блоков, nblocr1.mat. Сигнал состоит из кусочно-постоянного сигнала в аддитивном белом Гауссовом шуме. Отклонение аддитивного шума отличается тремя несвязанными интервалами.

load nblocr1;

Примените зависящее от интервала шумоподавление до уровня 4 с помощью вейвлета Haar. |cmddenoise автоматически определяет оптимальное число и местоположения точек изменения отклонения. Постройте график деноизированного и исходного сигнала для сравнения.

sigden = cmddenoise(nblocr1,'db1',4);
plot(nblocr1);
hold on;
plot(sigden,'r','linewidth',2);
axis tight;

Figure contains an axes. The axes contains 2 objects of type line.

Загрузите сигнал шумных блоков, nblocr1.mat. Сигнал состоит из кусочно-постоянного сигнала в аддитивном белом Гауссовом шуме. Отклонение аддитивного шума отличается тремя несвязанными интервалами.

load nblocr1;

Примените зависящее от интервала шумоподавление до уровня 4 с помощью вейвлета Haar и правила жесткого порога. cmddenoise автоматически определяет оптимальное число и местоположение интервалов. Постройте график исходных и деноизированных сигналов.

sorh = 'h';
sigden = cmddenoise(nblocr1,'db1',4,sorh);
plot(nblocr1);
hold on;
plot(sigden,'r','linewidth',2);
axis tight;
legend('Original Signal','Denoised Signal','Location','NorthWest');

Figure contains an axes. The axes contains 2 objects of type line. These objects represent Original Signal, Denoised Signal.

Создайте сигнал, дискретизированный с частотой дискретизации 1 кГц. Сигнал состоит из ряда ударов различной ширины.

t = [0.1 0.13 0.15 0.23 0.25 0.40 0.44 0.65 0.76 0.78 0.81];
h = [4  -5 3 -4 5  -4.2   2.1   4.3  -3.1   5.1  -4.2];
h  = abs(h);
len = 1000;
w  = 0.01*[0.5 0.5 0.6 1 1 3 1 1 0.5 0.8 0.5];
tt = linspace(0,1,len);
x = zeros(1,len);
for j=1:11
  x = x + ( h(j) ./ (1+ ((tt-t(j))/w(j)).^4));
end

Добавьте белый Гауссов шум с различными отклонениями к двум несвязанным сегментам сигнала. Добавьте средний белый Гауссов шум с отклонением, равной 2, к сегменту сигнала от 0 до 0,3 секунд. Добавьте средний белый Гауссов шум с единичным отклонением к сегменту сигнала от 0,3 секунды до 1 секунды. Установите генератор случайных чисел в настройки по умолчанию для воспроизводимых результатов.

rng default;
nv1 = sqrt(2).*randn(size(tt)).*(tt<=0.3);
nv2 = randn(size(tt)).*(tt>0.3);
xx = x+nv1+nv2;
sigden = cmddenoise(xx,'sym5',5,'s',2);

Примените интервально-зависимое шумоподавление, используя наименее асимметричный вейвлет Daubechies с 5 моментами исчезновения до уровня 3. Установите количество интервалов равное 2. Постройте график сигнала с шумом, исходного сигнала и деноизмененного сигнала для сравнения.

sigden = cmddenoise(xx,'sym5',3,'s',2);
subplot(211)
plot(tt,xx); title('Noisy Signal');
subplot(212)
plot(tt,x,'k-.','linewidth',2);
hold on;
plot(tt,sigden,'r','linewidth',2);
legend('Original Signal','Denoised Signal','Location','SouthEast');

Figure contains 2 axes. Axes 1 with title Noisy Signal contains an object of type line. Axes 2 contains 2 objects of type line. These objects represent Original Signal, Denoised Signal.

Загрузите сигнал примера nbumpr1.mat. Отклонение аддитивного шума отличается тремя несвязанными интервалами.

load nbumpr1.mat;

Используйте мультиразрешение уровня 5. Создайте массив ячеек длиной 5, состоящий из матриц 3 на 3. Первые два элемента каждой строки содержат начальный и конечный индексы интервала, и последний элемент каждой строки является соответствующим порогом.

wname = 'sym4';
level = 5;
sorh = 's';
thrParamsIn =  {...
    [...
    1     207      1.0482; ...
    207   613      2.5110; ...
    613   1024     1.0031; ...
    ]; ...
    [...
    1    207      1.04824; ...
    207  613      3.8718; ...
    613  1024     1.04824; ...
    ]; ...
    [...
    1    207      1.04824; ...
    207  613      1.99710; ...
    613  1024     1.65613; ...
    ]; ...
    [...
    1    207      1.04824; ...
    207  613      2.09117; ...
    613  1024     1.04824; ...
    ]; ...
    [...
    1    207      1.04824; ...
    207  613      1.78620; ...
    613  102      1.04824; ...
    ]; ...
    };

Денуризируйте сигнал с помощью настроек порога и наименее асимметричного вейвлета Daubechies с 4 моментами исчезновения. Используйте правило мягкого порога. Постройте график шумных и обесцененных сигналов для сравнения.

wname = 'sym4';
level = 5;
sorh = 's';   sigden = cmddenoise(nbumpr1,wname,level,sorh,...
   NaN,thrParamsIn);
plot(nbumpr1); hold on;
plot(sigden,'r','linewidth',2); axis tight;
legend('Noisy Signal','Denoised Signal','Location','NorthEast');

Figure contains an axes. The axes contains 2 objects of type line. These objects represent Noisy Signal, Denoised Signal.

Загрузите сигнал примера nblocr1.mat. Используйте вейвлет Haar и разложите сигнал до уровня 2. Получите дискретное вейвлет и обнулите сигнал. Верните вейвлет шумных и деноизмененных сигналов.

load nblocr1.mat;
[sigden,coefs] = cmddenoise(nblocr1,'db1',2);
[C,L] = wavedec(nblocr1,2,'db1');

График реконструкции на основе приближения уровня 2 и коэффициентов детализации уровня 2 и уровня 1 для сигнала с шумом.

app = wrcoef('a',C,L,'db1',2);
subplot(3,1,1);
plot(app); title('Approximation Coefficients');
for nn = 1:2
    det = wrcoef('d',C,L,'db1',nn);
    subplot(3,1,nn+1)
    plot(det); title(['Noisy Wavelet Coefficients - Level '...
          num2str(nn)]);
end

Figure contains 3 axes. Axes 1 with title Approximation Coefficients contains an object of type line. Axes 2 with title Noisy Wavelet Coefficients - Level 1 contains an object of type line. Axes 3 with title Noisy Wavelet Coefficients - Level 2 contains an object of type line.

Реконструкции графика на основе приближения и коэффициентов детализации для деноизмененного сигнала на тех же уровнях.

figure;
app = wrcoef('a',coefs,L,'db1',2);
subplot(3,1,1);
plot(app); title('Approximation Coefficients');
for nn = 1:2
    det = wrcoef('d',coefs,L,'db1',nn);
    subplot(3,1,nn+1)
    plot(det); 
    title(['Thresholded Wavelet Coefficients-Level '...
         num2str(nn)]);
end

Figure contains 3 axes. Axes 1 with title Approximation Coefficients contains an object of type line. Axes 2 with title Thresholded Wavelet Coefficients-Level 1 contains an object of type line. Axes 3 with title Thresholded Wavelet Coefficients-Level 2 contains an object of type line.

Коэффициенты приближения идентичны в шумном и деноизмененном сигнале, но большинство коэффициентов детализации в деноизмененном сигнале близки к нулю.

Создайте сигнал, дискретизированный с частотой дискретизации 1 кГц. Сигнал состоит из ряда ударов различной ширины.

t = [0.1 0.13 0.15 0.23 0.25 0.40 0.44 0.65 0.76 0.78 0.81];
h = [4  -5  3  -4 5  -4.2  2.1  4.3  -3.1  5.1  -4.2];
h  = abs(h);
len = 1000;
w  = 0.01*[0.5 0.5 0.6 1 1 3 1 1 0.5 0.8 0.5];
tt = linspace(0,1,len);  x = zeros(1,len);
for j=1:11
  x = x + ( h(j) ./ (1+ ((tt-t(j))/w(j)).^4));
end
plot(tt,x);
title('Original Signal');
hold on;

Figure contains an axes. The axes with title Original Signal contains an object of type line.

Добавьте белый Гауссов шум с различными отклонениями к двум несвязанным сегментам сигнала. Добавьте средний белый Гауссов шум с отклонением, равной 2, к сегменту сигнала от 0 до 0,3 секунд. Добавьте средний белый Гауссов шум с единичным отклонением к сегменту сигнала от 0,3 секунды до 1 секунды. Установите генератор случайных чисел в настройки по умолчанию для воспроизводимых результатов.

rng default;
nv1 = sqrt(2).*randn(size(tt)).*(tt<=0.3);
nv2 = randn(size(tt)).*(tt>0.3);
xx = x+nv1+nv2;
plot(tt,xx);
title('Noisy Signal');

Figure contains an axes. The axes with title Noisy Signal contains 2 objects of type line.

Примените интервально-зависимое шумоподавление, используя leaster-асимметричный вейвлет Daubechies с 4 моментами исчезновения до уровня 5. Автоматический выбор количества интервалов и вывод результата.

[sigden,coefs,thrParamsOut] = cmddenoise(xx,'sym4',5);
thrParamsOut{1}
ans = 2×3
103 ×

    0.0010    0.2930    0.0036
    0.2930    1.0000    0.0028

cmdnoise определяет одну точку изменения отклонения в коэффициентах детализации 1-го уровня, определяющих два интервала. Первый интервал содержит выборки с 1 по 293. Второй интервал содержит выборки от 293 до 1000. Это близко к истинной точке изменения отклонения, которая происходит на выборке 299.

Загрузите сигнал примера, nbumpr1.mat. Разбейте сигнал на 1-6 интервалов, принимая, что 0-5 меняют точки. Вычислите пороги для каждого интервала. Использование наименее асимметричного вейвлета Daubechies с 4 моментами исчезновения возвращает интервалы и соответствующие пороги. Отображение результатов.

load nbumpr1.mat;
[sigden,~,~,int_DepThr_Cell] = cmddenoise(nbumpr1,'sym4',1);
format bank;
disp('          Begin        End          Threshold ');
          Begin        End          Threshold 
cellfun(@disp,int_DepThr_Cell,'UniformOutput',false);
          1.00       1024.00          1.36

          1.00        613.00          1.73
        613.00       1024.00          1.00

          1.00        207.00          1.05
        207.00        613.00          2.51
        613.00       1024.00          1.00

          1.00        207.00          1.05
        207.00        597.00          2.52
        597.00        627.00          1.69
        627.00       1024.00          0.97

          1.00        207.00          1.05
        207.00        613.00          2.51
        613.00        695.00          1.20
        695.00        725.00          0.59
        725.00       1024.00          1.05

          1.00        207.00          1.05
        207.00        597.00          2.52
        597.00        627.00          1.69
        627.00        695.00          1.19
        695.00        725.00          0.59
        725.00       1024.00          1.05

Загрузите сигнал примера, nbumpr1.mat. Сигнал имеет две точки изменения отклонения, что приводит к трем интервалам. Использование cmddenoise для обнаружения количества точек изменения.

load nbumpr1.mat;
[sigden,~,thrParamsOut,~,bestNbofInt] = ...
       cmddenoise(nbumpr1,'sym4',1);
fprintf('Found %d change points.\n',bestNbofInt-1);
Found 2 change points.

Входные параметры

свернуть все

Входной сигнал, заданный как 1-D строки или вектор-столбец. sig является вещественным входным сигналом для зависящего от интервала шумоподавления. Элементы sig приняты равными интервалами во времени или пространстве. Если sig содержит неравномерно выбранные данные, cmddenoise не подходит. Вместо этого используйте лифтинговое преобразование. Посмотрите lwt для получения дополнительной информации.

Типы данных: double

Имя вейвлета, заданное как вектор символов или строковый скаляр. wname - любой действительный ортогональный или биортогональный вейвлет. Можно использовать команду: wtype = wavemngr('fields',wname,'type','file'); чтобы определить, является ли имя вейвлета допустимым для использования с cmddenoise. Допустимые имена вейвлет возвращают 1 или 2 для wtype.

Пример: 'bior2.2', 'db4', 'sym4'

Типы данных: char

Уровень вейвлет (мультирезолюционный анализ), заданный как положительное целое число. level приводит уровень мультирезолюционного разложения входного сигнала с помощью децимированного 1-D дискретного вейвлет, wavedec.

Типы данных: double

Правило порога, заданное как символьный массив. sorh - пороговое правило, используемое при изменении коэффициентов детализации. Допустимые варианты для sorh являются 's' (по умолчанию) и 'h' для мягкого и жесткого порога.

Количество интервалов, заданное в виде положительного целого числа менее 7. cmddenoise разделяет входной сигнал на nb_inter интервалы. cmddenoise определяет местоположение nb_inter изменяйте точки с помощью контрастной функции [2]. Если вы вводите NaN для nb_inter, cmddenoise игнорирует вход. Если вы используете входной параметр thrParamsIn, cmddenoise игнорирует любое значение, которое вы вводите для nb_inter.

Типы данных: double

Интервалы и пороги по уровню, заданные как массив ячеек матриц, равный по длине level. Каждый элемент thrParamsIn содержит информацию о интервале и пороге для соответствующего уровня мультиразрешения. Элементы thrParamsIn являются N-by-3 матрицами с N, равными количеству интервалов. 1-й и 2-й столбцы содержат начальный и конечный индексы интервалов, а 3-й столбец содержит соответствующее пороговое значение. Если вы задаете thrParamsIn, вы не можете задать выходные аргументы int_DepThr_Cell или BestNbofInt.

Типы данных: cell

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

свернуть все

sigden - деноизированная версия входного sig. sigden является 1-D вектором-строкой, равным по длине sig.

coefs является вектором-строкой с приближением (масштабирование) и пороговыми коэффициентами детализации (вейвлет). Упорядоченное расположение коэффициентов приближения и детализации по уровням в coefs совпадает с выходами wavedec. cmddenoise не применяет пороговое значение к коэффициентам приближения.

Типы данных: double

thrParamsOut - массив ячеек из матриц, равный по длине level. Каждый элемент массива ячеек содержит интервальную и пороговую информацию для соответствующего уровня мультиразрешения. Элементы thrParamsOut являются N-by-3 матрицами с N, равными количеству интервалов. N определяется значением входных параметров. 1-й и 2-й столбцы содержат начальный и конечный индексы интервалов, а 3-й столбец содержит соответствующее пороговое значение.

Типы данных: cell

int_DepThr_Cell содержит интервальную и пороговую информацию, предполагающую, что количество точек изменения находится в областях значений от 0 до 5. N-й элемент int_DepThr_Cell - матрица N-by-3, содержащая информацию о интервале, принимающую N-1 точки изменения. Каждая строка матрицы содержит начальный и конечный индексы порогового интервала и соответствующее пороговое значение. Попытка вывода int_DepThr_Cell если вы вводите количество интервалов и порогов, thrParamsIn, приводит к ошибке. int_DepThr_Cell{BestNbofInt} или int_DepThr_Cell{nb_inter} равен элементам матрицы thrParamsOut.

Типы данных: cell

BestNbofInt - оптимальное количество интервалов на основе предполагаемых точек изменения в отклонении коэффициентов детализации уровня 1. Количество и расположение точек изменения оцениваются с помощью штрафованного контрастного метода [2]. Попытка вывода BestNbofInt если вы вводите количество интервалов и порогов, thrParamsIn, приводит к ошибке.

Ссылки

[1] Donoho, D. and Johnstone, I. «Идеальная пространственная адаптация путем вейвлета усадки», Biometrika, 1994, 81,3, 425-455.

[2] Lavielle, M. «Обнаружение нескольких изменений в последовательности зависимых переменных», Стохастические процессы и их приложения, 1999, 83, 79-102.

См. также

Функции

Приложения

Введенный в R2010a