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

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

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

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

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

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

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

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-цикл для выполнения 5000 итераций. В каждой итерации поток в 1024 выборках (одна система координат) каждой синусоиды и вычисляет спектр степени каждой системы координат. Чтобы сгенерировать входной сигнал, добавьте две синусоиды. Результирующий сигнал является синусоидой с двумя частотами: одна на 1000 Гц и другая на 5000 Гц. Добавьте Гауссов шум с нулем среднего и стандартным отклонением 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: один с частотой 1000 Гц и другой с частотой 5000 Гц.

Шумовая полоса разрешения (RBW) является минимальной полосой пропускания частоты, которая может быть разрешена анализатором спектра. По умолчанию в RBWSource свойство dsp.SpectrumAnalyzer для объекта задано значение Auto. В этом режиме RBW является отношением диапазона частот к 1024. В двустороннем спектре это значение, $\frac{F_{s}}{1024}$в то время как в одностороннем спектре, это. $\frac{\frac{F_{s}}{2}}{1024}$Спектральный анализатор в этом примере показывает односторонний спектр. Следовательно, RBW является (44100/2 )/1024 или 21.53Hz

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

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

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

Чтобы различать две частоты на отображении, расстояние между двумя частотами должно быть по крайней мере RBW. В этом примере расстояние между двумя пиками составляет 4000 Гц, что больше, чем. $RBW$Следовательно, вы видите peaks отчетливо. Измените частоту второй синусоиды на 1015 Гц. Разница между двумя частотами меньше.$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);

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

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

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

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 in dBm.

Преобразуйте степень в ваттах в дБВ и дБм

Степень dBW определяется:

PdBW=10log10(powerinwatt/1watt)

Степень dBm определяется:

PdBm=10log10(powerinwatt/1milliwatt)

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

PWatts=A2/2PWatts=1/2

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

PdBm=10log10(powerinwatt/1milliwatt)PdBm=10log10(0.5/103)

Здесь степень равняется 26,9897 дБм. Чтобы подтвердить это значение с помощью peak finder, нажмите Tools > Measurements > Peak Finder.

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

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

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

Преобразуйте степень в ваттах в 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.

Преобразуйте степень в дБм в RMS в Vrms

Степень dBm определяется:

PdBm=10log10(powerinwatt/1milliwatt)

Напряжение в СРК определяется:

Vrms=10PdBm/20103

Из предыдущего примера PdBm равен 26,9897 дБм. 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 для оценки спектра степени. Вход синусоиды имеет две частоты: одна с частотой 1000 Гц и другая с частотой 5000 Гц. Инициализация 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-цикл для выполнения 5000 итераций. В каждой итерации поток в 1024 выборках (одна система координат) каждой синусоиды и вычисляет спектр степени каждой системы координат. Добавьте Гауссов шум со средним значением в 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 Fs/2]. Для двустороннего спектра частота изменяется в области значений [-Fs/2 Fs/2]. Чтобы преобразовать ось X графика массива из основанной на выборке в основанную на частоте, выполните следующее:

  • Щелкните значок Строения Properties.

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

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

В этом примере спектр является односторонним, и, следовательно, шаг Sample и смещение X устанавливаются равными 44100/1024 и 0, соответственно. Чтобы задать частоту в кГц, установите шаг Sample равным 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

Live Обработка

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

Похожие темы