книги / Определение акустических характеристик звукопоглащающих конструкций на основе измерений в интерферометрах с применением программного обеспечения PULSE
..pdf4.9.В окне «Function Organizer» на функции автоспектра нажать правой кнопкой мыши и в контекстном меню выбрать
«Properties».
4.10.В появившемся окне можно выбрать другой тип функции, например, взаимный спектр (Cross-spectrum), передаточная функция (Frequency Response) и др. При этом в выпадающем списке «Signal» можно выбрать сигал, для которого строится спектр, а в выпадающем списке «Reference Signal» выбрать опорный сигнал, относительно которого будет осуществляться фазовый сдвиг (рис. 72).
Рис. 72. Выбор типа функции
4.11.Добавить в «Function Organizer» новую функцию. Нажать на ней правой кнопкой мыши и в контекстном меню выбрать «Properties». В появившемся окне в выпадающем списке
«Analyzer» выбрать «CPB Analyzer» (рис. 73).
4.12.В окне «Function Organizer» на добавленной функции нажать левой кнопкой мыши. Появится график автоспектра в тертьоктавных полосах (рис. 74). Чтобы отображался суммар-
61
ный уровень шума в разделе «Total», нажать правой кнопкой мыши на графике и выбрать «Properties». Далее выбрать настройки согласно рис. 31.
Рис. 73. Выбор типа анализатора
Рис. 74. Автоспектр сигнала в третьоктавных полосах
62
Чтобы найти суммарный уровень шума в другом диапазоне частот, необходимо в окне «CPB Analyzer» (см. рис. 71) перезадать параметры нижней центральной частоты «Lower Center Frequency» и верхней центральной частоты «Upper Center Frequency». Предварительно можно изменить ширину полосы пропускания в выпадающем списке «Bandwidth».
Для того чтобы сделанные настройки вступили в силу, необходимо заново выполнить обработку сигналов, нажав на панели
«Measurements Bar» иконку «Start» (см. рис. 56).
63
РАЗДЕЛ 3. ОБРАБОТКА РЕЗУЛЬТАТОВ ИЗМЕРЕНИЙ
3.1.Конвертация файлов записанных сигналов
иих просмотр в MATLAB
Все записанные сигналы с микрофонов с помощью программного обеспечения PULSE хранятся в файлах формата *.dat и, по сути, представляют собой зависимости в виде «акустическое давление – время». Эти файлы можно загружать в различных приложениях PULSE и работать с ними, например, как это было сделано в приложении Lab Shop в пп. 4.1–4.10 подраздела 2.2 «Измерение образцов ЗПК в “Интерферометре-50”». Однако при попытке просмотреть файл *.dat с помощью программ «Блокнот» или «WordPad» можно обнаружить, что файл имеет неудобочитаемый вид. Поэтому для обработки записанных сигналов вне ПО PULSE файлы *.dat лучше конвертировать в другие форматы. Рассмотрим, как подготовить файл с записанными сигналами для их анализа в программе MATLAB.
1. Конвертация файлов
1.1.Запустить программу PULSE LabShop.
1.2.Выполнить пп. 4.1–4.4 подраздела 2.2 «Измерение образцов ЗПК в “Интерферометре-50”».
1.3.Нажать на любом сигнале правой кнопкой мыши и в контекстном меню выбрать «Export → MAT Files» (см. рис. 61). Задать файлу имя, указать путь к папке, в которую сохранится файл, и нажать кнопку «Сохранить». Через несколько секунд (зависит от количества конвертируемых сигналов и их длительности) заданный файл будет создан.
Если требуется конвертировать сразу несколько файлов *.dat, то лучше воспользоваться следующим способом.
1.4.Запустить программу PULSE Time Data Recorder.
1.5.Выбрать в главном меню «Tools → Export».
1.6.Справа от поля «Select Recorder Files» нажать кнопку «Browse…» и выбрать файлы *.dat.
64
1.7.Справа от поля «Set Destination Folder» нажать кнопку «Destination…» и указать папку, в которую будут сохраняться конвертированные файлы.
1.8.В поле «Select Export Format» выбрать тип файла, в который будут конвертироваться сигналы.
1.9.Нажать кнопку «Export».
2. Просмотр сигналов в MATLAB
2.1.Запустить программу MATLAB.
2.2.В окне «Current Folder» выбрать сохраненный файл в формате *.mat.
2.3.В окне «Workspace» появятся все сигналы, имеющиеся в загруженном файле. Если нажать, например, на переменную Channel_1_Data, то в окне «Variables» появятся значения выбранного сигнала. Отметим, что при этом отсутствуют значения времени. Дело в том, что отчет времени считается начинающимся с 0-й секунды, поэтому для работы с сигналом достаточно знать лишь шаг по времени, с которым записан сигнал. Чтобы его увидеть, нужно нажать в окне «Workspace» на переменную File_Header. В параметре SampleFrequency будет указано, сколько точек записи было сделано за 1 секунду. Соответственно, шаг по времени будет равен 1/SampleFrequency. Аналогично можно посмотреть любой сигнал.
3.2.Перевод записанных сигналов
вчастотную область
Перевод сигналов в частотную область выполняется на основе алгоритма быстрого преобразования Фурье, который реализуется в MATLAB с помощью встроенной функции fft. Вся программа состоит из трех функций:
1) main_program – главная функция пользователя, в которой задаются основные настройки и из которой вызываются другие функции пользователя;
65
2)fft_auto – функция пользователя, в которой вычисляются автоспектры сигналов;
3)fft_cross – функция пользователя, в которой вычисляются взаимные спектры сигналов.
Результаты работы программы выводятся в текстовые файлы, данные из которых можно отобразить на графиках, например,
впрограмме Excel и использовать в дальнейших задачах обработки результатов экспериментов.
Файл main_program.m |
|
close all |
|
clear all |
|
%------------------------------------------------------- |
|
% |
ЗАДАНИЕ ИСХОДНЫХ ДАННЫХ |
%------------------------------------------------------- |
|
%1) Имя файла с исходными сигналами в формате *.mat name ='record_1';
%2) Номер опорного сигнала, относительно которого
%вычисляется фаза
n_ref = 1;
%3) Число сигналов n_mic = 4;
%4) Шаг по времени [с] в записанных в PULSE сигналах dt = 6.1035*1e-05;
%5) Шаг, с которым делать fft [Гц]
df = 4;
% 6) Перекрытие выборок в долях от 0 до 1 в fft
Overlap = 0.667;
% |
------------------------------------------------------- |
% |
ОСНОВНАЯ ПРОГРАММА |
% |
------------------------------------------------------- |
Data=load(name); %загрузка файла с сигналами |
|
% |
--- Считываем сигналы |
for i=1:n_mic |
|
|
Signal(:,i) = getfield(Data, ['Channel_' int2str(i) |
'_Data']); |
|
end |
|
% |
--- Вычисляем авто- и кросс-спектры на основе fft |
Gxx = fft_auto(Signal,dt,df,Overlap);
Gxy = fft_cross(Signal,n_ref,dt,df,Overlap);
66
%--- |
Вычисляем амплитудный и фазовый спектр сигнала |
|
Ampl |
= sqrt(abs(Gxx)); %амплитуда [Па] |
|
Faza = angle(Gxy); |
%фаза [рад] |
|
%------------------------------------------------------- |
|
|
% |
ВЫВОД В ФАЙЛ АМПЛИТУДЫ |
%-------------------------------------------------------
fname = 'Amplituda.txt'; file=fopen(fname,'wt'); f = 0;
n = length(Ampl(:,1)); for i=1:n
fprintf(file,'%12.1f',f);
|
for j=1:n_mic |
|
fprintf(file,'%12.6f', Ampl(i,j)); |
|
end |
|
fprintf(file,'\n'); |
|
f = f+df; |
end |
|
fclose(file); |
|
% |
------------------------------------------------------- |
% |
ВЫВОД В ФАЙЛ ФАЗЫ |
% |
------------------------------------------------------- |
fname = 'Faza.txt'; file=fopen(fname,'wt'); f = 0;
n = length(Faza(:,1)); for i=1:n
fprintf(file,'%12.1f',f); for j=1:n_mic
fprintf(file,'%12.6f',Faza(i,j)); end
fprintf(file,'\n'); f = f+df;
end fclose(file);
Файл fft_auto.m
function Gxx = fft_auto(Signal,dt,df,Overlap)
n_length = length(Signal(:,1)); T = 1/df; %длина периода [с]
Time = dt*(n_length-1); %время записи всего сигнала [с]
67
%--- Число точек в одной выборке
N = T/dt; i=1;
while 2^i<N i=i+1;
end
N = 2^(i-1);
%--------------------------------------------------
% FFT %--------------------------------------------------
nn = length(Signal(1,:));
for ii=1:nn %цикл по сигналам
Sum = 0; Tn=0; k=1; i=1;
while Tn<=Time %цикл по выборкам Tn = Tn + N*dt;
if Tn>Time break;
end
%--- Применяем окно Ханнинга
tt = Signal(k:k+N-1,ii).*hanning(N); %--- Быстрое преобразование Фурье
Y = fft(tt,N);
%-- Накапливаем для взаимного спектра сумму по выборкам
Sum = Sum + conj(Y(1:N/2)).*Y(1:N/2); i=i+1; %подcчет числа выборок
%--- Учет перекрытия k = k+N;
Tn = Tn - T*Overlap;
k = k - int32(Overlap*N); if(k+N > n_length)
break; end end
%--- Усреднение по выборкам
Sxx = Sum/(i-1);
%--- Нормировка и масштабирование с учетом окна Ханнинга
Gxx(:,ii) = Sxx.*(2/N*(2*sin(pi/4)))^2; end
end
68
Файл fft_cross.m
function Gxy = fft_cross(Signal,n_ref,dt,df,Overlap)
n_length = length(Signal(:,1)); T = 1/df; %длина периода [с]
Time = dt*(n_length-1); %время записи всего сигнала [с]
%--- Число точек в одной выборке
N = T/dt; i=1;
while 2^i<N i=i+1; end
N = 2^(i-1);
% |
-------------------------------------------------- |
% |
FFT ДЛЯ ОПОРНОГО СИГНАЛА |
%-------------------------------------------------- |
|
Tn=0;
k=1;
i=1;
while Tn<=Time %цикл по выборкам Tn = Tn + N*dt;
if Tn>Time break; end
%--- Применяем окно Ханнинга
t_ref = Signal(k:k+N-1,n_ref).*hanning(N); X_ref(:,i) = fft(t_ref,N);
i=i+1;
%--- Учет перекрытия k = k+N;
Tn = Tn - T*Overlap;
k = k - int32(Overlap*N); if(k+N > n_length) break;
end
end |
|
%-------------------------------------------------- |
|
% |
FFT ДЛЯ ОСТАЛЬНЫХ СИГНАЛОВ |
%--------------------------------------------------
nn = length(Signal(1,:));
69
for ii=1:nn %цикл по сигналам
Sum=0;
Tn=0;
k=1;
i=1;
while Tn<=Time %цикл по выборкам
Tn = Tn + N*dt; if Tn>Time break;
end
%--- Применяем окно Ханнинга
tt = Signal(k:k+N-1,ii).*hanning(N); %--- Быстрое преобразование Фурье
Y = fft(tt,N);
%--- Накапливаем для взаимного спектра сумму по выборкам
Sum = Sum + conj(X_ref(1:N/2,i)).*Y(1:N/2); i=i+1; %подсчет числа выборок
%--- Учет перекрытия k = k+N;
Tn = Tn - T*Overlap;
k = k - int32(Overlap*N); if(k+N > n_length)
break; end end
%--- Усреднение по выборкам
Sxy = Sum/(i-1);
%--- Нормировка и масштабирование с учетом окна Ханнинга
Gxy(:,ii) = Sxy.*(2/N*(2*sin(pi/4)))^2; end
end
70