периодограмма

Степень периодограммы спектральная оценка плотности

Синтаксис

pxx = periodogram(x)
pxx = periodogram(x,window)
pxx = periodogram(x,window,nfft)
[pxx,w] = periodogram(___)
[pxx,f] = periodogram(___,fs)
[pxx,w] = periodogram(x,window,w)
[pxx,f] = periodogram(x,window,f,fs)
[___] = periodogram(x,window,___,freqrange)
[___,pxxc] = periodogram(___,'ConfidenceLevel',probability)
[rpxx,f] = periodogram(___,'reassigned')
[rpxx,f,pxx,fc] = periodogram(___,'reassigned')
[___] = periodogram(___,spectrumtype)
periodogram(___)

Описание

пример

pxx = periodogram(x) возвращает оценку степени спектральной плотности (PSD) периодограммы, pxx, входного сигнала, x, нашел использование прямоугольного окна. Когда x является вектором, он обработан как один канал. Когда x является матрицей, PSD вычисляется независимо для каждого столбца и хранится в соответствующем столбце pxx. Если x с действительным знаком, pxx является односторонней оценкой PSD. Если x с комплексным знаком, pxx является двухсторонней оценкой PSD. Число точек, nfft, в дискретном преобразовании Фурье (DFT) являются максимумом 256 или следующая степень двойки, больше, чем длина сигнала.

пример

pxx = periodogram(x,window) возвращает измененную периодограмму оценка PSD с помощью окна, window. window является вектором та же длина как x.

пример

pxx = periodogram(x,window,nfft) использование nfft указывает в дискретном преобразовании Фурье (DFT). Если nfft больше, чем длина сигнала, x дополнен нулем к длине nfft. Если nfft является меньше, чем длина сигнала, сигнал перенесен nfft по модулю и суммировал использование datawrap. Например, входной сигнал [1 2 3 4 5 6 7 8] с nfft равняется 4 результатам в периодограмме sum([1 5; 2 6; 3 7; 4 8],2).

[pxx,w] = periodogram(___) возвращает нормированный вектор частоты, w. Если pxx является односторонней периодограммой, w охватывает интервал [0, π], если nfft даже и [0, π), если nfft нечетен. Если pxx является двухсторонней периодограммой, w охватывает интервал [0,2π).

пример

[pxx,f] = periodogram(___,fs) возвращает вектор частоты, f, в циклах в единицу времени. Частота дискретизации, fs, является количеством выборок в единицу времени. Если модуль времени является секундами, то f находится в циклах/секунда (Гц). Для сигналов с действительным знаком f охватывает интервал [0, fs/2], когда nfft даже и [0, fs/2), когда nfft нечетен. Для сигналов с комплексным знаком f охватывает интервал [0, fs). fs должен быть четвертым входом к periodogram. Чтобы ввести частоту дискретизации и все еще использовать значения по умолчанию предыдущих дополнительных аргументов, задайте эти аргументы как пустые, [].

пример

[pxx,w] = periodogram(x,window,w) возвращает двухсторонние оценки периодограммы на нормированных частотах, заданных в векторе, w. w должен содержать по крайней мере два элемента, потому что в противном случае функция интерпретирует его как nfft.

пример

[pxx,f] = periodogram(x,window,f,fs) возвращает двухсторонние оценки периодограммы на частотах, заданных в векторе. Векторный f должен содержать по крайней мере два элемента, потому что в противном случае функция интерпретирует его как nfft. Частоты в f находятся в циклах в единицу времени. Частота дискретизации, fs, является количеством выборок в единицу времени. Если модуль времени является секундами, то f находится в циклах/секунда (Гц).

пример

[___] = periodogram(x,window,___,freqrange) возвращает периодограмму по частотному диапазону, заданному freqrange. Допустимые опции для freqrange: 'onesided', 'twosided' или 'centered'.

пример

[___,pxxc] = periodogram(___,'ConfidenceLevel',probability) возвращает probability × 100% доверительных интервалов для оценки PSD в pxxc.

[rpxx,f] = periodogram(___,'reassigned') переприсвоения каждый PSD оценивают к частоте, самой близкой к ее центру энергии. rpxx содержит сумму оценок, повторно присвоенных каждому элементу f.

пример

[rpxx,f,pxx,fc] = periodogram(___,'reassigned') также возвращает nonreassigned PSD оценки, pxx, и частоты центра энергии, fc. Если вы используете флаг 'reassigned', то вы не можете задать доверительный интервал probability.

пример

[___] = periodogram(___,spectrumtype) возвращает оценку PSD, если spectrumtype задан как 'psd' и возвращает спектр мощности, если spectrumtype задан как 'power'.

пример

periodogram(___) без выходных аргументов строит периодограмму оценка PSD в дБ на модульную частоту в окне текущей фигуры.

Примеры

свернуть все

Получите периодограмму входного сигнала, состоящего из синусоиды дискретного времени с угловой частотой π/4 рад/выборка с дополнением N(0,1) белый шум.

Создайте синусоиду с угловой частотой π/4 рад/выборка с дополнением N(0,1) белый шум. Сигнал является 320 выборками в длине. Получите периодограмму с помощью прямоугольного окна по умолчанию и длины ДПФ. Длина ДПФ является следующей степенью двойки, больше, чем длина сигнала или 512 точек. Поскольку сигнал с действительным знаком и имеет даже длину, периодограмма является односторонней и существуют точки 512/2+1.

n = 0:319;
x = cos(pi/4*n)+randn(size(n));
[pxx,w] = periodogram(x);
plot(w,10*log10(pxx))

Повторите график с помощью periodogram без выходных параметров.

periodogram(x)

Получите измененную периодограмму входного сигнала, состоящего из синусоиды дискретного времени с угловой частотой π/4 радианы/выборка с дополнением N(0,1) белый шум.

Создайте синусоиду с угловой частотой π/4 радианы/выборка с дополнением N(0,1) белый шум. Сигнал является 320 выборками в длине. Получите измененную периодограмму с помощью Окна Хэмминга и длины ДПФ по умолчанию. Длина ДПФ является следующей степенью двойки, больше, чем длина сигнала или 512 точек. Поскольку сигнал с действительным знаком и имеет даже длину, периодограмма является односторонней и существуют точки 512/2+1.

n = 0:319;
x = cos(pi/4*n)+randn(size(n));
periodogram(x,hamming(length(x)))

Получите периодограмму входного сигнала, состоящего из синусоиды дискретного времени с угловой частотой π/4 радианы/выборка с дополнением N(0,1) белый шум. Используйте длину ДПФ, равную длине сигнала.

Создайте синусоиду с угловой частотой π/4 радианы/выборка с дополнением N(0,1) белый шум. Сигнал является 320 выборками в длине. Получите периодограмму с помощью прямоугольного окна по умолчанию и длины ДПФ, равной длине сигнала. Поскольку сигнал с действительным знаком, односторонняя периодограмма возвращена по умолчанию с длиной, равной 320/2+1.

n = 0:319;
x = cos(pi/4*n)+randn(size(n));
nfft = length(x);
periodogram(x,[],nfft)

Получите периодограмму Волка (относительное солнечное пятно) данные о номере, выбираемые ежегодно между 1 700 и 1987.

Загрузите относительные данные о номере солнечного пятна. Получите периодограмму с помощью прямоугольного окна по умолчанию и количества точек ДПФ (512 в этом примере). Частота дискретизации для этих данных является 1 выборкой/год. Постройте периодограмму.

load sunspot.dat
relNums=sunspot(:,2);

[pxx,f] = periodogram(relNums,[],[],1);

plot(f,10*log10(pxx))
xlabel('Cycles/Year')
ylabel('dB / (Cycles/Year)')
title('Periodogram of Relative Sunspot Number Data')

Вы видите в предыдущей фигуре, что существует пик в периодограмме приблизительно в 0,1 циклах/год, которая указывает на период приблизительно 10 лет.

Получите периодограмму входного сигнала, состоящего из двух синусоид дискретного времени с угловые частоты π/4 и π/2 рад/выборка в дополнении N(0,1) белый шум. Получите двухсторонние оценки периодограммы в π/4 и π/2 рад/выборка. Сравните результат с односторонней периодограммой.

n = 0:319;
x = cos(pi/4*n)+0.5*sin(pi/2*n)+randn(size(n));

[pxx,w] = periodogram(x,[],[pi/4 pi/2]);
pxx
pxx = 1×2

   14.0589    2.8872

[pxx1,w1] = periodogram(x);
plot(w1/pi,pxx1,w/pi,2*pxx,'o')
legend('pxx1','2 * pxx')
xlabel('\omega / \pi')

Полученные значения периодограммы являются 1/2 значения в односторонней периодограмме. Когда вы оцениваете периодограмму в определенном наборе частот, вывод является двухсторонней оценкой.

Создайте сигнал, состоящий из двух синусоид с частотами 100 и 200 Гц в N (0,1) белый аддитивный шум. Частота дискретизации составляет 1 кГц. Получите двухстороннюю периодограмму на уровне 100 и 200 Гц.

fs = 1000;
t = 0:0.001:1-0.001;
x = cos(2*pi*100*t)+sin(2*pi*200*t)+randn(size(t));

freq = [100 200];
pxx = periodogram(x,[],freq,fs)
pxx = 1×2

    0.2647    0.2313

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

Создайте сигнал, состоящий из суперпозиции синусоид на 150 Гц и на 100 Гц в аддитивном белом N (0,1) шум. Амплитуда этих двух синусоид равняется 1. Частота дискретизации составляет 1 кГц.

fs = 1000;
t = 0:1/fs:1-1/fs;
x = cos(2*pi*100*t) + sin(2*pi*150*t) + randn(size(t));

Получите периодограмму оценка PSD с 95%-доверительными-границами. Постройте периодограмму наряду с доверительным интервалом и увеличьте масштаб видимой области частоты около 100 и 150 Гц.

[pxx,f,pxxc] = periodogram(x,rectwin(length(x)),length(x),fs,...
    'ConfidenceLevel',0.95);

plot(f,10*log10(pxx))
hold on
plot(f,10*log10(pxxc),'-.')

xlim([85 175])
xlabel('Hz')
ylabel('dB/Hz')
title('Periodogram with 95%-Confidence Bounds')

Более низкая доверительная граница в мгновенной близости 100 и 150 Гц значительно выше верхней доверительной границы вне близости 100 и 150 Гц.

Получите периодограмму синусоиды на 100 Гц в дополнении N(0,1) шум. Данные выбираются на уровне 1 кГц. Используйте опцию 'centered', чтобы получить сосредоточенную DC периодограмму и построить результат.

fs = 1000;
t = 0:0.001:1-0.001;
x = cos(2*pi*100*t)+randn(size(t));
periodogram(x,[],length(x),fs,'centered')

Сгенерируйте сигнал, который состоит из синусоиды на 200 Гц, встроенной в белый Гауссов шум. Сигнал выбирается на уровне 1 кГц в течение 1 секунды. Шум имеет отклонение 0,01 ². Сбросьте генератор случайных чисел для восстанавливаемых результатов.

rng('default')

Fs = 1000;
t = 0:1/Fs:1-1/Fs;
N = length(t);
x = sin(2*pi*t*200)+0.01*randn(size(t));

Используйте БПФ, чтобы вычислить спектр мощности сигнала, нормированного длиной сигнала. Синусоида в интервале, таким образом, вся степень сконцентрирована в одной выборке частоты. Постройте односторонний спектр. Увеличьте масштаб к близости пика.

q = fft(x,N);
ff = 0:Fs/N:Fs-Fs/N;

ffts = q*q'/N^2
ffts = 0.4997
ff = ff(1:floor(N/2)+1);
q = q(1:floor(N/2)+1);

stem(ff,abs(q)/N,'*')
axis([190 210 0 0.55])

Используйте periodogram, чтобы вычислить спектр мощности сигнала. Задайте окно Hann и длину БПФ 1 024. Найдите процентную разницу между предполагаемой степенью на уровне 200 Гц и фактическим значением.

wind = hann(N);

[pun,fr] = periodogram(x,wind,1024,Fs,'power');

hold on
stem(fr,pun)

periodogErr = abs(max(pun)-ffts)/ffts*100
periodogErr = 4.7349

Повторно вычислите спектр мощности, но на этот раз используйте переназначение. Постройте новую оценку и сравните ее максимум со значением БПФ.

[pre,ft,pxx,fx] = periodogram(x,wind,1024,Fs,'power','reassigned');

stem(fx,pre)
hold off
legend('Original','Periodogram','Reassigned')

reassignErr = abs(max(pre)-ffts)/ffts*100
reassignErr = 0.0779

Оцените степень синусоиды на определенной частоте с помощью опции 'power'.

Создайте синусоиду на 100 Гц одна секунда в длительности, выбранной на уровне 1 кГц. Амплитуда синусоиды 1.8, который приравнивается к степени 1,8 ²/2 = 1.62. Оцените степень с помощью опции 'power'.

fs = 1000;
t = 0:1/fs:1-1/fs;
x = 1.8*cos(2*pi*100*t);
[pxx,f] = periodogram(x,hamming(length(x)),length(x),fs,'power');
[pwrest,idx] = max(pxx);
fprintf('The maximum power occurs at %3.1f Hz\n',f(idx))
The maximum power occurs at 100.0 Hz
fprintf('The power estimate is %2.2f\n',pwrest)
The power estimate is 1.62

Сгенерируйте 1 024 выборки многоканального сигнала, состоящего из трех синусоид в дополнении N(0,1) белый Гауссов шум. Частоты синусоид π/2, π/3, и π/4 рад/выборка. Оцените PSD сигнала с помощью периодограммы и постройте его.

N = 1024;
n = 0:N-1;

w = pi./[2;3;4];
x = cos(w*n)' + randn(length(n),3);

periodogram(x)

Создайте функциональный periodogram_data.m, который возвращает измененную периодограмму оценка PSD с помощью окна, window. Длина окна и числа точек в ДПФ совпадает с длиной inputData.

type periodogram_data
function [pxx,f] = periodogram_data(inputData,window)
%#codegen
nfft = length(inputData);
[pxx,f] = periodogram(inputData,window,nfft);
end

Директива %#codegen указывает, что код MATLAB предназначается для генерации кода. Используйте codegen, чтобы сгенерировать файл MEX periodogram_mex. Опция -args задает входные спецификации для MEX - файл. input_data 1024x1 случайный вектор. Задайте Окно Хэмминга длины 1024. Чтобы просмотреть отчет генерации кода, можно добавить флаг -report в конце следующей строки кода.

codegen periodogram_data -args {randn(1024,1),hamming(1024)} -o periodogram_mex

Постройте периодограмму шумной синусоиды с помощью и periodogram_mex и periodogram_data.m.

t = linspace(0,1,1024);
x = 2*cos(2*pi*50*t')+randn(size(t'));

[pxMex,fMex] = periodogram_mex(x,hann(length(x)));

[pxMat,fMat] = periodogram_data(x,hamming(length(x)));
plot(fMex,10*log10(pxMex))
hold on
plot(fMat,10*log10(pxMat),'--')
hold off
grid on

title('Periodogram Power Spectral Density Estimate')
xlabel('Normalized Frequency (\times\pi rad/sample)')
ylabel('Power/frequeny (dB/(rad/sample))')

legend('Periodogram with MEX function','Periodogram with MATLAB function')

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

свернуть все

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

Пример: cos(pi/4*(0:159))+randn(1,160) является одноканальным сигналом вектора - строки.

Пример: cos(pi./[4;2]*(0:159))'+randn(160,2) является двухканальным сигналом.

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

Окно, заданное как строка или вектор-столбец с той же длиной как входной сигнал. Если вы задаете window как пустой, то periodogram использует прямоугольное окно. Если вы задаете флаг 'reassigned' и пустой window, то функция использует окно Kaiser с β = 38.

Типы данных: single | double

Количество точек ДПФ, заданных как положительное целое число. Для входного сигнала с действительным знаком, x, оценки PSD, pxx имеет длину (nfft/2 + 1), если nfft даже, и (nfft + 1)/2, если nfft нечетен. Для входного сигнала с комплексным знаком, x, оценка PSD всегда имеет длину nfft. Если nfft задан как пустой, nfft по умолчанию используется.

Типы данных: single | double

Частота дискретизации, заданная как положительная скалярная величина. Частота дискретизации является количеством выборок в единицу времени. Если модуль времени является секундами, то частота дискретизации имеет модули Гц.

Нормированные частоты, заданные как строка или вектор-столбец по крайней мере с двумя элементами. Нормированные частоты находятся в раде/выборке.

Пример: w = [pi/4 pi/2]

Типы данных: double

Частоты, заданные как строка или вектор-столбец по крайней мере с двумя элементами. Частоты находятся в циклах в единицу времени. Единица времени задана частотой дискретизации, fs. Если fs имеет модули выборок/секунда, то f имеет модули Гц.

Пример: fs = 1000; f = [100 200]

Типы данных: double

Частотный диапазон для оценки PSD, заданной как та 'onesided', 'twosided' или 'centered'. Значением по умолчанию является 'onesided' для сигналов с действительным знаком и 'twosided' для сигналов с комплексным знаком. Частотные диапазоны, соответствующие каждой опции,

  • 'onesided' — возвращает одностороннюю оценку PSD входного сигнала с действительным знаком, x. Если nfft даже, pxx имеет длину nfft/2 + 1 и вычисляется на интервале [0, π] рад/выборка. Если nfft нечетен, длина pxx (nfft + 1)/2, и интервал [0, π), рад/выборка. Когда fs опционально задан, соответствующие интервалы являются [0, fs/2] циклами/единицей времени и [0, fs/2), циклы/единица времени для четной и нечетной длины nfft соответственно.

  • 'twosided' — возвращает двухстороннюю оценку PSD или для входа с комплексным знаком или для с действительным знаком, x. В этом случае pxx имеет длину nfft и вычисляется на интервале [0,2π), рад/выборка. Когда fs опционально задан, интервал [0, fs), циклы/единица времени.

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

Масштабирование спектра мощности, заданное как 'psd' или 'power'. Чтобы возвратить степень спектральная плотность, не используйте spectrumtype или задайте 'psd'. Чтобы получить оценку степени на каждой частоте, используйте 'power' вместо этого. Определение 'power' масштабирует каждую оценку PSD эквивалентной шумовой пропускной способностью окна, кроме тех случаев, когда флаг 'reassigned' используется.

Вероятность покрытия для истинного PSD, заданного как скаляр в области значений (0,1). Вывод, pxxc, содержит нижние и верхние границы probability × 100%-я оценка интервала для истинного PSD.

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

свернуть все

Оценка PSD, возвращенная как неотрицательный вектор-столбец с действительным знаком или матрица. Каждый столбец pxx является оценкой PSD соответствующего столбца x. Модули оценки PSD находятся в единицах значения в квадрате данных временных рядов на модульную частоту. Например, если входные данные находятся в вольтах, оценка PSD находится в модулях вольт в квадрате на модульную частоту. Какое-то время ряд в вольтах, если вы принимаете сопротивление 1 Ω и задаете частоту дискретизации в герц, оценка PSD, находится в ваттах на герц.

Типы данных: single | double

Циклические частоты, возвращенные как вектор-столбец с действительным знаком. Для односторонней оценки PSD f охватывает интервал [0, fs/2], когда nfft даже и [0, fs/2), когда nfft нечетен. Для двухсторонней оценки PSD f охватывает интервал [0, fs). Для сосредоточенной DC оценки PSD f охватывает интервал (–fs/2, fs/2] циклы/единица времени для даже длины nfft и (–fs/2, fs/2) циклы/единица времени для нечетной длины nfft.

Типы данных: double | single

Нормированные частоты, возвращенные как вектор-столбец с действительным знаком. Если pxx является односторонней оценкой PSD, w охватывает интервал [0, π], если nfft даже и [0, π), если nfft нечетен. Если pxx является двухсторонней оценкой PSD, w охватывает интервал [0,2π). Для сосредоточенной DC оценки PSD w охватывает интервал (–π, π] для даже nfft и (–π, π) для нечетного nfft.

Типы данных: double

Доверительные границы, возвращенные как матрица с элементами с действительным знаком. Размер строки матрицы равен длине оценки PSD, pxx. pxxc имеет вдвое больше столбцов как pxx. Нечетные столбцы содержат нижние границы доверительных интервалов, и четные столбцы содержат верхние границы. Таким образом pxxc(m,2*n-1) является более низкой доверительной границей, и pxxc(m,2*n) является верхней доверительной границей, соответствующей оценке pxx(m,n). Вероятность покрытия доверительных интервалов определяется значением входа probability.

Типы данных: single | double

Повторно присвоенная оценка PSD, возвращенная как неотрицательный вектор-столбец с действительным знаком или матрица. Каждый столбец rpxx является переприсвоенной оценкой PSD соответствующего столбца x.

Частоты центра энергии, заданные как вектор или матрица.

Больше о

свернуть все

Периодограмма

Периодограмма является непараметрической оценкой степени спектральной плотности (PSD) широкого смысла стационарный вероятностный процесс. Периодограмма является преобразованием Фурье смещенной оценки последовательности автокорреляции. Для сигнала, xn, выбранного на выборках fs в единицу времени, периодограмма задана как

P^(f)=ΔtN|n=0N1xnej2πfn|2,1/2Δt<f1/2Δt,

где Δt является интервалом выборки. Для односторонней периодограммы значения на всех частотах кроме 0 и Найквист, 1/2Δt, умножаются на 2 так, чтобы общая степень была сохранена.

Если частоты находятся в радианах/выборке, периодограмма задана как

P^(ω)=12πN|n=0N1xnejωn|2,π<ωπ.

Частотный диапазон в предыдущих уравнениях имеет изменения в зависимости от значения аргумента freqrange. См. описание freqrange во Входных параметрах.

Интеграл истинного PSD, P (f), за один период, 1/Δt для циклической частоты и 2π для нормированной частоты, равен отклонению широкого смысла стационарный вероятностный процесс:

σ2=1/2Δt1/2ΔtP(f)df.

Для нормированных частот замените пределы интегрирования соответственно.

Измененная периодограмма

Измененная периодограмма умножает входные временные ряды на функцию окна. Подходящая функция окна является неотрицательной и затухает, чтобы обнулить вначале и конечные точки. Умножение временных рядов функцией окна постепенно заостряется данные по и прочь и помогает облегчить утечку в периодограмме. Смотрите Смещение и Изменчивость в Периодограмме для примера.

Если hn является функцией окна, измененная периодограмма задана

P^(f)=ΔtN|n=0N1hnxnej2πfn|2,1/2Δt<f1/2Δt,

где Δt является интервалом выборки.

Если частоты находятся в радианах/выборке, измененная периодограмма задана как

P^(ω)=12πN|n=0N1hnxnejωn|2,π<ωπ.

Частотный диапазон в предыдущих уравнениях имеет изменения в зависимости от значения аргумента freqrange. См. описание freqrange во Входных параметрах.

Переприсвоенная периодограмма

Метод переназначения увеличивает резкость локализации спектральных оценок и производит периодограммы, которые легче считать и интерпретировать. Этот метод повторно присваивает каждую оценку PSD центру энергии его интервала, далеко от геометрического центра интервала. Это обеспечивает точную локализацию для щебетов и импульсов.

Ссылки

[1] Fulop, Шон А. и Келли Фитц. “Алгоритмы для вычисления исправленной временем мгновенной частоты (повторно присвоили) спектрограмму с приложениями”. Журнал Акустического Общества Америки. Издание 119, январь 2006, стр 360–371.

[2] Сверлите, Франсуа и Патрик Фландрен. “Улучшая Удобочитаемость Представлений Частоты Времени и Масштаба времени Методом Переназначения”. IEEE® Transactions на Обработке сигналов. Издание 43, май 1995, стр 1068–1089.

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

Генерация кода C/C++
Генерация кода C и C++ с помощью MATLAB® Coder™.

Представлено до R2006a