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

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

Измените второй щебет так, чтобы частота повысилась с 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')

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

Загрузите файл, содержащий два речевых сигнала, произведенные на уровне 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"')

Вычислите перекрестную спектрограмму двух сигналов. Разделите сигналы на сегменты с 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 выборок перекрытия между смежными сегментами. Окно каждый сегмент с помощью окна Кайзера с масштабным фактором β = 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 выборками перекрытия между смежными сегментами. Используйте окно Кайзера с масштабным фактором β = 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 = длина (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 log10 (s) ≤ thresh.

Выведите измерение времени в виде разделенной запятой пары, состоящей из OutputTimeDimension и acrosscolumns или downrows. Установите это значение к downrows, если вы хотите измерение времени s, psФК , и tc вниз строки и размерность частоты вдоль столбцов. Установите это значение к acrosscolumns, если вы хотите измерение времени s, psФК , и 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] Mitra, цифровая обработка сигналов Сэнджита К.: компьютерный подход. 2-й Эд. Нью-Йорк: McGraw-Hill, 2001.

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

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

Введенный в R2017a