Оцените спектр мощности в MATLAB

Спектр мощности (PS) сигнала временного интервала является распределением степени, содержавшей в сигнале по частоте, на основе конечного множества данных. Представление частотного диапазона сигнала часто легче анализировать, чем представление временного интервала. Много приложений обработки сигналов, таких как подавление помех и система идентификации, основаны на специфичных для частоты модификациях сигналов. Цель степени спектральная оценка состоит в том, чтобы оценить спектр мощности сигнала от последовательности выборок времени. В зависимости от того, что известно о сигнале, методы оценки могут включить параметрические или непараметрические подходы и могут быть основаны на временном интервале или анализе частотного диапазона. Например, общий параметрический метод включает подбор кривой наблюдениям к авторегрессивной модели. Общий непараметрический метод является периодограммой. Спектр мощности оценивается с помощью методов преобразования Фурье, таких как валлийский метод и метод набора фильтров. Для сигналов с относительно маленькой длиной подход набора фильтров производит спектральную оценку с более высоким разрешением, более точным уровнем шума и peaks, более точным, чем валлийский метод, с низким или никакой спектральной утечкой. Эти преимущества прибывают за счет увеличенного вычисления и более медленного отслеживания. Для получения дополнительной информации на этих методах, смотрите Спектральный анализ. Можно также использовать другие методы, такие как максимальный энтропийный метод.

В MATLAB® можно выполнить спектральный анализ в реальном времени динамического сигнала с помощью Системы dsp.SpectrumAnalyzer object™. Можно просмотреть спектральные данные в спектре анализатор и хранить данные в переменной рабочей области использование функций объекта isNewDataReady и getSpectrumData. Поочередно, можно использовать Системный объект dsp.SpectrumEstimator, сопровождаемый объектом dsp.ArrayPlot просмотреть спектральные данные. Вывод объекта dsp.SpectrumEstimator является спектральными данными. Эти данные могут быть получены за последующую обработку.

Оцените Спектр мощности Используя dsp. SpectrumAnalyzer

Чтобы просмотреть спектр мощности сигнала, можно использовать Систему dsp.SpectrumAnalyzer object™. Можно изменить динамику входного сигнала и видеть эффект, который те изменения имеют на спектр мощности сигнала в режиме реального времени.

Инициализация

Инициализируйте источник синусоиды, чтобы сгенерировать синусоиду и спектр анализатор, чтобы показать спектр мощности сигнала. Входная синусоида имеет две частоты: один на уровне 1 000 Гц и другой на уровне 5 000 Гц. Создайте два объекта dsp.SineWave, один, чтобы сгенерировать синусоиду на 1 000 Гц и другой, чтобы сгенерировать синусоиду на 5 000 Гц.

Fs = 44100;
Sineobject1 = dsp.SineWave('SamplesPerFrame',1024,'PhaseOffset',10,...
    'SampleRate',Fs,'Frequency',1000);
Sineobject2 = dsp.SineWave('SamplesPerFrame',1024,...
    'SampleRate',Fs,'Frequency',5000);
SA = dsp.SpectrumAnalyzer('SampleRate',Fs,'Method','Filter bank',...
    'SpectrumType','Power','PlotAsTwoSidedSpectrum',false,...
    'ChannelNames',{'Power spectrum of the input'},'YLimits',[-120 40],'ShowLegend',true);

Спектр анализатор использует подход набора фильтров, чтобы вычислить спектр мощности сигнала.

Оценка

Поток в и оценка спектр мощности сигнала. Создайте for - цикл, чтобы запуститься для 5 000 итераций. В каждой итерации, потоке в 1 024 выборках (один кадр) каждой синусоиды и вычисляют спектр мощности каждого кадра. Чтобы сгенерировать входной сигнал, добавьте эти две синусоиды. Результирующий сигнал является синусоидой с двумя частотами: один на уровне 1 000 Гц и другой на уровне 5 000 Гц. Добавьте Гауссов шум с нулевым средним значением и стандартным отклонением 0,001. Чтобы получить спектральные данные для последующей обработки, используйте isNewDataReady и функции объекта getSpectrumData. Переменная data содержит спектральные данные, которые отображены на спектре анализатор наряду с дополнительной статистикой о спектре.

data = [];
for Iter = 1:7000
    Sinewave1 = Sineobject1();
    Sinewave2 = Sineobject2();
    Input = Sinewave1 + Sinewave2;
    NoisyInput = Input + 0.001*randn(1024,1);
    SA(NoisyInput);
     if SA.isNewDataReady
        data = [data;getSpectrumData(SA)];
     end
end
release(SA);

В спектре анализатор вывел, вы видите два отличных peaks: один на уровне 1 000 Гц и другой на уровне 5 000 Гц.

Пропускная способность разрешения (RBW) является минимальной пропускной способностью частоты, которая может быть разрешена спектром анализатор. По умолчанию свойство RBWSource объекта dsp.SpectrumAnalyzer установлено в Auto. В этом режиме RBW является отношением промежутка частоты к 1 024. В двухстороннем спектре это значение, в то время как в одностороннем спектре, это. Спектр анализатор в этом примере показывает односторонний спектр. Следовательно, RBW (44100/2)/1024 или 21.53 Гц

Используя это значение, количество входных выборок, требуемых вычислить одно спектральное обновление, дан следующим уравнением:.

В этом примере, 44100/21.53 или 2 048 выборок.

вычисленный в режиме 'Auto' дает хорошее разрешение частоты.

Чтобы различать две частоты в отображении, расстоянием между этими двумя частотами должен быть, по крайней мере, RBW. В этом примере расстояние между двумя peaks составляет 4 000 Гц, который больше, чем. Следовательно, вы видите peaks отчетливо. Измените частоту второй синусоиды к 1 015 Гц. Различием между этими двумя частотами являются меньше, чем.

release(Sineobject2);
Sineobject2.Frequency = 1015;
for Iter = 1:5000
    Sinewave1 = Sineobject1();
    Sinewave2 = Sineobject2();
    Input = Sinewave1 + Sinewave2;
    NoisyInput = Input + 0.001*randn(1024,1);
    SA(NoisyInput);
end
release(SA);

Peaks не различим.

Чтобы увеличить разрешение частоты, уменьшитесь до 1 Гц.

SA.RBWSource = 'property';
SA.RBW = 1;
for Iter = 1:5000
    Sinewave1 = Sineobject1();
    Sinewave2 = Sineobject2();
    Input = Sinewave1 + Sinewave2;
    NoisyInput = Input + 0.001*randn(1024,1);
    SA(NoisyInput);
end
release(SA);

На изменении масштаба два peaks, которые на расстоянии в 15 Гц, теперь различимы.

Когда вы увеличиваете разрешение частоты, уменьшения разрешения времени. Чтобы сохранить хорошее равновесие между разрешением частоты и разрешением времени, измените свойство RBWSource на Auto.

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

release(Sineobject2);
SA.RBWSource = 'Auto';
for Iter = 1:5000
    Sinewave1 = Sineobject1();
    if (mod(Iter,1000) == 0)
        release(Sineobject2);
        Sineobject2.Frequency = Iter;
        Sinewave2 = Sineobject2();
    else
        Sinewave2 = Sineobject2();
    end
    Input = Sinewave1 + Sinewave2;
    NoisyInput = Input + 0.001*randn(1024,1);
    SA(NoisyInput);
end
release(SA);

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

Преобразуйте степень между модулями

Спектр анализатор обеспечивает три модуля, чтобы задать степень спектральная плотность: Watts/Hz, dBm/Hz и dBW/Hz. Соответствующими модулями степени является Watts, dBm и dBW. Для электротехнических приложений можно также просмотреть RMS сигнала в Vrms или dBV. Типом спектра по умолчанию является Power в dBm.

Преобразуйте Мощность в ваттах в dBW и dBm

Степенью в dBW дают:

PdBW=10журнал10(powerinwatt/1 watt)

Степенью в dBm дают:

PdBm=10журнал10(powerinwatt/1 milliwatt)

Для синусоидального сигнала с амплитудой 1 В степенью одностороннего спектра в Watts дают:

PWatts=A2/2PWatts=1/2

В этом примере эта степень равняется 0,5 Вт. Соответствующей степенью в dBm дают:

PdBm=10журнал10(powerinwatt/1 milliwatt)PdBm=10журнал10(0.5/103)

Здесь, степень равняется 26.9897 dBm. Чтобы подтвердить это значение с пиковым средством поиска, нажмите Tools> Measurements> Peak Finder.

Для белого шумового сигнала спектр является плоским для всех частот. Спектр анализатор в этом примере показывает односторонний спектр в области значений [0 Фс/2]. Для белого шумового сигнала с отклонением 1e-4 степень на модульную пропускную способность (Punitbandwidth) является 1e-4. Общей степенью белого шума в ваттах по целому частотному диапазону дают:

Pwhitenoise=Punitbandwidth*numberoffrequencybins,Pwhitenoise=(104)*(Fs/2RBW),Pwhitenoise=(104)*(2205021.53)

Количество интервалов частоты является отношением общей пропускной способности к RBW. Для одностороннего спектра общая пропускная способность является половиной уровня выборки. RBW в этом примере составляет 21,53 Гц. С этими значениями общая степень белого шума в ваттах составляет 0,1024 Вт. В dBm степень белого шума может быть вычислена с помощью 10*log10 (0.1024/10^-3), который равняется 20.103 dBm.

Преобразуйте Мощность в ваттах в dBFS

Если вы устанавливаете спектральные модули на dBFS и устанавливаете полный масштаб (FullScaleSource) на Auto, степень в dBFS вычисляется как:

PdBFS=20журнал10(Pwatts/Full_Scale)

где:

  • Pwatts является мощностью в ваттах

  • Для двойных и сигналов плавающих Full_Scale является максимальным значением входного сигнала.

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

Если вы задаете ручной полный масштаб (установите FullScaleSource на Property), степенью в dBFS дают:

PFS=20журнал10(Pwatts/FS)

Где FS является полным масштабным коэффициентом, заданным в свойстве FullScale.

Для синусоидального сигнала с амплитудой 1 В степенью одностороннего спектра в Watts дают:

PWatts=A2/2PWatts=1/2

В этом примере эта степень равняется 0,5 Вт, и максимальный входной сигнал для синусоиды составляет 1 В. Соответствующей степенью в dBFS дают:

PFS=20журнал10(1/2/1)

Здесь, степень равняется-3.0103. Чтобы подтвердить это значение в спектре анализатор, запустите эти команды:

Fs = 1000;  % Sampling frequency
sinef = dsp.SineWave('SampleRate',Fs,'SamplesPerFrame',100);
scope = dsp.SpectrumAnalyzer('SampleRate',Fs,...
   'SpectrumUnits','dBFS','PlotAsTwoSidedSpectrum',false)
%%
for ii = 1:100000
xsine = sinef();
scope(xsine)
end
Затем нажмите Tools> Measurements> Peak Finder.

Преобразуйте Степень в dBm к RMS в Vrms

Степенью в dBm дают:

PdBm=10журнал10(powerinwatt/1 milliwatt)

Напряжением в RMS дают:

Vrms=10PdBm/20103

От предыдущего примера PdBm равняется 26.9897 dBm. Vrms вычисляется как

Vrms=1026.9897/200.001

который равняется 0.7071.

Подтвердить это значение:

  1. Измените Type на RMS.

  2. Откройте пиковое средство поиска путем нажатия на Tools> Measurements> Peak Finder.

Оцените Спектр мощности Используя dsp. SpectrumEstimator

Поочередно, можно вычислить спектр мощности сигнала с помощью Системного объекта dsp.SpectrumEstimator. Можно получить вывод средства оценки спектра и хранить данные для последующей обработки. Чтобы просмотреть другие объекты в библиотеке Estimation, введите help dsp в командной строке MATLAB� и нажмите Estimation.

Инициализация

Используйте тот же источник в качестве в предыдущем разделе при использовании dsp.SpectrumAnalyzer, чтобы оценить спектр мощности. Входная синусоида имеет две частоты: один на уровне 1 000 Гц и другой на уровне 5 000 Гц. Инициализируйте dsp.SpectrumEstimator, чтобы вычислить спектр мощности сигнала с помощью подхода набора фильтров. Просмотрите спектр мощности сигнала с помощью объекта dsp.ArrayPlot.

Fs = 44100;
Sineobject1 = dsp.SineWave('SamplesPerFrame',1024,'PhaseOffset',10,...
    'SampleRate',Fs,'Frequency',1000);
Sineobject2 = dsp.SineWave('SamplesPerFrame',1024,...
    'SampleRate',Fs,'Frequency',5000);

SpecEst = dsp.SpectrumEstimator('Method','Filter bank',...
    'PowerUnits','dBm','SampleRate',Fs,'FrequencyRange','onesided');
ArrPlot = dsp.ArrayPlot('PlotType','Line','ChannelNames',{'Power spectrum of the input'},...
    'YLimits',[-80 30],'XLabel','Number of samples per frame','YLabel',...
    'Power (dBm)','Title','One-sided power spectrum with respect to samples');

Оценка

Поток в и оценка спектр мощности сигнала. Создайте for - цикл, чтобы запуститься для 5 000 итераций. В каждой итерации, потоке в 1 024 выборках (один кадр) каждой синусоиды и вычисляют спектр мощности каждого кадра. Добавьте Гауссов шум со средним значением в 0 и стандартное отклонение 0,001 к входному сигналу.

for Iter = 1:5000
    Sinewave1 = Sineobject1();
    Sinewave2 = Sineobject2();
    Input = Sinewave1 + Sinewave2;
    NoisyInput = Input + 0.001*randn(1024,1);
    PSoutput = SpecEst(NoisyInput);
    ArrPlot(PSoutput);
end

Используя подход набора фильтров, спектральная оценка имеет высокое разрешение, и peaks точен без спектральной утечки.

Преобразуйте ось X, чтобы Представлять Частоту

По умолчанию график массивов показывает степени спектральные данные относительно количества выборок на кадр. Число точек на оси X равняется длине входного кадра. Спектр анализатор строит степень спектральные данные относительно частоты. Для одностороннего спектра частота отличается по области значений [0 Фс/2]. Для двухстороннего спектра частота отличается по области значений [-Fs/2 Фс/2]. Чтобы преобразовать ось X графика массивов от основанного на выборке до основанного на частоте, сделайте следующее:

  • Нажмите на значок Configuration Properties.

  • Для одностороннего спектра - вкладка On Main, Выборка набора постепенно увеличивается к и X-смещение к 0.

  • Для двухстороннего спектра - вкладка On Main, Выборка набора постепенно увеличивается к и X-смещение к.

В этом примере спектр является односторонним и следовательно, Демонстрационный шаг и X-смещение установлены в 44100/1024 и 0, соответственно. Чтобы задать частоту в kHz, установите Демонстрационный шаг на 44.1/1024.

ArrPlot.SampleIncrement = (Fs/1000)/1024;
ArrPlot.XLabel = 'Frequency (kHz)';
ArrPlot.Title = 'One-sided power spectrum with respect to frequency';

for Iter = 1:5000
    Sinewave1 = Sineobject1();
    Sinewave2 = Sineobject2();
    Input = Sinewave1 + Sinewave2;
    NoisyInput = Input + 0.001*randn(1024,1);
    PSoutput = SpecEst(NoisyInput);
    ArrPlot(PSoutput);
end

Живая обработка

Вывод объекта dsp.SpectrumEstimator содержит спектральные данные и доступен для последующей обработки. Данные могут быть обработаны в режиме реального времени, или они могут храниться в рабочей области.

Похожие темы