exponenta event banner

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 выборок перекрытия между соседними сегментами и длину DFT 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 выборок перекрытия и длину DFT 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.

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

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

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

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

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

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

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 точками DFT.

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

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

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

  • Nw = length(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, ) рад/выборка. При указании fs, то интервал равен [0, fs) циклов/единичного времени.

  • 'centered' - возвращает центрированную двустороннюю перекрестную спектрограмму для действительного или комплексного сигнала. s имеет nfft строк. Если nfft является четным, то s вычисляется по интервалу (-δδ] рад/выборка. Если nfft является нечетным, то s вычисляется по (-δδ) rad/sample. При указании 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 log10 (s) ≤ thresh.

Измерение времени вывода, указанное как пара, разделенная запятыми, состоящая из 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)/(length(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] Митра, Санджит К. Цифровая обработка сигналов: компьютерный подход. 2-й ред. Нью-Йорк: Макгроу-Хилл, 2001.

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

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

.
Представлен в R2017a