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) возвращает двухсторонние оценки периодограммы на нормированных частотах, заданных в векторе, wW должен содержать по крайней мере два элемента, потому что в противном случае функция интерпретирует его как 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, затем функция использует окно Кайзера с β = 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