Оцените спектр мощности в 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. В двухстороннем спектре это значение$\frac{F_{s}}{1024}$, в то время как в одностороннем спектре, это$\frac{\frac{F_{s}}{2}}{1024}$. Спектр анализатор в этом примере показывает односторонний спектр. Следовательно, RBW (44100/2)/1024 или 21.53 Гц

Используя это значение$RBW$, количество входных выборок, требуемых вычислить одно спектральное обновление$N_{samples}$, дан следующим уравнением$N_{samples} = \frac{F_{s}}{RBW}$:.

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

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

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

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 не различим.

Чтобы увеличить разрешение частоты, уменьшитесь$RBW$ до 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=10log10(powerinwatt/1watt)

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

PdBm=10log10(powerinwatt/1milliwatt)

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

PWatts=A2/2PWatts=1/2

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

PdBm=10log10(powerinwatt/1milliwatt)PdBm=10log10(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=20log10(Pwatts/Full_Scale)

где:

  • Pwatts мощность в ваттах

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

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

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

PFS=20log10(Pwatts/FS)

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

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

PWatts=A2/2PWatts=1/2

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

PFS=20log10(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=10log10(powerinwatt/1milliwatt)

Напряжением в 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, Выборка набора постепенно увеличивается к$Fs/FrameLength$ и X-смещение к 0.

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

В этом примере спектр является односторонним и следовательно, Демонстрационный шаг и 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 объект содержит спектральные данные и доступен для последующей обработки. Данные могут быть обработаны в режиме реального времени, или они могут храниться в рабочей области.

Похожие темы