xspectrogram

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

Синтаксис

s = xspectrogram(x,y)
s = xspectrogram(x,y,window)
s = xspectrogram(x,y,window,noverlap)
s = xspectrogram(x,y,window,noverlap,nfft)
[s,w,t] = xspectrogram(___)
[s,f,t] = xspectrogram(___,fs)
[s,w,t] = xspectrogram(x,y,window,noverlap,w)
[s,f,t] = xspectrogram(x,y,window,noverlap,f,fs)
[___,c] = xspectrogram(___)
[___] = xspectrogram(___,freqrange)
[___] = xspectrogram(___,'MinThreshold',thresh)
[___] = xspectrogram(___,spectrumtype)
xspectrogram(___)
xspectrogram(___,freqloc)

Описание

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(___,'MinThreshold',thresh) обнуляет те элементы s, таким образом что 10 log10 (s) ≤ thresh. Задайте thresh в децибелах.

[___] = 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 выборок перекрытия между смежными сегментами и продолжительность ДПФ 1 024 выборок.

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

Измените второй щебет так, чтобы частота повысилась с 50 кГц до 350 кГц во время измерения. Используйте окно Kaiser с 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')

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

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

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

  • Второй сигнал является записью той же розеточной речи, говоря "справедливость реформы".

Постройте два сигнала. Сместите второй сигнал вертикально, таким образом, оба видимы.

load(fullfile(matlabroot,'examples','signal','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"')

Вычислите перекрестную спектрограмму двух сигналов. Разделите сигналы на сегменты с 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

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

Сгенерируйте два квадратичных щебета, каждый выбранный на уровне 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 выборок перекрытия между смежными сегментами. Окно каждый сегмент с помощью окна Kaiser с форм-фактором β = 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')

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

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

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

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

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

mean(pshft)
ans = -23.0000

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

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 выборками перекрытия между смежными сегментами. Используйте окно Kaiser с форм-фактором β = 30 к окну сегменты. Используйте количество по умолчанию точек ДПФ. Сосредоточьте перекрестную спектрограмму на нулевой частоте.

nwin = 256;

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

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

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

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

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

Задайте каждую последовательность, чтобы быть 4 096 выборками долго.

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])

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

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

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

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

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

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

свернуть все

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

Пример: 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 оба задают окно Hann длины 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 = 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, 2π), рад/выборка. Если вы задаете fs, то интервал [0, fs), циклы/единица времени.

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

Перекрестное масштабирование спектра мощности, заданное как 'psd' или 'power'.

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

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

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

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

  • 'xaxis' — Частота отображений на оси X и время на оси Y.

  • 'yaxis' — Частота отображений на оси Y и время на оси X.

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

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

свернуть все

Перекрестная спектрограмма, возвращенная как матрица. Увеличения времени через столбцы 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] Оппенхейм, Алан V, Рональд В. Шафер и Джон Р. Бак. Обработка сигналов дискретного времени. 2-й Эд. Верхний Сэддл-Ривер, NJ: Prentice Hall, 1999.

[2] Mitra, цифровая обработка сигналов Сэнджита К.: компьютерный подход. 2-й Эд. Нью-Йорк: McGraw-Hill, 2001.

Смотрите также

| |

Введенный в R2017a