exponenta event banner

cqt

Постоянное - Q нестационарное преобразование Габора

Описание

пример

cfs = cqt(x) возвращает преобразование константы-Q (CQT), cfs, входного сигнала x. Входной сигнал должен иметь не менее четырех выборок.

  • Если x является вектором, то cqt возвращает матрицу, соответствующую CQT.

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

пример

[cfs,f] = cqt(x) возвращает приблизительные центральные частоты полосы пропускания, f, соответствующие строкам cfs. Частоты упорядочены от 0 до 1 и находятся в циклах/выборке.

[cfs,f,g,fshifts] = cqt(x) возвращает кадры Габора, g, используемый при анализе x и сдвиги частоты, fshifts, в дискретных ячейках преобразования Фурье (DFT) между полосами пропускания в строках cfs.

cfs, g, и fshifts являются необходимыми входами для инверсии CQT с icqt.

[cfs,f,g,fshifts,fintervals] = cqt(x) возвращает частотные интервалы, fintervals, соответствующие строкам cfs. k-й элемент fshifts - сдвиг частоты в ячейках DFT между ((k-1) mod N) и (k mod N) элемент fintervals с k = 0,1,2,...,N-1 где N - количество сдвигов частоты. Поскольку MATLAB ® индексирует от 1 ,fshifts(1) содержит сдвиг частоты между fintervals{end} и fintervals{1}, fshifts(2) содержит сдвиг частоты между fintervals{1} и fintervals{2}и так далее.

[cfs,f,g,fshifts,fintervals,bw] = cqt(x) возвращает полосу пропускания, bw, в ячейках DFT частотных интервалов, fintervals.

пример

[___] = cqt(___,Name,Value) возвращает CQT с дополнительными опциями, указанными одним или несколькими Name,Value пары аргументов, используя любой из предшествующих синтаксисов.

пример

cqt(___) без выходных аргументов отображает CQT на текущем рисунке. Печать поддерживается только для векторных входов. Если входной сигнал является реальным и Fs частота дискретизации, CQT отображается в диапазоне [0,Fs/2]. Если сигнал сложный, CQT наносится на график в диапазоне [0,Fs).

Примечание

Для визуализации разреженного CQT коэффициенты должны быть интерполированы. Когда происходит интерполяция, график может иметь значительное размазывание и быть трудным для интерпретации. При необходимости печати CQT рекомендуется использовать значение по умолчанию. TransformType стоимость 'full'.

Примеры

свернуть все

Загрузите сигнал и получите преобразование константы-Q.

load noisdopp
cfs = cqt(noisdopp);

Загрузите действительный сигнал и получите преобразование константы-Q. Верните приблизительные центральные частоты полосы пропускания.

load handel
[cfs,f] = cqt(y);

Постройте график в логарифмическом масштабе центральных частот полосы пропускания через частоту Найквиста.

lfreq = length(f);
nyquistBin = floor(lfreq/2)+1;
plot(f(1:nyquistBin))
title('Bandpass Center Frequencies')
grid on
set(gca,'yscale','log')

Figure contains an axes. The axes with title Bandpass Center Frequencies contains an object of type line.

Чтобы подтвердить, что отношения последовательных пар частот постоянны, постройте график отношений. С тех пор cqt использует 12 ячеек на октаву по умолчанию, отношение должно быть равно 21/12. Поскольку частоты постоянного тока и Найквиста не являются членами геометрической последовательности центральных частот, но включены в частотный вектор, исключите их из графика.

figure
plot(f(3:nyquistBin-1)./f(2:nyquistBin-2))
grid on
title(['Ratio: ',num2str(2^(1/12))])

Figure contains an axes. The axes with title Ratio: 1.0595 contains an object of type line.

Получить минимально избыточное преобразование константы-Q звукового сигнала. В качестве прототипа кадров Габора используйте окно Блэкмана-Харриса.

load handel
df = Fs/numel(y);
[cfs,f,g,fshifts,fintervals,bw] = cqt(y,'SamplingFrequency',Fs,'TransformType',"sparse",'Window',"blackmanharris");

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

lf = length(f);
ind = floor(lf/2)+1;
gFrame = fftshift(g{ind});
fvec = f(ind-1):df:f(ind+1)-df;
plot(fvec,gFrame)
xlabel('Frequency (Hz)')
grid on
title({['Gabor Frame - Freq: ',num2str(f(ind)),' Hz'];['Bandwidth ',num2str(bw(ind)*Fs/numel(y)),' Hz']})

Figure contains an axes. The axes with title Gabor Frame - Freq: 4096 Hz Bandwidth 412.3283 Hz contains an object of type line.

В преобразовании константы-Q кадры Габора применяются к дискретному преобразованию Фурье входного сигнала, и выполняется обратное дискретное преобразование Фурье. K-й кадр Габора применяется к k-му частотному интервалу, указанному в fintervals. Возьмите дискретное преобразование Фурье сигнала и постройте график его амплитудного спектра. Использовать fintervals для указания, над какими коэффициентами Фурье применяется кадр Габора, связанный с частотой Найквиста.

yDFT = fft(y);
lyDFT = length(yDFT);
plot(Fs*(0:lyDFT-1)/lyDFT,abs(yDFT))
grid on
fIntervalGabor = fintervals{ind};
mx = max(abs(yDFT));
hold on
plot([df*fIntervalGabor(1) df*fIntervalGabor(1)],[0 mx],'r-','LineWidth',2)
plot([df*fIntervalGabor(end) df*fIntervalGabor(end)],[0 mx],'r-','LineWidth',2)
str = sprintf('Gabor Frame Interval (Hz): [%3.2f, %3.2f]',df*fIntervalGabor(1),df*fIntervalGabor(end));
title(str)

Figure contains an axes. The axes with title Gabor Frame Interval (Hz): [3889.89, 4302.11] contains 3 objects of type line.

Окнайте коэффициенты Фурье в интервале с кадром Габора и выполните обратное дискретное преобразование Фурье. Нормализуйте результат и сравните с вычисленными коэффициентами константы-Q и подтвердите, что они равны.

lGframe = length(gFrame);
indx = 1:lGframe;
indx = fftshift(indx);
winDFT(indx) = yDFT(fIntervalGabor).*fftshift(gFrame(indx));
cqCoefs = ifft(winDFT);
cqCoefs = (2*lGframe/length(y))*cqCoefs;
max(abs(cqCoefs(:)-cfs{ind}(:)))
ans = 0

Загрузите звуковой сигнал. Постройте график преобразования константы-Q (CQT), используя максимально избыточную версию преобразования и используя 12 бинов на октаву.

load handel
cqt(y,'SamplingFrequency',Fs)

Figure contains an axes. The axes with title Constant Q-Transform contains an object of type surface.

Выполните CQT того же сигнала, используя 48 ячеек на октаву. Установите диапазон частот, в котором CQT имеет логарифмическую частотную характеристику, равным минимально допустимой частоте, равной 2 кГц.

minFreq = Fs/length(y);
maxFreq = 2000;
figure
cqt(y,'SamplingFrequency',Fs,'BinsPerOctave',48,'FrequencyLimits',[minFreq maxFreq])

Figure contains an axes. The axes with title Constant Q-Transform contains an object of type surface.

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

свернуть все

Входной сигнал, определяемый как действительный или комплексный вектор или матрица. x должно быть не менее четырех образцов.

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

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

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

Пример: 'SamplingFrequency',20,'BinsPerOctave',15

Частота дискретизации, в Гц, указанная как разделенная запятыми пара, состоящая из 'SamplingFrequency' и положительный скаляр.

Количество ячеек на октаву для использования в CQT, указанное как положительное целое число от 1 до 96.

Тип выполняемого преобразования константы-Q, определяемый как разделенная запятыми пара, состоящая из 'TransformType' и 'full' или 'sparse'. Разреженное преобразование является минимально избыточной версией преобразования константы-Q.

Пределы частоты, в которых CQT имеет логарифмическую частотную характеристику с заданным числом частотных бинов на октаву, заданную как пара, разделенная запятыми 'FrequencyLimits' и двухэлементный действительный вектор.

  • Первый элемент должен быть больше или равен Fs/N, где Fs - частота выборки и N - длина сигнала.

  • Второй элемент должен быть строго меньше частоты Найквиста.

Окно для использования в качестве функции прототипа для нестационарных кадров Габора, указанное как 'hann', 'hamming', 'blackmanharris', 'itersine', или 'bartlett'. Эти компактно поддерживающие функции определяются по частоте. Для нормированных частот они определяются на интервале (-1/2,1/2). Если указана частота выборки, Fs, они определены в интервале (-Fs/2,Fs/2).

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

свернуть все

Преобразование константы-Q, возвращаемое как матрица, многомерный массив, массив ячеек или структурный массив.

  • Если 'TransformType' указывается как 'full' без 'FrequencyLimits', cfs является матрицей или многомерным массивом.

    • Если x является вектором, то cqt возвращает матрицу, соответствующую CQT.

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

    Массив, cfs, соответствует максимально избыточной версии CQT. Каждая строка страниц cfs соответствует полосам пропускания с нормированными центральными частотами (циклами/выборкой), логарифмически разнесенными между 0 и 1. Нормализованная частота 1/2 соответствует частоте Найквиста. Количество столбцов, или скачков, соответствует наибольшей центральной частоте полосы пропускания, которая обычно возникает на один частотный бин ниже или выше бина Найквиста.

  • Если 'TransformType' указывается как 'full' и задаются пределы частоты, cfs возвращается в виде структурного массива со следующими четырьмя полями.

    • c - матрица коэффициентов многомерного массива для частот в заданных частотных пределах. Это включает как положительную, так и «отрицательную» частоты.

    • DCcfs - вектор коэффициента или матрица для полосы пропускания от 0 до нижнего предела частоты.

    • Nyquistcfs - вектор коэффициента или матрица для полосы пропускания от верхнего предела частоты до Nyquist.

    • NyquistBin - ячейка DFT, соответствующая частоте Найквиста. Это поле используется при инвертировании CQT.

  • Если 'TransformType' указывается как 'sparse', cfs - массив ячеек с числом элементов, равным числу полосовых частот. Каждый элемент массива ячеек, cfs, - вектор или матрица с числом строк, равным значению полосы пропускания в ячейках DFT, bw.

cfs, g, и fshifts являются необходимыми входами для инверсии CQT с icqt.

Приблизительные центральные частоты полосы пропускания, соответствующие рядам cfs, возвращенный как действительный вектор. Частоты упорядочены от 0 до 1 и находятся в циклах/выборке. Если указано 'SamplingFrequency', то f находится в Герце.

Габорские кадры, используемые при анализе x, возвращенный в виде клеточного массива вещественных векторов. Каждый вектор в g соответствует строке cfs.

cfs, g, и fshifts являются необходимыми входами для инверсии CQT с icqt.

Частотные сдвиги в дискретных ячейках преобразования Фурье, возвращаемые как действительный вектор. Сдвиги находятся между полосами пропускания в рядах cfs.

cfs, g, и fshifts являются необходимыми входами для инверсии CQT с icqt.

Частотные интервалы, соответствующие строкам cfs, возвращено в виде массива ячеек. Каждый элемент в fintervals - действительный вектор. k-й элемент fshifts - сдвиг частоты в ячейках DFT между ((k-1) mod N) и (k mod N) элемент fintervals с k = 0,1,2,...,N-1 где N - количество сдвигов частоты. Поскольку MATLAB индексирует от 1, fshifts(1) содержит сдвиг частоты между fintervals{end} и fintervals{1}, fshifts(2) содержит сдвиг частоты между fintervals{1} и fintervals{2}и так далее.

Полосы пропускания в ячейках DFT частотных интервалов, fintervals, возвращенный как действительный вектор.

Алгоритмы

свернуть все

Нестационарные габоровые рамки

Теория нестационарных кадров Габора (NSG) для частотно-адаптивного анализа и эффективные алгоритмы для анализа и синтеза с использованием кадров NSG обусловлены Dörfler, Holighaus, Grill и Velasco [1], [2]. Алгоритмы, используемые в CQT и ICQT, были разработаны Dörfler, Holighaus, Grill и Velasco и описаны в [1], [2]. В [3] Шёркхубер, Клапури, Холигаус и Дёрфлер разрабатывают и предоставляют алгоритмы для фазово-скорректированного CQT-преобразования, которое соответствует коэффициентам CQT, которые будут получены наивным свертыванием. Инструментарий анализа больших временных частот (https://github.com/ltfat) предоставляет обширный набор алгоритмов для нестационарных кадров Габора [4].

Идеальная реконструкция

Для достижения идеального свойства реконструкции анализа константы-Q с нестационарными кадрами Габора, cqt внутренне добавляет нулевую частоту (DC) и добавляет частоту Найквиста к интервалу частот. Отрицательные частоты являются зеркальными версиями положительных центральных частот и полос пропускания

Ссылки

[1] Холигауз, Н., М. Дёрфлер, Г. А. Веласко и Т. Гриль. «Структура для обратимых преобразований константы-Q в реальном времени». Транзакции IEEE при обработке звука, речи и языка. Том 21, № 4, 2013, стр. 775-785.

[2] Веласко, Г. А., Н. Холигаус, М. Дёрфлер и Т. Гриль. «Построение обратимого преобразования константы-Q с нестационарными кадрами Габора». В материалах 14-й Международной конференции по цифровым аудиоэффектам (DAFx-11). Париж, Франция: 2011.

[3] Шёркхубер, К., А. Клапури, Н. Холигауз и М. Дёрфлер. «Набор инструментов Matlab для эффективного и совершенного преобразования частоты времени реконструкции с логарифмическим разрешением». Представлен 53-й Международной конференции AES по семантическому аудио. Лондон, Великобритания: 2014.

[4] Пруша, З., П. Л. Сёндергаард, Н. Холигауз, К. Висмейр и П. Балаз. Панель инструментов анализа больших временных частот 2.0. Звук, музыка и движение, лекционные заметки по информатике 2014, стр. 419-442.

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

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