Анализ данных набора S-параметров для фильтра РФ

В этом примере показано, как выполнить статистический анализ набора файлов данных S-параметра. Во-первых, считайте двенадцать файлов S-параметра, представляющих двенадцать подобных фильтров РФ в рабочее пространство MATLAB, и постройте их. Затем постройте и анализируйте ответ полосы пропускания этих фильтров, чтобы гарантировать, что они соответствуют статистическим нормам.

Читайте в S-параметрах из файлов Фильтрации данных

Используйте встроенные функции RF Toolbox в чтении набора файлов данных S-параметра. Для каждого фильтра соберите и постройте необработанные значения S21 и значения дБ S21. Имена файлов являются AWS_Filter_1.s2p через AWS_Filter_12.s2p. Эти файлы представляют 12 фильтров полосы пропускания с подобными техническими требованиями.

numfiles    = 12;
filename    = "AWS_Filter_"+(1:numfiles)+".s2p"; % Construct filenames
S           = sparameters(filename(1)); % Read file #1 for initial set-up
freq        = S.Frequencies; % Frequency values are the same for all files
numfreq     = numel(freq); % Number of frequency points
s21_data    = zeros(numfreq,numfiles); % Preallocate for speed

% Read Touchstone files
for n = 1:numfiles
    S   = sparameters(filename(n));
    s21 = rfparam(S,2,1);
    s21_data(:,n) = s21;
end
s21_db = 20*log10(abs(s21_data));

figure
plot(freq/1e9,s21_db)
xlabel('Frequency (GHz)')
ylabel('Filter Response (dB)')
title('Transmission performance of 12 filters')
axis on
grid on

Отфильтруйте визуализацию полосы пропускания

В этом разделе найдите, сохраните и отобразите данные S21 на графике из только полосы нисходящего канала AWS (2.11 к 2,17 ГГц).

idx             = (freq >= 2.11e9) & (freq <= 2.17e9);
s21_pass_data   = s21_data(idx,:);
s21_pass_db     = s21_db(idx,:);
freq_pass_ghz   = freq(idx)/1e9;    % Normalize to GHz    

plot(freq_pass_ghz,s21_pass_db)
xlabel('Frequency (GHz)')
ylabel('Filter Response (dB)')
title('Passband variation of 12 filters')
axis([min(freq_pass_ghz) max(freq_pass_ghz) -1 0])
grid on

Основной статистический анализ данных S21

Выполните Статистический анализ величины и фазы всей полосы пропускания наборы данных S21. Это определяет, следуют ли данные за нормальным распределением и если существуют данные о выбросе.

abs_S21_pass_freq   = abs(s21_pass_data);

Вычислите среднее и стандартное отклонение величины целой полосы пропускания набор данных S21.

mean_abs_S21        = mean(abs_S21_pass_freq,'all')
mean_abs_S21 = 0.9289
std_abs_S21         = std (abs_S21_pass_freq(:))
std_abs_S21 = 0.0104

Вычислите среднее и стандартное отклонение ответа величины полосы пропускания в каждой точке частоты. Это определяет, следуют ли данные за нормальным распределением.

mean_abs_S21_freq   = mean(abs_S21_pass_freq,2);
std_abs_S21_freq    = std (abs_S21_pass_freq,0,2);

Отобразите все необработанные данные о величине полосы пропускания на графике как функцию частоты, а также верхнее и нижние пределы, заданные основным статистическим анализом.

plot(freq_pass_ghz,mean_abs_S21_freq)
hold on;
plot(freq_pass_ghz,mean_abs_S21_freq + 2*std_abs_S21_freq,'r')
plot(freq_pass_ghz,mean_abs_S21_freq - 2*std_abs_S21_freq,'k')
legend('Mean','Mean + 2*STD','Mean - 2*STD')
plot(freq_pass_ghz,abs_S21_pass_freq,'c','HandleVisibility','off')
grid on
axis([min(freq_pass_ghz) max(freq_pass_ghz) 0.9 1]);
ylabel('Magnitude S21')
xlabel('Frequency (GHz)')
title('S21 (Magnitude) - Statistical Analysis')
hold off

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

histfit(abs_S21_pass_freq(:))
grid on
axis([0.8 1 0 100])
xlabel('Magnitude S21')
ylabel('Distribution')
title('Compare filter passband response vs. a normal distribution')

Вычислите фазовый отклик полосы пропускания данные S21, затем среднее и стандартное отклонение на частоту фазового отклика. Все данные о фазе S21 полосы пропускания затем собраны в один вектор для более позднего анализа.

pha_s21         = angle(s21_pass_data)*180/pi;
mean_pha_S21    = mean(pha_s21,2);
std_pha_S21     = std(pha_s21,0,2);
all_pha_data    = reshape(pha_s21.',numel(pha_s21),1);

Отобразите все необработанные данные о фазе полосы пропускания на графике как функцию частоты, а также верхнее и нижние пределы, заданные основным статистическим анализом.

plot(freq_pass_ghz,mean_pha_S21)
hold on
plot(freq_pass_ghz,mean_pha_S21 + 2*std_pha_S21,'r')
plot(freq_pass_ghz,mean_pha_S21 - 2*std_pha_S21,'k')
legend('Mean','Mean + 2*STD','Mean - 2*STD')
plot(freq_pass_ghz,pha_s21,'c','HandleVisibility','off')
grid on
axis([min(freq_pass_ghz) max(freq_pass_ghz) -180 180])
ylabel('Phase S21')
xlabel('Frequency (GHz)')
title('S21 (Phase) - Statistical Analysis')
hold off

Постройте гистограмму для данных о фазе полосы пропускания. Это определяет, следуют ли верхнее и нижние пределы данных за равномерным распределением.

histogram(all_pha_data,35)
grid on
axis([-180 180 0 100])
xlabel('Phase S21 (degrees)')
ylabel('Distribution')
title('Histogram of the filter phase response')

Анализ Дисперсионного Анализа данных S21

Выполните анализ Дисперсионного Анализа и величины и данных о полосе пропускания фазы.

anova1(abs_S21_pass_freq.',freq_pass_ghz);

ylabel('Magnitude S21')
xlabel('Frequency (GHz)')
ax1 = gca;
ax1.XTick = 0.5:10:120.5;
ax1.XTickLabel = {2.11,'',2.12,'',2.13,'',2.14,'',2.15,'',2.16,'',2.17};
title('Analysis of variance (ANOVA) of passband loss')
grid on

anova1(pha_s21.',freq_pass_ghz);

ylabel('Phase S21 (degrees)')
xlabel('Frequency (GHz)')
ax2 = gca;
ax2.XTick = 0.5:10:120.5;
ax2.XTickLabel = {2.11,'',2.12,'',2.13,'',2.14,'',2.15,'',2.16,'',2.17};
title('Analysis of variance (ANOVA) of passband phase response')
grid on

Соответствуйте данным о фазе к полиному 1-го Порядка

Выполните припадок кривой данных о фазе S21 с помощью модели линейной регрессии.

phase_s21_fit = fit(repmat(freq_pass_ghz,numfiles,1),all_pha_data,'poly1')
phase_s21_fit = 
     Linear model Poly1:
     phase_s21_fit(x) = p1*x + p2
     Coefficients (with 95% confidence bounds):
       p1 =      -310.8  (-500.9, -120.6)
       p2 =       665.3  (258.3, 1072)