Наличие шума часто затрудняет определение спектрального содержания сигнала. Частотный анализ может помочь в таких случаях.
Рассмотрим, например, моделируемый выход нелинейного усилителя, который вносит искажение третьего порядка.
Входной сигнал представляет собой синусоиду с единичной амплитудой 180 Гц, дискретизированную на частоте 3,6 кГц. Создайте 10000 проб.
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)

Поскольку усилитель вносит искажение третьего порядка, ожидается, что выходной сигнал будет иметь:
компонент постоянного тока (нулевой частоты);
Фундаментальная составляющая с той же частотой, что и у входа, 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% перекрытием. Для 10000 образцов это соответствует 2222 выборкам на сегмент.
Разделение сигнала на более короткие сегменты приводит к большему усреднению. Периодограмма более гладкая, но имеет более низкое разрешение. Высшую гармонику различить невозможно.
pwelch(out,222,[],[],fs)

Разделение сигнала на более длинные сегменты увеличивает разрешение, но также и случайность. Сигнал и гармоники находятся точно в ожидаемых местах. Однако существует по меньшей мере один ложный высокочастотный пик с большей мощностью, чем у более высокой гармоники.
pwelch(out,4444,[],[],fs)
