mscohere

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

Описание

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

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

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

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

  • Если 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 выборок перекрытия между смежными сегментами и точками ДПФ 20:48.

[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 object. The axes object 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. Окно сигналы с окном Hann с 1024 выборками. Задайте 512 выборок перекрытия между смежными сегментами и точками ДПФ 10:24. Постройте оценку.

noverlap = 512;
nfft = 1024;

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

Figure contains an axes object. The axes object 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 object. The axes object 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 object. The axes object with title Coherence Estimate via Welch contains 2 objects of type line.

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

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 objects. Axes object 1 with title Output 1, All Inputs contains an object of type line. Axes object 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 objects. Axes object 1 with title Input 1, All Outputs contains an object of type line. Axes object 2 with title Input 2, All Outputs contains an object of type line. Axes object 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 object. The axes object 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 object. The axes object 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 Гц. Один из сигналов изолирует другой в фазе π/3 радианами. Встройте оба сигнала в белый Гауссов шум модульного отклонения.

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 object. The axes object 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 object. The axes object 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 object. The axes object 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 object. The axes object 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 object. The axes object 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 оба задают окно Hann длины N  + 1.

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

Количество перекрытых выборок в виде положительного целого числа.

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

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

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

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

Количество ДПФ указывает в виде положительного целого числа. Если вы задаете nfft как пустой, затем mscohere наборы этот аргумент к макс. (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.

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

свернуть все

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

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

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

Больше о

свернуть все

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

Оценка квадрата когерентности является функцией частоты со значениями между 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 th выходной сигнал, где:

  • X соответствует массиву входных параметров m.

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

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

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

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

Алгоритмы

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

Ссылки

[1] Гомес Гонсалес, A., Х. Родригес, Кс. Сэгарцэзу, А. Шумахер и я. Isasa. “Несколько Метод Когерентности во Временном интервале для Анализа Каналов передачи Шума и Колебаний с Неустановившимися Сигналами”. Продолжения 2 010 Международных конференций Разработки Шума и Вибрации, стр ISMA2010-USD2010. 3927–3941.

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

[3] Rabiner, Лоуренс Р. и золото Бернарда. Теория и приложение цифровой обработки сигналов. Englewood Cliffs, NJ: Prentice Hall, 1975.

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

[5] Валлийцы, Питер Д. “Использование быстрого преобразования Фурье для оценки спектров мощности: метод на основе усреднения во времени по коротким, модифицированным периодограммам”. IEEE® Транзакции на Аудио и Электроакустике. Издание AU-15, 1967, стр 70–73.

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

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

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