mscohere

Когерентность в квадрате значением

Синтаксис

cxy = mscohere(x,y)
cxy = mscohere(x,y,window)
cxy = mscohere(x,y,window,noverlap)
cxy = mscohere(x,y,window,noverlap,nfft)
cxy = mscohere(___,'mimo')
[cxy,w] = mscohere(___)
[cxy,f] = mscohere(___,fs)
[cxy,w] = mscohere(x,y,window,noverlap,w)
[cxy,f] = mscohere(x,y,window,noverlap,f,fs)
[___] = mscohere(x,y,___,freqrange)
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

Сгенерируйте случайный двухканальный сигнал, 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')

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

[H,f] = freqz(h);

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

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

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

Сгенерируйте два многоканальных сигнала, каждый выбранный на уровне 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

Переключите сигналы ввода и вывода и вычислите несколько функция когерентности. Используйте то же Окно Хэмминга. Нет никакой корреляции между вводом и выводом на уровне 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

Повторите вычисление, с помощью функциональности графического вывода mscohere.

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

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

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

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

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)

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

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

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

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

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

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

Также используйте set и get, чтобы изменить свойства строки.

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

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

свернуть все

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

Пример: 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® Transactions на Аудио и Электроакустике. Издание AU-15, 1967, стр 70–73.

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

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

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