mscohere

Квадрат когерентности

Описание

cxy = mscohere(x,y) находит оценку квадрата когерентности, cxy, из входных сигналов, x и y.

  • Если x и y являются обоими векторами, они должны иметь одинаковую длину.

  • Если один из сигналов является матрицей, а другой - вектором, то длина вектора должна равняться количеству строк в матрице. Функция расширяет вектор и возвращает матрицу оценок квадрата когерентности столбца за столбцом.

  • Если x и y являются матрицами с одинаковым числом строк, но различными числами столбцов, тогда mscohere возвращает множественную матрицу когерентности. m-й столбец cxy содержит оценку степени корреляции между всеми входными сигналами и m-м выходным сигналом. Для получения дополнительной информации см. Квадрат когерентности.

  • Если x и y матрицы равного размера, тогда mscohere работает по столбцу: cxy(:,n) = mscohere(x(:,n),y(:,n)). Чтобы получить несколько матриц когерентности, добавьте 'mimo' в список аргументов.

cxy = mscohere(x,y,window) использует window чтобы разделить x и y в сегменты и выполните оконную обработку. Необходимо использовать как минимум два сегмента. В противном случае квадрат когерентности равняется 1 для всех частот. В случае MIMO количество сегментов должно быть больше, чем количество входных каналов.

cxy = mscohere(x,y,window,noverlap) использует noverlap выборки перекрытия между смежными сегментами.

пример

cxy = mscohere(x,y,window,noverlap,nfft) использует nfft точки дискретной дискретизации для вычисления дискретного преобразования Фурье.

пример

cxy = mscohere(___,'mimo') вычисляет множественную матрицу когерентности для матричных входов. Этот синтаксис может включать любую комбинацию входных параметров из предыдущих синтаксисов.

[cxy,w] = mscohere(___) возвращает вектор нормированных частот, w, при котором оценивается квадрат когерентности.

пример

[cxy,f] = mscohere(___,fs) возвращает вектор частот, f, выраженная в терминах частоты дискретизации, fs, при котором оценивается квадрат когерентности. fs должен быть шестым числовым входом, mscohere. Чтобы ввести частоту дискретизации и все еще использовать значения по умолчанию предыдущих необязательных аргументов, задайте эти аргументы как пустые [].

[cxy,w] = mscohere(x,y,window,noverlap,w) возвращает оценку квадрата когерентности на нормализованных частотах, заданных в w.

[cxy,f] = mscohere(x,y,window,noverlap,f,fs) возвращает оценку квадрата когерентности на частотах, заданных в f.

[___] = mscohere(x,y,___,freqrange) возвращает оценку квадрата когерентности в частотной области значений, заданном freqrange. Допустимые опции для freqrange являются 'onesided', 'twosided', и 'centered'.

пример

mscohere(___) без выходных аргументов строит графики оценки квадрата когерентности в текущую фигуру окне.

Примеры

свернуть все

Вычислите и постройте график оценки когерентности между двумя цветными шумовыми последовательностями.

Сгенерируйте сигнал, состоящий из белого Гауссова шума.

r = randn(16384,1);

Чтобы создать первую последовательность, полосно-пропускающая способность фильтрует сигнал. Спроектируйте фильтр 16-го порядка, который проходит нормированные частоты между 0,2, и 0,4, рад/выборка. Задайте затухание в полосе задерживания 60 дБ. Фильтрация исходного сигнала.

dx = designfilt('bandpassiir','FilterOrder',16, ...
    'StopbandFrequency1',0.2,'StopbandFrequency2',0.4, ...
    'StopbandAttenuation',60);
x = filter(dx,r);

Чтобы создать вторую последовательность, спроектируйте фильтр 16-го порядка, который останавливает нормализованные частоты между 0,6, и 0,8, рад/выборка. Задайте неравномерность в полосе пропускания 0,1 дБ. Фильтрация исходного сигнала.

dy = designfilt('bandstopiir','FilterOrder',16, ...
    'PassbandFrequency1',0.6,'PassbandFrequency2',0.8, ...
    'PassbandRipple',0.1);
y = filter(dy,r);

Оцените квадрат когерентности x и y. Используйте 512-образцевое окно Хэмминга. Задайте 500 выборки перекрытия между смежными сегментами и 2048 точками ДПФ.

[cxy,fc] = mscohere(x,y,hamming(512),500,2048);

Постройте график функции когерентности и наложите частотные характеристики фильтров.

[qx,f] = freqz(dx);
qy = freqz(dy);

plot(fc/pi,cxy)
hold on
plot(f/pi,abs(qx),f/pi,abs(qy))
hold off

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

Сгенерируйте случайный двухканальный сигнал, x. Сгенерируйте другой сигнал, y, путем lowpass фильтрации двух каналов и добавления их вместе. Задайте конечная импульсная характеристика 30-го порядка с частотой среза 0,3, и разработанный с использованием прямоугольного окна.

h = fir1(30,0.3,rectwin(31));
x = randn(16384,2);
y = sum(filter(h,1,x),2);

Вычислите оценку множественной когерентности x и y. Окончите сигналы окном Ханна с 1024 образцом. Задайте 512 выборки перекрытия между смежными сегментами и 1024 точками ДПФ. Постройте график оценки.

noverlap = 512;
nfft = 1024;

mscohere(x,y,hann(nfft),noverlap,nfft,'mimo')

Figure contains an axes. The axes with title Coherence Estimate via Welch contains an object of type line.

Сравните оценку когерентности с частотной характеристикой фильтра. Падения когерентности соответствуют нулям частотной характеристики.

[H,f] = freqz(h);

hold on
yyaxis right
plot(f/pi,20*log10(abs(H)))
hold off

Figure contains an axes. The axes with title Coherence Estimate via Welch contains 2 objects of type line.

Вычислите и постройте график обыкновенной оценки квадрата когерентности x и y. Оценка не достигает 1 ни для одного из каналов.

figure
mscohere(x,y,hann(nfft),noverlap,nfft)

Figure contains an axes. The axes with title Coherence Estimate via Welch contains 2 objects of type line.

Сгенерируйте два многоканальных сигнала, каждый из которых дискретизирован с частотой дискретизации 1 кГц в течение 2 секунд. Первый сигнал, входной, состоит из трёх синусоидов с частотами 120 Гц, 360 Гц и 480 Гц. Второй сигнал, выходной, состоит из двух синусоидов с частотами 120 Гц и 360 Гц. Одна из синусоид отстает от первого сигнала на Другая синусоида имеет задержку Оба сигнала встроены в белый Гауссов шум.

fs = 1000;
f = 120;
t = (0:1/fs:2-1/fs)';

inpt = sin(2*pi*f*[1 3 4].*t);
inpt = inpt+randn(size(inpt));
oupt = sin(2*pi*f*[1 3].*t-[pi/2 pi/4]);
oupt = oupt+randn(size(oupt));

Оцените степень корреляции между всеми входными сигналами и каждым из каналов выхода. Используйте окно Хэмминга длиной 100, чтобы открыть данные. mscohere возвращает одну когерентную функцию для каждого выходного канала. Функции когерентности достигают максимумов на частотах, разделяемых входом и выходом.

[Cxy,f] = mscohere(inpt,oupt,hamming(100),[],[],fs,'mimo');

for k = 1:size(oupt,2)
    subplot(size(oupt,2),1,k)
    plot(f,Cxy(:,k))
    title(['Output ' int2str(k) ', All Inputs'])
end

Figure contains 2 axes. Axes 1 with title Output 1, All Inputs contains an object of type line. Axes 2 with title Output 2, All Inputs contains an object of type line.

Переключите входной и выходной сигналы и вычислите функцию множественной когерентности. Используйте то же окно Хэмминга. Нет корреляции между входом и выходом на 480 Гц. Таким образом, в третьей корреляционной функции нет peaks.

[Cxy,f] = mscohere(oupt,inpt,hamming(100),[],[],fs,'mimo');

for k = 1:size(inpt,2)
    subplot(size(inpt,2),1,k)
    plot(f,Cxy(:,k))
    title(['Input ' int2str(k) ', All Outputs'])
end

Figure contains 3 axes. Axes 1 with title Input 1, All Outputs contains an object of type line. Axes 2 with title Input 2, All Outputs contains an object of type line. Axes 3 with title Input 3, All Outputs contains an object of type line.

Повторите расчет, используя функциональность графического изображения mscohere.

clf
mscohere(oupt,inpt,hamming(100),[],[],fs,'mimo')

Figure contains an axes. The axes with title Coherence Estimate via Welch contains 3 objects of type line.

Вычислите обыкновенную когерентную функцию второго сигнала и первых двух каналов первого сигнала. Значения, не являющиеся пиковыми, отличаются от функции множественной когерентности.

[Cxy,f] = mscohere(oupt,inpt(:,[1 2]),hamming(100),[],[],fs);
plot(f,Cxy)

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

Найдите различия фаз путем вычисления угла поперечного спектра в точках максимальной когерентности.

Pxy = cpsd(oupt,inpt(:,[1 2]),hamming(100),[],[],fs);
[~,mxx] = max(Cxy);
for k = 1:2
    fprintf('Phase lag %d = %5.2f*pi\n',k,angle(Pxy(mxx(k),k))/pi)
end
Phase lag 1 = -0.51*pi
Phase lag 2 = -0.22*pi

Сгенерируйте два синусоидальных сигнала, дискретизированных в течение 1 секунды каждый на 1 кГц. Каждая синусоида имеет частоту 250 Гц. Один из сигналов отстает друг от друга в фазе на  Встройте оба сигнала в белый Гауссов шум модуля отклонения.

fs = 1000;
f = 250;
t = 0:1/fs:1-1/fs;
um = sin(2*pi*f*t)+rand(size(t));
un = sin(2*pi*f*t-pi/3)+rand(size(t));

Использование mscohere вычислить и построить график квадрата когерентности сигналов.

mscohere(um,un,[],[],[],fs)

Figure contains an axes. The axes with title Coherence Estimate via Welch contains an object of type line.

Измените заголовок графика, метку оси X и пределы оси Y.

title('Magnitude-Squared Coherence')
xlabel('f (Hz)')
ylim([0 1.1])

Figure contains an axes. The axes with title Magnitude-Squared Coherence contains an object of type line.

Использование gca для получения указателя на текущие системы координат. Измените местоположение отметок деления. Удалите метку оси Y.

ax = gca;
ax.XTick = 0:250:500;
ax.YTick = 0:0.25:1;
ax.YLabel.String = [];

Figure contains an axes. The axes with title Magnitude-Squared Coherence contains an object of type line.

Вызовите Children свойство указателя для изменения цвета и ширины построенной линии.

ln = ax.Children;
ln.Color = [0.8 0 0];
ln.LineWidth = 1.5;

Figure contains an axes. The axes with title Magnitude-Squared Coherence contains an object of type line.

Кроме того, используйте set и get для изменения свойств линии.

set(get(gca,'Children'),'Color',[0 0.4 0],'LineStyle','--','LineWidth',1)

Figure contains an axes. The axes with title Magnitude-Squared Coherence contains an object of type line.

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

свернуть все

Входные сигналы, заданные как векторы или матрицы.

Пример: cos(pi/4*(0:159))+randn(1,160) задает синусоиду, встроенную в белый Гауссов шум.

Типы данных: single | double
Поддержка комплексного числа: Да

Окно, заданное как целое число или как строка или вектор-столбец. Использование window для разделения сигнала на сегменты:

  • Если window является целым числом, тогда mscohere делит x и y в сегменты длины window и оконные окна каждого сегмента с окном Хэмминга такой длины.

  • Если window является вектором, тогда mscohere делит x и y в сегменты той же длины, что и вектор, и окна каждый сегмент используя window.

Если длина x и y нельзя разделить точно на целое число сегментов с noverlap перекрывая выборки, сигналы усекаются соответственно.

Если вы задаете window как пустой, тогда mscohere использует окно Хэмминга, такое что x и y делятся на восемь сегментов с noverlap перекрываемые выборки.

Список доступных окон см. в разделе Windows.

Пример: hann(N+1) и (1-cos(2*pi*(0:N)'/N))/2 оба задают окно Ханна длины N  + 1.

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

Количество перекрывающихся выборок, заданное как положительное целое число.

  • Если window скаляром, тогда noverlap должно быть меньше window.

  • Если window является вектором, тогда noverlap должно быть меньше длины window.

Если вы задаете noverlap как пустой, тогда mscohere использует число, которое создает 50% перекрытия между сегментами. Если длина сегмента не задана, функция устанавливает noverlap для ⌊ N/4,5 ⌋, где N - длина входного и выходного сигналов.

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

Количество точек ДПФ, заданное как положительное целое число. Если вы задаете nfft как пустой, тогда mscohere устанавливает этот аргумент в max (256,2p), где p = ⌈ log2 N ⌉ для входных сигналов длины N.

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

Частота дискретизации, заданная как положительная скалярная величина. Частота дискретизации является количеством выборок в единицу времени. Если модулем времени является секунды, то частота дискретизации имеет модули измерения Гц.

Нормированные частоты, заданные как строка или вектор-столбец с по крайней мере двумя элементами. Нормированные частоты указаны в рад/отсчет.

Пример: w = [pi/4 pi/2]

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

Частоты, заданные как строка или вектор-столбец с по крайней мере двумя элементами. Частоты указаны в циклах в единицах времени. Единичное время задается частотой дискретизации, fs. Если fs имеет модули измерения проб/секунду, затем f содержит модули Гц.

Пример: fs = 1000; f = [100 200]

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

Частотная область значений для оценки квадрата когерентности, заданный как 'onesided', 'twosided', или 'centered'. Значение по умолчанию является 'onesided' для реальных сигналов и 'twosided' для комплексных сигналов.

  • 'onesided' - Возвращает одностороннюю оценку оценки квадрата когерентности между двумя реальными входными сигналами, x и y. Если nfft является четным, cxy имеет nfft/ 2 + 1 строки и вычисляется через интервал [0, π] рад/отсчет. Если nfft нечетно, cxy имеет (nfft + 1 )/2 строки и интервал [0, π) рад/отсчет. Если вы задаете fsсоответствующие интервалы: [0, fs/ 2] циклов/единичное время для четных nfft и [0, fs/ 2) циклы/единичное время для нечетных nfft.

  • 'twosided' - Возвращает двустороннюю оценку оценки квадрата когерентности между двумя реальными или комплексными входными сигналами, x и y. В этом случае cxy имеет nfft строки и вычисляется через интервал [0,2 π) рад/отсчета. Если вы задаете fs, интервал является [0, fs) циклы/единичное время.

  • 'centered' - Возвращает центрированную двустороннюю оценку оценки квадрата когерентности между двумя реальными или комплексными входными сигналами, x и y. В этом случае cxy имеет nfft строки и вычисляется через интервал (- π, π] рад/отсчет для четных nfft и (- π, π) рад/отсчет для нечетных nfft. Если вы задаете fs, соответствующие интервалы: (- fs/2, fs/ 2] циклов/единичное время для четных nfft и (- fs/2, fs/ 2) циклы/единичное время для нечетных nfft.

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

свернуть все

Оценка квадрата когерентности, возвращенная в виде вектора, матрицы или трехмерного массива.

Нормированные частоты, возвращенные как реальный вектор-столбец.

Частоты, возвращенные как реальный вектор-столбец.

Подробнее о

свернуть все

Квадрат когерентности

Квадратная оценка квадрата когерентности является функцией частоты со значениями от 0 до 1. Эти значения показывают, насколько хорошо x соответствует y на каждой частоте. Квадрат когерентности является функцией спектральных плотностей степени, Pxx (f) и Pyy (f), и взаимной спектральной плотности мощности, Pxy (f), x и y:

Cxy(f)=|Pxy(f)|2Pxx(f)Pyy(f).

Для систем с несколькими входами/несколькими выходами функция с несколькими когерентными состояниями становится

CXyi(f)=PXyi(f)PXX1(f)PXyi(f)Pyiyi(f)=[Px1yi*(f)Pxmyi*(f)][Px1x1(f)Px1x2(f)Px1xm(f)Px2x1(f)Px2x2(f)Px2xm(f)Pxmx1(f)Pxmx2(f)Pxmxm(f)]1[Px1yi(f)Pxmyi(f)]1Pyiyi(f)

для i-го выходного сигнала, где:

  • X соответствует массиву m входов.

  • PXyi - m -мерный вектор взаимных спектральных плотностей мощности между входами и yi.

  • PXX - m -by - m матрица спектральных плотностей степени и взаимных спектральных плотностей мощности входов.

  • Pyiyi - спектральная плотность степени выхода.

  • Кинжал (†) обозначает комплексное сопряженное транспонирование.

Алгоритмы

mscohere оценивает функцию квадрата когерентности [2], используя перекрывшийся метод средней периодограммы Уэлча [3], [5].

Ссылки

[1] Гомес Гонсалес, А., Й. Родригес, X. Сагарцазу, А. Шумахер и И. Исаса. Метод множественной когерентности во временном интервале для анализа путей передачи шума и вибраций с нестационарными сигналами. Материалы Международной конференции по шумовой и вибротехнике 2010 года, ISMA2010-USD2010. стр 3927–3941.

[2] Кей, Стивен М. Современная спектральная оценка. Englewood Cliffs, Нью-Джерси: Prentice Hall, 1988.

[3] Рабинер, Лоуренс Р. и Бернард Голд. Теория и применение цифровой обработки сигналов. Englewood Cliffs, Нью-Джерси: Prentice Hall, 1975.

[4] Стоика, Петре и Рэндольф Мозес. Спектральный анализ сигналов. Верхняя Седл-Ривер, Нью-Джерси: Prentice Hall, 2005.

[5] Уэлч, Питер Д. «Использование быстрого преобразования Фурье для оценки спектров степени: метод, основанный на усреднении времени по коротким, измененным периодограммам». IEEE® Транзакции по аудио и электроакустике. Том AU-15, 1967, с. 70-73.

Расширенные возможности

Генерация кода C/C + +
Сгенерируйте код C и C++ с помощью Coder™ MATLAB ®

.
Представлено до R2006a