Присутствие шума часто мешает определять спектральное содержимое сигнала. Анализ частоты может помочь в таких случаях.
Рассмотрите, например, моделируемый вывод нелинейного усилителя, который вводит искажение третьего порядка.
Входной сигнал является амплитудной модулем синусоидой на 180 Гц, выбранной на уровне 3,6 кГц. Сгенерируйте 10 000 выборок.
N = 1e4; n = 0:N-1; fs = 3600; f0 = 180; t = n/fs; y = sin(2*pi*f0*t);
Добавьте модульное отклонение белый шум во вход. Смоделируйте усилитель с помощью полинома третьего порядка. Передайте входной сигнал через усилитель с помощью polyval
. Постройте раздел вывода. Поскольку сравнение строит вывод чистой синусоиды.
rng default noise = randn(size(y)); dispol = [0.5 0.75 1 0]; out = polyval(dispol,y+noise); ns = 300:500; plot(t(ns),[out(ns);polyval(dispol,y(ns))]) xlabel('Time (s)') ylabel('Signals') axis tight legend('With white noise','No white noise')
Используйте pwelch
, чтобы вычислить и построить степень спектральная плотность вывода.
[pxx,f] = pwelch(out,[],[],[],fs); pwelch(out,[],[],[],fs)
Поскольку усилитель вводит искажение третьего порядка, выходной сигнал, как ожидают, будет иметь:
DC (нулевая частота) компонент;
Основной компонент с той же частотой как вход, 180 Гц;
Две гармоники - частотные составляющие в дважды и три раза частота входа, 360 и 540 Гц.
Проверьте, что вывод как ожидалось для кубической нелинейности.
[pks,lox] = findpeaks(pxx,'NPeaks',4,'SortStr','descend'); hold on plot(f(lox)/1000,10*log10(pks),'or') hold off legend('PSD','Frequency Components')
components = sort([f(lox) f0*(0:3)'])'
components = 2×4
0.8789 180.1758 360.3516 540.5273
0 180.0000 360.0000 540.0000
pwelch
работает путем деления сигнала на перекрывающиеся сегменты, вычисления периодограммы каждого сегмента и усреднения. По умолчанию функция использует восемь сегментов с 50%-м перекрытием. Для 10 000 выборок это соответствует 2 222 выборкам на сегмент.
Деление сигнала в более короткие сегменты приводит к большему количеству усреднения. Периодограмма более сглаженна, но имеет более низкое разрешение. Более высокую гармонику нельзя отличить.
pwelch(out,222,[],[],fs)
Деление сигнала в более длинные сегменты увеличивает разрешение, но также и случайность. Сигнал и гармоники точно в ожидаемых местоположениях. Однако существует по крайней мере один побочный высокочастотный пик с большим количеством степени, чем более высокая гармоника.
pwelch(out,4444,[],[],fs)