Научно-исследовательская деятельность во время практики Общая характеристика базы практики
Моя предквалификационная практика по направлению подготовки «Прикладная математика и информатика» проходила на базе кафедры информатики физико-математического факультета Камчатского государственного университета имени Витуса Беринга.
Физико-математический факультет – один из старейших факультетов вуза. С 1958 года на факультете осуществляется подготовка высококвалифицированных специалистов, которые находят применение в самых различных областях города и края. Факультет постоянно развивается и изменяется, сохраняя при этом глубокие исторические традиции образовательной и воспитательной деятельности.
Кафедра информатики образована как самостоятельное структурное подразделение решением Ученого совета в 1995 году. Кафедра информатики является динамично развивающимся подразделением Камчатского государственного университета имени Витуса Беринга.
Научно-исследовательская деятельность во время практики
С 1999 года в ИКИР ДВО РАН ведется непрерывный мониторинг сигналов геоакустической эмиссии (ГАЭ) на различных стадиях сейсмической активности. Для регистрации этих сигналов используется система четырех направленных керамических приемников с предусилителями, предназначенная для работы в звуковом диапазоне частот с чувствительностью в сотни мВ/Па и объединенная в единую конструкцию (гидрофон). Гидрофоны устанавливаются у дна естественных и искусственных водоемов, что исключает возникновение помех от источников океанических шумов, мешающих выявлению сигналов сейсмического происхождения.
Сигналы геоакустической эмиссии возникают в результате деформации окружающей среды (образование микроразломов, трещин, подвижки в существующих разломах). Каждый источник деформации порождает свой единичный импульс. Эти импульсы, аддитивно сливаясь и искажаясь, создают результирующий сигнал, регистрируемый гидрофоном.
Геоакустические данные хранятся в звуковом формате WAVE. Исходя из этого, была поставлена следующая задача на разработку. Необходимо разработать и написать программу, которая должна обладать следующими возможностями:
· Загрузку файлов в звуковом формате WAVE из выбранного каталога.
· Построение графиков сигналов.
· Выделение единичных геоакустических импульсов и отображение их временных форм.
· Сохранение данных.
На практике мною было разработано программное обеспечение, под названием WavScreen, для отображения сигналов звукового WAVE файла. Для разработки я использовала среду Visual Studio C++.
Программа состоит из модулей, представленных на рис.1,2,3.
Рис. 1,2,3. Программные модули проекта
Рис. 1.
Рис. 2.
Рис. 3.
Программа имеет 1 класс Form1 поля и методы которого присутствуют на Рис.2. и одну структуру WAVHEADER, поля которого присутствуют на Рис. 3.
При запуске программы нам предоставляется возможность выбрать Wave файл. Рис. 4.
Рис. 4.
После чего программа вырисовывает график импульсов выбранного звукового сигнала. Рис. 5.
Рис. 5.
При этом выдает информацию о частоте дискретизации файла, количестве каналов, глубине звучания и сжатии файла. Рис. 6.
Рис. 6.
Так же предоставляется возможность масштабирования графика. Рис. 7.
Рис. 7.
Код чтения wave файла.
/**********Открытие и считывание******/
//открытие wav файла
if ((wavFile = fopen((char*)(void*)Marshal::StringToHGlobalAnsi(fileDailog->FileName), "rb")) != 0)
{
//создаем пременную типа структуры wav файла и считываем в нее данные
fread(&header, sizeof(WAVHEADER), 1, wavFile);
//выделяем память под сигнал
wave = (short*)malloc(sizeof(short)*header.subchunk2Size / 2);
fread(wave, sizeof(short), header.subchunk2Size / 2, wavFile);
}
fclose(wavFile); //закрыть файл
int fs = header.sampleRate; //частота дискритизации
numSamples = header.subchunk2Size / 2; //длина массива
//выделение памяти
sDataInDouble = (double*)malloc(sizeof(double)*header.subchunk2Size / 2);
maxSample = minSample = (double)wave[0];
int k = 0; //переменная количества (проверка)
for (int i = 0; i<numSamples; i++)
{
sDataInDouble[i] = (double)wave[i]; //перевод из short в double
if (sDataInDouble[i] > maxSample)
maxSample = sDataInDouble[i];
if (sDataInDouble[i] < minSample)
minSample = sDataInDouble[i];
k++;
}
Код прорисовки графика импульсов
float x,y,x_last,y_last;
float scale = (maxSample - minSample)/ pictureBox1->Height;
int count = numSamples*size;
int count_move = (1-size)*shiftLoop*count;
int end = count_move+count;
if(end>=numSamples)
{
end = numSamples;
count_move = end - count;
}
int step = count/10;
int start;
if(count_move!=0) start= count_move;
else start = 0;
x = ((start-count_move)*1.0 / count)*pictureBox1->Width;
y = pictureBox1->Height / 2 + scale*avg(start);
for(int i = start;i<end;i+=SampleRate)
{
x_last = x;
y_last = y;
x = ((i-count_move)*1.0/count)*pictureBox1->Width;
y = pictureBox1->Height/2+ 2*scale*avg(i);
e->Graphics->DrawEllipse(gcnew Pen( Color::Black ),x,y,1.0,1.0);
e->Graphics->DrawLine(gcnew Pen(Color::Black), x_last,y_last,x,y);
}
|