В этом примере показано, как выполнить статистический анализ на наборе файлов данных S-параметра с помощью величины, среднего и стандартного отклонения (STD).
Сначала прочтите двенадцать файлов S-параметров, где эти файлы представляют двенадцать аналогичных фильтров RF в рабочую область MATLAB ® и постройте их график. Затем постройте и проанализируйте характеристики полосы пропускания этих фильтров, чтобы убедиться, что они соответствуют статистическим нормам.
Используйте встроенные функции RF Toolbox™ для чтения набора файлов данных S-Parameter. Для каждого фильтра постройте график 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 s21_groupdelay = 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; s21_groupdelay(:,n) = groupdelay(S,freq,2,1); 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 полосы пропускания.
abs_S21_pass_freq = abs(s21_pass_data);
Вычислите среднее значение и STD величины всего набора 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
Вычислите среднее и STD характеристики величины полосы пропускания в каждой частотной точке. Это определяет, следуют ли данные нормальному распределению.
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,'m') 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')
Получите groupdelay данных S21 полосы пропускания. Используйте внутренние 60% полосы пропускания для статистического анализа groupdelay и нормализуйте его до 10 нс.
idx_gpd = (freq >= 2.13e9) & (freq <= 2.15e9); freq_pass_ghz_gpd = freq(idx_gpd)/1e9; % Normalize to GHz s21_groupdelay_pass_data = s21_groupdelay(idx_gpd,:)/10e-9; % Normalize to 10 ns
Вычислите среднее значение частоты и стандартное отклонение нормализованной групповой задержки. Все данные собираются в один вектор для изменения анализа.
mean_grpdelay_S21 = mean(s21_groupdelay_pass_data,2); std_grpdelay_S21 = std(s21_groupdelay_pass_data,0,2); all_grpdelay_data = reshape(s21_groupdelay_pass_data.',numel(s21_groupdelay_pass_data),1);
Постройте график всех нормализованных данных группы полосы пропускания как функции частоты, включая верхний и нижний пределы, заданные базовым статистическим анализом.
plot(freq_pass_ghz_gpd,mean_grpdelay_S21,'m') hold on plot(freq_pass_ghz_gpd,mean_grpdelay_S21 + 2*std_grpdelay_S21,'r') plot(freq_pass_ghz_gpd,mean_grpdelay_S21 - 2*std_grpdelay_S21,'k') legend('Mean','Mean + 2*STD','Mean - 2*STD') plot(freq_pass_ghz_gpd,s21_groupdelay_pass_data,'c','HandleVisibility','off') grid on xlim([min(freq_pass_ghz_gpd) max(freq_pass_ghz_gpd)]) ylabel('Normalized group delay S21') xlabel('Frequency (GHz)') title('S21 (Normalized group delay) - Statistical Analysis') hold off
Постройте гистограмму для нормализованных данных задержки группы полосы пропускания. Это определяет, следуют ли верхний и нижний пределы данных равномерному распределению.
histogram(all_grpdelay_data,35) grid on xlabel('Group delay S21 (seconds)') ylabel('Distribution') title('Histogram of the normalized group delay')
Выполните Дисперсионный Анализ по величине данных 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 S21 magnitude response') grid on
Выполните Дисперсионный Анализ на нормализованных данных группового S21 полосы пропускания.
anova1((s21_groupdelay_pass_data).',freq_pass_ghz_gpd);
ylabel('Normalized group delay S21') xlabel('Frequency (GHz)') ax2 = gca; ax2.XTick = 0.5:4:40.5; ax2.XTickLabel = {2.13,2.132,2.134,2.136,2.138,2.14,2.142,2.144,2.146,2.148,2.15}; title('Analysis of variance (ANOVA) of passband S21 groupdelay (normalized)') grid on