xspectrogram

Перекрестная спектрограмма с использованием кратковременных преобразований Фурье

Описание

s = xspectrogram(x,y) возвращает перекрестную спектрограмму сигналов, заданных x и y. Входные сигналы должны быть векторами с таким же количеством элементов. Каждый столбец s содержит оценку краткосрочного локализованного частотного содержимого, общего для x и y.

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

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

пример

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

[s,w,t] = xspectrogram(___) возвращает вектор нормированных частот, wи вектор моментов времени, t, при котором вычисляется поперечная спектрограмма. Этот синтаксис может включать любую комбинацию входных параметров из предыдущих синтаксисов.

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

[s,w,t] = xspectrogram(x,y,window,noverlap,w) возвращает перекрестную спектрограмму на нормированных частотах, заданных в w.

пример

[s,f,t] = xspectrogram(x,y,window,noverlap,f,fs) возвращает перекрестную спектрограмму на частотах, заданных в f.

пример

[___,c] = xspectrogram(___) также возвращает матрицу, c, содержащую оценку изменяющегося во времени комплексного перекрестного спектра входных сигналов. Перекрестная спектрограмма, s, - величина c.

пример

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

пример

[___] = xspectrogram(___,Name,Value) задает дополнительные опции, используя аргументы пары "имя-значение". Опции включают минимальный порог и временную размерность вывода.

[___] = xspectrogram(___,spectrumtype) возвращает краткосрочные оценки взаимной спектральной плотности мощности, если spectrumtype задается как 'psd' и возвращает краткосрочные оценки степени спектра, если spectrumtype задается как 'power'.

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

xspectrogram(___,freqloc) задает ось, на которой будет строиться график частоты. Задайте freqloc либо как 'xaxis' или 'yaxis'.

Примеры

свернуть все

Сгенерируйте два линейных щебета, дискретизированных на 1 МГц в течение 10 миллисекунд.

  • Первый щебет имеет начальную частоту 150 кГц, которая увеличивается до 350 кГц к концу измерения.

  • Второй щебет имеет начальную частоту 200 кГц, которая увеличивается до 300 кГц к концу измерения.

Добавьте белый Гауссов шум таким образом, чтобы отношение сигнал/шум составляло 40 дБ.

nSamp = 10000;
Fs = 1000e3;
SNR = 40;
t = (0:nSamp-1)'/Fs;

x1 = chirp(t,150e3,t(end),350e3);
x1 = x1+randn(size(x1))*std(x1)/db2mag(SNR);

x2 = chirp(t,200e3,t(end),300e3);
x2 = x2+randn(size(x2))*std(x2)/db2mag(SNR);

Вычислите и постройте график перекрестной спектрограммы двух щебетаний. Разделите сигналы на 200 сегментов и окончите каждый сегмент с Окном Хэмминга. Укажите 80 выборки перекрытия между смежными сегментами и длину ДПФ 1024 выборок.

xspectrogram(x1,x2,hamming(200),80,1024,Fs,'yaxis')

Figure contains an axes. The axes contains an object of type image.

Измените второй щебет так, чтобы частота поднималась с 50 кГц до 350 кГц во время измерения. Используйте 500-образцевое окно Кайзера с масштабным фактором β=5 для окна сегментов. Укажите 450 выборки перекрытия и длину ДПФ 256. Вычислите и постройте график перекрестной спектрограммы.

x2 = chirp(t,50e3,t(end),350e3);
x2 = x2+randn(size(x2))*std(x2)/db2mag(SNR);

xspectrogram(x1,x2,kaiser(500,5),450,256,Fs,'yaxis')

Figure contains an axes. The axes contains an object of type image.

В обоих случаях функция подсвечивает содержимое частоты, которое два сигнала имеют в общем.

Загрузите файл, содержащий два речевых сигнала, дискретизированных с частотой 44 100 Гц.

  • Первый сигнал является записью женского голоса, говорящего «функция преобразования».

  • Второй сигнал - запись того же женского голоса, говорящего «реформируйте правосудие».

Постройте график двух сигналов. Смещите второй сигнал вертикально, чтобы оба были видны.

load('voice.mat')

% To hear, type soundsc(transform,fs),pause(2),soundsc(reform,fs)

t = (0:length(reform)-1)/fs;

plot(t,transform,t,reform+0.3)
legend('"Transform function"','"Reform justice"')

Figure contains an axes. The axes contains 2 objects of type line. These objects represent "Transform function", "Reform justice".

Вычислите перекрестную спектрограмму двух сигналов. Разделите сигналы на 1000 сегментов и окончите их окном Хэмминга. Задайте 800 выборки перекрытия между смежными сегментами. Включать только частоты до 4 кГц.

nwin = 1000;
nvlp = 800;
fint = 0:4000;

[s,f,t] = xspectrogram(transform,reform,hamming(nwin),nvlp,fint,fs);

mesh(t,f,20*log10(s))
view(2)
axis tight

Figure contains an axes. The axes contains an object of type surface.

Перекрестная спектрограмма подсвечивает временные интервалы, где сигналы имеют больше общее содержимое частоты. Особенно заметна слоговая «форма».

Сгенерируйте два квадратичных щебета, каждый из которых дискретизируется с частотой дискретизации 1 кГц в течение 2 секунд. Обе щебета имеют начальную частоту 100 Гц, которая увеличивается до 200 Гц в середине измерения. Второй щебет имеет различие фаз 23 ° по сравнению с первым.

fs = 1e3;
t = 0:1/fs:2;

y1 = chirp(t,100,1,200,'quadratic',0);
y2 = chirp(t,100,1,200,'quadratic',23);

Вычислите комплексную перекрестную спектрограмму щебета, чтобы извлечь сдвиг фазы между ними. Разделите сигналы на 128 сегментов с дискретизацией. Задайте 120 выборки перекрытия между смежными сегментами. Окно каждого сегмента с использованием окна Кайзера с масштабным фактором β = 18 и задайте длину ДПФ из 128 выборок. Используйте функции графического изображения xspectrogram для отображения перекрестной спектрограммы.

[~,f,xt,c] = xspectrogram(y1,y2,kaiser(128,18),120,128,fs);

xspectrogram(y1,y2,kaiser(128,18),120,128,fs,'yaxis')

Figure contains an axes. The axes contains an object of type image.

Извлеките и отобразите максимальный по энергии частотно-временной гребень поперечной спектрограммы.

[tfr,~,lridge] = tfridge(c,f);

hold on
plot(xt,tfr,'k','linewidth',2)
hold off

Figure contains an axes. The axes contains 2 objects of type image, line.

Сдвиг фазы является отношением мнимой части к действительной части изменяющегося во времени поперечного спектра вдоль хребта. Вычислите сдвиг фазы и выразите его в степенях. Отобразите его среднее значение.

pshft = angle(c(lridge))*180/pi;

mean(pshft)
ans = -23.0000

Сгенерируйте два сигнала, каждый из которых дискретизирован на частоте 3 кГц в течение 1 секунды. Первый сигнал является квадратичным щебетом, частота которого увеличивается с 300 Гц до 1300 Гц во время измерения. Щебет встроен в белый Гауссов шум. Второй сигнал, также встроенный в белый шум, является щебетом с синусоидально изменяющимся содержимым частоты.

fs = 3000;
t = 0:1/fs:1-1/fs;

x1 = chirp(t,300,t(end),1300,'quadratic')+randn(size(t))/100;

x2 = exp(2j*pi*100*cos(2*pi*2*t))+randn(size(t))/100;

Вычислите и постройте график перекрестной спектрограммы двух сигналов. Разделите сигналы на 256 сегментов с 255 выборками перекрытия между смежными сегментами. Используйте окно Кайзера с масштабным фактором β = 30, чтобы открыть сегменты. Используйте количество точек ДПФ по умолчанию. Центрируйте поперечную спектрограмму на нулевой частоте.

nwin = 256;

xspectrogram(x1,x2,kaiser(nwin,30),nwin-1,[],fs,'centered','yaxis')

Figure contains an axes. The axes contains an object of type image.

Вычислите спектр степени вместо степени спектральной плотности. Установите таким образом, чтобы нуль значения меньше -40 дБ. Центрируйте график на частоте Найквиста.

xspectrogram(x1,x2,kaiser(nwin,30),nwin-1,[],fs, ...
    'power','MinThreshold',-40,'yaxis')
title('Cross-Spectrogram of Quadratic Chirp and Complex Chirp')

Figure contains an axes. The axes with title Cross-Spectrogram of Quadratic Chirp and Complex Chirp contains an object of type image.

Пороговое значение дополнительно выделяет области общей частоты.

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

Задайте каждую последовательность длиной 4096 образцов.

N = 4096;

Чтобы создать первую последовательность, сгенерируйте выпуклый квадратичный щебет, встроенный в белый Гауссов шум и полосно-пропускающий фильтр его.

  • Щебет имеет начальную нормированную частоту 0,1, которая увеличивается до 0,8, к концу измерения.

  • Фильтр 16-го порядка пропускает нормированные частоты между 0,2, и 0,4, рад/выборка и имеет затухание в полосе задерживания 60 дБ.

rx = chirp(0:N-1,0.1/2,N,0.8/2,'quadratic',[],'convex')'+randn(N,1)/100;
dx = designfilt('bandpassiir','FilterOrder',16, ...
    'StopbandFrequency1',0.2,'StopbandFrequency2',0.4, ...
    'StopbandAttenuation',60);
x = filter(dx,rx);

Чтобы создать вторую последовательность, сгенерируйте линейный щебет, встроенный в белый Гауссов шум, и полосно-заграждающий фильтр.

  • Щебет имеет начальную нормированную частоту 0 .9, которая уменьшается до 0 .1, к концу измерения.

  • Фильтр 16-го порядка останавливает нормированные частоты между 0.6, и 0.8, и имеет рад/отсчет 1 дБ неравномерности в полосе пропускания.

ry = chirp(0:N-1,0.9/2,N,0.1/2)'+randn(N,1)/100;
dy = designfilt('bandstopiir','FilterOrder',16, ...
    'PassbandFrequency1',0.6,'PassbandFrequency2',0.8, ...
    'PassbandRipple',1);
y = filter(dy,ry);

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

plot([x y+2])

Figure contains an axes. The axes contains 2 objects of type line.

Вычислите и постройте график перекрестной спектрограммы x и y. Используйте 512-образцевое окно Хэмминга. Задайте 500 выборки перекрытия между смежными сегментами и 2048 точками ДПФ.

xspectrogram(x,y,hamming(512),500,2048,'yaxis')

Figure contains an axes. The axes contains an object of type image.

Установите для нуля значений перекрестной спектрограммы, меньших -50 дБ.

xspectrogram(x,y,hamming(512),500,2048,'MinThreshold',-50,'yaxis')

Figure contains an axes. The axes contains an object of type image.

Спектрограмма показывает частотные области, которые усиливаются или подавляются фильтрами.

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

свернуть все

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

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

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

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

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

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

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

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

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

Количество точек ДПФ, заданное как положительный целочисленный скаляр. Если вы задаете nfft как пустой, тогда xspectrogram устанавливает максимальную длину ДПФ (256,2p), где p = ⌈ log2 Nw ⌉ и

  • Nw = window если window является скаляром.

  • Nw = длина (window) если window является вектором.

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

Нормированные частоты, заданные как вектор. w должен иметь не менее двух элементов. Нормированные частоты указаны в рад/отсчет.

Пример: pi./[2 4]

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

Частоты, заданные как вектор. f должен иметь не менее двух элементов. Область модулей f заданы частотой дискретизации, fs.

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

Частота дискретизации, заданная как положительная скалярная величина. Частота дискретизации является количеством выборок в единицу времени. Если модулем времени является секунды, то частота дискретизации находится в Гц.

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

Частотная область значений для оценки поперечного спектра, заданный как 'onesided', 'twosided', или 'centered'. Для реальных сигналов, значение по умолчанию является 'onesided'. Для комплексных сигналов по умолчанию является 'twosided', и определение 'onesided' приводит к ошибке.

  • 'onesided' - Возвращает одностороннюю поперечную спектрограмму действительного входного сигнала. Если nfft даже, тогда s имеет nfft/ 2 + 1 строк и вычисляется через интервал [0 , π] рад/выборка. Если nfft нечетно, тогда s имеет (nfft + 1 )/2 строки и интервал [0 , π) рад/выборка. Если вы задаете fs, затем интервалы соответственно [0, fs/ 2] циклов/единичное время и [0 , fs/ 2) циклы/единичное время.

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

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

Масштабирование поперечного спектра степени, заданное как 'psd' или 'power'.

  • Опускание spectrumtype, или определение 'psd', возвращает взаимную спектральную плотность мощности.

  • Определение 'power' масштабирует каждую оценку взаимной спектральной плотности мощности по полосе пропускания разрешения, которая зависит от эквивалентной шумовой полосы окна и длительности сегмента. Результатом является оценка степени на каждой частоте.

Ось отображения частоты, заданная как 'xaxis' или 'yaxis'.

  • 'xaxis' - отображения частоты на оси X и времени на оси Y.

  • 'yaxis' - отображения частоты на оси Y и времени на оси X.

Этот аргумент игнорируется, если вы вызываете xspectrogram с выходными аргументами.

Аргументы в виде пар имя-значение

Задайте необязательные разделенные разделенными запятой парами Name,Value аргументы. Name - имя аргумента и Value - соответствующее значение. Name должны находиться внутри кавычек. Можно задать несколько аргументов в виде пар имен и значений в любом порядке Name1,Value1,...,NameN,ValueN.

Пример: xspectrogram(x,100,'OutputTimeDimension','downrows') делит x и y в сегменты длины 100 и окна каждого сегмента с окном Хэмминга этой длины. Выход спектрограммы имеет временную размерность вниз по строкам.

Порог, заданное как разделенная разделенными запятой парами, состоящая из MinThreshold и действительный скаляр, выраженный в децибелах. xspectrogram устанавливает, чтобы нуль эти элементы s таким образом 10 лог10 (s)  ≤ <reservedrangesplaceholder0>.

Выходная временная размерность, заданный как разделенная разделенными запятой парами, состоящая из OutputTimeDimension и acrosscolumns или downrows. Установите это значение равным downrows, если вам нужна временная размерность s, ps, fc, и tc вниз по строкам и размерности частоты вдоль столбцов. Установите это значение равным acrosscolumns, если вам нужна временная размерность s, ps, fc, и tc поперек столбцов и размерность частоты вдоль строк. Этот вход игнорируется, если функция вызывается без выходных аргументов.

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

свернуть все

Перекрестная спектрограмма, возвращенная как матрица. Время увеличивается по столбцам s и частота увеличивается вниз по строкам, начиная с нуля.

  • Если входные сигналы x и y имеют длину N, тогда s имеет k столбцов, где:

    • k = ⌊ (N – noverlap) / (window – noverlap) ⌋, если window является скаляром.

    • k = ⌊ (N – noverlap)/( длина (window) – noverlap) ⌋, если window является вектором.

  • Если входные сигналы действительны и nfft даже, тогда s имеет (nfft/ 2 + 1) строки.

  • Если входные сигналы действительны и nfft нечетно, тогда s имеет (nfft + 1 )/2 строки.

  • Если входные сигналы комплексны, то s имеет nfft строки.

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

Нормированные частоты, возвращенные как вектор. w имеет длину, равную количеству строк s.

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

Момент времени, возвращенный как вектор. Значения времени в t соответствуют средней точке каждого сегмента, заданного с помощью window.

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

Циклические частоты, возвращенные как вектор. f имеет длину, равную количеству строк s.

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

Изменяющийся во времени комплексный перекрестный спектр, возвращенный как матрица. Перекрестная спектрограмма, s, - величина c.

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

Ссылки

[1] Митра, Санджит К. Цифровая обработка сигналов: компьютерный подход. 2nd Ed. New York: McGraw-Hill, 2001.

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

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

.
Введенный в R2017a