exponenta event banner

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-образное окно Бартлетта, чтобы разделить сигналы на сегменты и открыть сегменты. Укажите 128 выборок перекрытия между соседними сегментами и 2048 точками DFT. Использовать встроенные функциональные возможности 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 мс. Одна из синусоид отстает от другой на 2,5 мс, что эквивалентно фазовому запаздыванию δ/2. Оба сигнала встроены в белый гауссов шум дисперсии 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, с n≥0. Задайте 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.

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

[~,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

Число точек DFT, указанное как положительное целое число. При указании 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) e − jstartm.

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

Rxy (m) =E{xn+myn∗}=E{xnyn−m∗},

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

Алгоритмы

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

Ссылки

[1] Оппенгейм, Алан В., Рональд В. Шефер и Джон Р. Бак. Дискретно-временная обработка сигналов. 2-я эд. река Верхнее Седло, Нью-Джерси: Прентис Холл, 1999.

[2] Rabiner, Лоуренс Р. и B. Золото. Теория и применение цифровой обработки сигналов. Энглвуд Клиффс, Нью-Джерси: Прентис-Холл, 1975, стр. 414-419.

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

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

Создание кода C/C + +
Создайте код C и C++ с помощью MATLAB ® Coder™

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