cpsd

Взаимная спектральная плотность мощности

Описание

пример

pxy = cpsd(x,y) оценивает взаимную спектральную плотность мощности (CPSD) двух сигналов дискретного времени, x и y, используя усредненный, модифицированный метод спектральной оценки пародограммы Уэлча.

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

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

  • Если x и y являются матрицами с одинаковым числом строк, но различными числами столбцов, тогда cpsd возвращает трехмерный массив, pxy, содержащая взаимная спектральная плотность мощности оценки для всех комбинаций входа столбцов. Каждый столбец pxy соответствует столбцу x, и каждая страница соответствует столбцу y: pxy(:,m,n) = cpsd(x(:,m),y(:,n)).

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

Для реальных x и y, cpsd возвращает односторонний CPSD. Для сложных x или y, cpsd возвращает двусторонний CPSD.

pxy = cpsd(x,y,window) использует window чтобы разделить x и y в сегменты и выполните оконную обработку.

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

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

пример

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

[pxy,w] = cpsd(___) возвращает вектор нормированных частот, w, при котором оценивается взаимная спектральная плотность мощности.

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

пример

[pxy,w] = cpsd(x,y,window,noverlap,w) возвращает оценки взаимной спектральной плотности мощности на нормализованных частотах, заданных в w.

пример

[pxy,f] = cpsd(x,y,window,noverlap,f,fs) возвращает оценки взаимной спектральной плотности мощности на частотах, заданных в f.

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

пример

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

Примеры

свернуть все

Сгенерируйте два цветных сигнала шума и постройте график их взаимной спектральной плотности мощности. Задайте БПФ длины 1024 и треугольное окно с 500 точками без перекрытия.

r = randn(16384,1);

hx = fir1(30,0.2,rectwin(31));
x = filter(hx,1,r);

hy = ones(1,10)/sqrt(10);
y = filter(hy,1,r);

cpsd(x,y,triang(500),250,1024)

Figure contains an axes. The axes with title Welch Cross Power Spectral Density Estimate contains an object of type line.

Сгенерируйте две двухканальные синусоиды, дискретизированные с частотой дискретизации 1 кГц в течение 1 секунды. Каналы первого сигнала имеют частоты 200 Гц и 300 Гц. Каналы второго сигнала имеют частоты 300 Гц и 400 Гц. Оба сигнала встроены в единично-дисперсионный белый Гауссов шум.

fs = 1e3;
t = (0:1/fs:1-1/fs)';

q = 2*sin(2*pi*[200 300].*t);
q = q+randn(size(q));

r = 2*sin(2*pi*[300 400].*t);
r = r+randn(size(r));

Вычислите взаимную спектральную плотность мощности двух сигналов. Используйте 256-выборочное окно Bartlett, чтобы разделить сигналы на сегменты и отобразить сегменты. Задайте 128 выборок перекрытия между смежными сегментами и 2048 точками ДПФ. Используйте встроенную функциональность cpsd для построения графика результатов.

cpsd(q,r,bartlett(256),128,2048,fs)

Figure contains an axes. The axes with title Welch Cross Power Spectral Density Estimate contains 2 objects of type line.

По умолчанию cpsd работает с столбцом за столбцом на матричных входах того же размера. Каждый канал достигает максимума на частотах исходных синусоидов.

Повторите расчет, но теперь добавьте 'mimo' к списку аргументов.

cpsd(q,r,bartlett(256),128,2048,fs,'mimo')

Figure contains an axes. The axes with title Welch Cross Power Spectral Density Estimate contains 4 objects of type line.

При вызове с помощью 'mimo' опция, cpsd возвращает трехмерный массив, содержащее взаимную спектральную плотность мощности оценки для всех комбинаций входа столбцов. Оценка второго канала q и первый канал r показывает увеличенный пик на общей частоте 300 Гц.

Сгенерировать два синусоидальных сигнала 100 Гц, дискретизированных с частотой дискретизации 1 кГц в течение 296 мс. Оба сигнала встроены в белый Гауссов шум отклонения 1/4 ².

Fs = 1000;
t = 0:1/Fs:0.296;

x = cos(2*pi*t*100)+0.25*randn(size(t));
tau = 1/400;
y = cos(2*pi*100*(t-tau))+0.25*randn(size(t));

Вычислите и постройте график величины взаимной спектральной плотности мощности. Используйте настройки по умолчанию для cpsd. Величина достигает пика на частоте, где существует значительная когерентность между сигналами.

cpsd(x,y,[],[],[],Fs)

Figure contains an axes. The axes with title Welch Cross Power Spectral Density Estimate contains an object of type line.

Постройте квадрат когерентности и фазу поперечного спектра. Ордината на высококогерентной частоте соответствует задержке фазы между синусоидами.

[Cxy,F] = mscohere(x,y,[],[],[],Fs);

[Pxy,F] = cpsd(x,y,[],[],[],Fs);

subplot(2,1,1)
plot(F,Cxy)
title('Magnitude-Squared Coherence')

subplot(2,1,2)
plot(F,angle(Pxy))

hold on
plot(F,2*pi*100*tau*ones(size(F)),'--')
hold off

xlabel('Hz')
ylabel('\Theta(f)')
title('Cross Spectrum Phase')

Figure contains 2 axes. Axes 1 with title Magnitude-Squared Coherence contains an object of type line. Axes 2 with title Cross Spectrum Phase contains 2 objects of type line.

Сгенерируйте два N- выборка экспоненциальных последовательностей, xa=an и xb=bn, с n0. Определить a=0.8, b=0.9, и небольшой N чтобы увидеть эффекты конечного размера.

N = 10;
n = 0:N-1;

a = 0.8;
b = 0.9;

xa = a.^n;
xb = b.^n;

Вычислите и постройте график взаимной спектральной плотности мощности последовательностей на полном интервале нормализованных частот, [-π,π]. Задайте прямоугольное окно длины N и отсутствие перекрытия между сегментами.

w = -pi:1/1000:pi;
wind = rectwin(N);
nove = 0;

[pxx,f] = cpsd(xa,xb,wind,nove,w);

Спектр поперечной степени двух последовательностей имеет аналитическое выражение для больших N:

R(ω)=11-ae-jω11-bejω.

Преобразуйте это выражение в взаимную спектральную плотность мощности путем деления на 2πN. Сравните результаты. Рябь в cpsd результат является следствием оконности.

nfac = 2*pi*N;

X = 1./(1-a*exp(-1j*w));
Y = 1./(1-b*exp( 1j*w));
R = X.*Y/nfac;

semilogy(f/pi,abs(pxx))
hold on
semilogy(w/pi,abs(R))
hold off
legend('cpsd','Analytic')

Figure contains an axes. The axes contains 2 objects of type line. These objects represent cpsd, Analytic.

Повторите расчет с N=25. Кривые согласуются с шестью рисунками для N всего 100.

N = 25;
n = 0:N-1;
xa = a.^n;
xb = b.^n;

wind = rectwin(N);

[pxx,f] = cpsd(xa,xb,wind,nove,w);
R = X.*Y/(2*pi*N);

semilogy(f/pi,abs(pxx))
hold on
semilogy(w/pi,abs(R))
hold off
legend('cpsd','Analytic')

Figure contains an axes. The axes contains 2 objects of type line. These objects represent cpsd, Analytic.

Используйте взаимную спектральную плотность мощности, чтобы идентифицировать сильно поврежденный тон.

Звуковые сигналы, генерируемые при наборе числа или символа на цифровом телефоне, являются суммами синусоидов с частотами, взятыми из двух разных групп. Каждая пара тонов содержит одну частоту низкой группы (697 Гц, 770 Гц, 852 Гц или 941 Гц) и одну частоту высокой группы (1209 Гц, 1336 Гц или 1477 Гц).

Сгенерируйте сигналы, соответствующие всем символам. Дискретизируйте каждый тон с частотой 4 кГц в течение полсекунды. Составьте справочную таблицу.

fs = 4e3;
t = 0:1/fs:0.5-1/fs;

nms = ['1';'2';'3';'4';'5';'6';'7';'8';'9';'*';'0';'#'];

ver = [697 770 852 941];
hor = [1209 1336 1477];

v = length(ver);
h = length(hor);

for k = 1:v
    for l = 1:h
        idx = h*(k-1)+l;
        tone = sum(sin(2*pi*[ver(k);hor(l)].*t))';
        tones(:,idx) = tone;
    end
end

Постройте график периодограммы Welch каждого сигнала и аннотируйте частоты компонентов. Используйте 200-выборочное окно Хэмминга, чтобы разделить сигналы на неперекрывающиеся сегменты и отобразить сегменты.

[pxx,f] = pwelch(tones,hamming(200),0,[],fs);

for k = 1:v
    for l = 1:h
        idx = h*(k-1)+l;
        ax = subplot(v,h,idx);
        plot(f,10*log10(pxx(:,idx)))
        ylim([-80 0])
        title(nms(idx))
        tx = [ver(k);hor(l)];
        ax.XTick = tx;
        ax.XTickLabel = int2str(tx);
    end
end

Figure contains 12 axes. Axes 1 with title 1 contains an object of type line. Axes 2 with title 2 contains an object of type line. Axes 3 with title 3 contains an object of type line. Axes 4 with title 4 contains an object of type line. Axes 5 with title 5 contains an object of type line. Axes 6 with title 6 contains an object of type line. Axes 7 with title 7 contains an object of type line. Axes 8 with title 8 contains an object of type line. Axes 9 with title 9 contains an object of type line. Axes 10 with title * contains an object of type line. Axes 11 with title 0 contains an object of type line. Axes 12 with title # contains an object of type line.

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

mys = sum(sin(2*pi*[ver(3);hor(2)].*t))'+5*randn(size(t'));

% To hear, type soundsc(mys,fs)

Вычислите взаимную спектральную плотность мощности поврежденного сигнала и опорных сигналов. Окончите сигналы с помощью 512-выборочного окна Кайзера с масштабным фактором β = 5. Постройте график величины каждого спектра.

[pxy,f] = cpsd(mys,tones,kaiser(512,5),100,[],fs);

for k = 1:v
    for l = 1:h
        idx = h*(k-1)+l;
        ax = subplot(v,h,idx);
        plot(f,10*log10(abs(pxy(:,idx))))
        ylim([-80 0])
        title(nms(idx))
        tx = [ver(k);hor(l)];
        ax.XTick = tx;
        ax.XTickLabel = int2str(tx);
    end
end

Figure contains 12 axes. Axes 1 with title 1 contains an object of type line. Axes 2 with title 2 contains an object of type line. Axes 3 with title 3 contains an object of type line. Axes 4 with title 4 contains an object of type line. Axes 5 with title 5 contains an object of type line. Axes 6 with title 6 contains an object of type line. Axes 7 with title 7 contains an object of type line. Axes 8 with title 8 contains an object of type line. Axes 9 with title 9 contains an object of type line. Axes 10 with title * contains an object of type line. Axes 11 with title 0 contains an object of type line. Axes 12 with title # contains an object of type line.

Цифра в поврежденном сигнале имеет спектр с самым высоким peaks и самым высоким значением RMS.

[~,loc] = max(rms(abs(pxy)));

digit = nms(loc)
digit = 
'8'

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

свернуть все

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

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

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

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

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

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

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

Если вы задаете window как пустой, тогда cpsd использует окно Хэмминга, такое что 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 как пустой, тогда cpsd использует число, которое создает 50% перекрытия между сегментами. Если длина сегмента не задана, функция устанавливает noverlap для ⌊ N/4,5 ⌋, где N - длина входного и выходного сигналов.

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

Количество точек ДПФ, заданное как положительное целое число. Если вы задаете nfft как пустой, тогда cpsd устанавливает параметр 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 является четным, pxy имеет nfft/ 2 + 1 строки и вычисляется через интервал [0, π] рад/отсчет. Если nfft нечетно, pxy имеет (nfft + 1 )/2 строки и интервал [0, π) рад/отсчет. Если вы задаете fsсоответствующие интервалы: [0, fs/ 2] циклов/единичное время для четных nfft и [0, fs/ 2) циклы/единичное время для нечетных nfft.

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

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

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

свернуть все

Взаимная спектральная плотность мощности, возвращенный как векторный, матричный или трехмерный массив.

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

  • Если pxy односторонний, w охватывает интервал [0, π], когда nfft чётный и [0, π), когда nfft нечетно.

  • Если pxy двусторонний, w охватывает интервал [0,2 π).

  • Если pxy центрирован по постоянному току, w охватывает интервал (- π, π] когда nfft чётный и (- π, π), когда nfft нечетно.

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

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

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

Подробнее о

свернуть все

Взаимная спектральная плотность мощности

Взаимная спектральная плотность мощности является распределением степени на частоту модуля и определяется как

Pxy(ω)=m=Rxy(m)ejωm.

Последовательность перекрестной корреляции определяется как

Rxy(m)=E{xn+myn}=E{xnynm},

где xn и yn являются совместно стационарными случайными процессами -  ∞ <  n <,<n<, и E {·} является оператором ожидаемого значения.

Алгоритмы

cpsd использует средний модифицированный метод спектральной оценки пародограммы Уэлча.

Ссылки

[1] Oppenheim, Alan V., Ronald W. Schafer, and John R. Buck. Обработка сигнала в дискретном времени. 2nd Ed. Upper Saddle River, NJ: Prentice Hall, 1999.

[2] Рабинер, Лоуренс Р. и Б. Голд. Теория и применение цифровой обработки сигналов. Englewood Cliffs, NJ: Prentice Hall, 1975, с. 414-419.

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

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

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

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