cpsd

Перекрестная степень спектральная плотность

Синтаксис

pxy = cpsd(x,y)
pxy = cpsd(x,y,window)
pxy = cpsd(x,y,window,noverlap)
pxy = cpsd(x,y,window,noverlap,nfft)
pxy = cpsd(___,'mimo')
[pxy,w] = cpsd(___)
[pxy,f] = cpsd(___,fs)
[pxy,w] = cpsd(x,y,window,noverlap,w)
[pxy,f] = cpsd(x,y,window,noverlap,f,fs)
[___] = cpsd(x,y,___,freqrange)
cpsd(___)

Описание

пример

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

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

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

  • Если x и y являются матрицами с одинаковым числом строк, но различные количества столбцов, то cpsd возвращает 3D массив, 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(___) без выходных аргументов строит перекрестную степень спектральная оценка плотности в окне текущей фигуры.

Примеры

свернуть все

Сгенерируйте два цветных шумовых сигнала и постройте их перекрестную степень спектральная плотность. Задайте длину 1 024 БПФ и треугольное окно с 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)

Сгенерируйте две двухканальных синусоиды, выбранные на уровне 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 выборок перекрытия между смежными сегментами и точками ДПФ 20:48. Используйте встроенную функциональность cpsd, чтобы построить результат.

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

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

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

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

Когда названо опцией 'mimo', cpsd возвращает 3D массив, содержащий перекрестную степень спектральные оценки плотности для всех комбинаций входных столбцов. Оценка второго канала 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)

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

[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')

Сгенерируйте два 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')

Повторите вычисление с 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')

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

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

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

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

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

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

% To hear, type soundsc(mys,fs)

Вычислите перекрестную степень спектральная плотность поврежденного сигнала и ссылочных сигналов. Окно сигналы с помощью окна Kaiser с 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

Цифра в поврежденном сигнале имеет спектр с самым высоким 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 оба задают окно Hann длины N + 1.

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

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

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

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

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

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

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

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

свернуть все

Перекрестная степень спектральная плотность, возвращенная как вектор, матрица или 3D массив.

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

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

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

  • Если pxy сосредоточен DC, 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] Rabiner, Лоуренс Р. и Б. Голд. Теория и Приложение Цифровой обработки сигналов. Englewood Cliffs, NJ: Prentice Hall, 1975, стр 414–419.

[2] Валлийцы, Питер Д. “Использование Быстрого преобразования Фурье для Оценки Спектров мощности: Метод На основе Усреднения во времени По Коротким, Измененным Периодограммам”. IEEE® Transactions на Аудио и Электроакустике, издании AU-15, июнь 1967, стр 70–73.

[3] Оппенхейм, Алан V, Рональд В. Шафер и Джон Р. Бак. Обработка сигналов дискретного времени. 2-й Эд. Верхний Сэддл-Ривер, NJ: Prentice Hall, 1999.

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

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

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