cqt

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

Описание

пример

cfs = cqt(x) возвращает преобразование constant-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. The kпервый элемент fshifts - сдвиг частоты в интервалах ДПФ между ((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, в бункерах ДПФ частотных интервалов, 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. Поскольку частоты DC и Nyquist не являются представителями геометрической последовательности центральных частот, но включены в вектор частот, исключить их из графика.

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.

В преобразовании constant-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

Загрузите аудиосигнал. Постройте график преобразования constant-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.

Тип выполняемого преобразования constant-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 соответствует частоте Найквиста. Количество столбцов, или скачков, соответствует самой большой центральной частоте полосы пропускания, которая обычно встречается на одно гнездо частоты ниже или выше интервала Nyquist.

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

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

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

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

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

  • Если 'TransformType' задается как 'sparse', cfs - массив ячеек с количеством элементов, равным количеству частот полосы пропускания. Каждый элемент массива ячеек, cfs, является вектором или матрицей с количеством строк, равным значению полосы пропускания в интервалах ДПФ, 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 является действительным вектором. The kпервый элемент fshifts - сдвиг частоты в интервалах ДПФ между ((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}и так далее.

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

Алгоритмы

свернуть все

Нестационарные системы координат Габора

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

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

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

Ссылки

[1] Holighaus, N., M. Dörfler, G. A. Velasco, and T. Grill. «среда для инвертируемых преобразований Q в реальном времени». Транзакции IEEE по обработке звука, речи и языка. Том 21, № 4, 2013, с. 775-785.

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

[3] Schörkhuber, C., A. Klapuri, N. Holighaus, and M. Dörfler. Matlab Toolbox for Effective Perfect Reconstruction Time-Frequency Transforms with Log-Frequency Resolution (неопр.) (недоступная ссылка). Представлен на 53-й Международной конференции AES по семантическому аудио. Лондон, Великобритания: 2014.

[4] Пруша, З., П. Л. Сёндергаард, Н. Холигхаус, К. Висмейр, и П. Балаж. Large Частотно-временной Анализ Toolbox 2.0. Sound, Music, and Motion, Lecture Notes in Computer Science 2014, стр. 419-442.

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

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