О задаче конвертирования SEED файлов в форматы, понимаемые программными средствами океанологической информационно-аналитической системой (ОИАС) 1. Самое общее описание SEED-файлов есть в PDF документе. Нам не нужно все, надо только научиться читать и переводить в файлы, которые получаются на сейсмической станции на МЭС «м.Шульца» (зарегистрирована под именем MSH). Нам сейчас не нужны параметры всех предварительных фильтров и подобная информация, которая сопровождает файлы . Нам нужны : количество разных каналов, частота дискретизации (или время между отсчетами), дата и время начала записи, имена каналов (для текстовых файлов) 2. В общем случае в одном файле могут быть данные с нескольких сейсмических станций, обычно по три канала на каждую станцию (сигналы микросейсмических колебаний земли в направлениях на север, восток и вниз). Таким образом, каждый канал файла идентифицируется указанием уникального имени станции и направлением регистрации колебаний – N, E, Z. В нашем случае данные будут с одной станции - MSH, а направления указываются трехбуквенными аббревиатурами: BHE, BHZ, BHN. Первые 2 буквы наверное идентифицируют какие-то особенности сейсморегистратора, у нас всегда BH. 3. Похоже, данные каждого канала записаны блоками фиксированной длины. В нормальном режиме эти блоки следуют по времени один за другим, образуя слитную запись, но встречаются ситуации, когда некоторые фрагменты данных в канале пропущены. Эти пропуски в выходных файлах должны интерполироваться. В первом приближении – линейно, потом подумаем о более интеллектуальных способах интерполяции. Недостающие слева и справа концевые фрагменты тоже должны разумным образом «восстанавливаться» - экстраполироваться. 4. Имена SEED-файлов обычно хранят дату-время начала записи (но более точное время есть внутри самого файла), могут не иметь расширений, но иногда в расширение пишут имя станции, т.е. возможны варианты 2008-10-5-15-52-00 2008-10-5-15-52-00.msh 5. Должны поддерживаться два нижеописанных формата выходных данных. DAT-формат Не самый удачный, но давно используется в ТОИ и поэтому поддерживается в ОИАС. Файлы имеют расширение *.dat. Имена произвольные, часто тоже воспроизводят дату и время начала записи. Сначала идет заголовок файла, а затем сами данные. Заголовок занимает 128 байт и представляет собой следующую структуру (С++): struct DataHeader { float label; // метка файла (используется только при записи) float n_points; // количество отсчетов сигнала в одном канале short int n_chan; // количество каналов данных float timecad; // интервал дискретизации Т между отсчетами (в микросекундах) char begtime[30]; // время начала записи файла char endtime[30]; // время конца записи файла float ws1; // зарезервировано под дополнительные служебные параметры float ws2; // то же short int PO; // параметр осреднения отсчетов сигнала перед записью в файл char empty[44]; // место, зарезервированное для внесения дополнительной информации }; После заголовка идут данные, записанные покадрово: кадр 1, кадр 2, …, кадр n_points. Кадр – совокупность значений сигналов всех каналов (1 n_chan), соответствующих фиксированному моменту времени. Каждое значение сигнала кодируется вещественным числом одинарной точности – тип float (4 байта). Общий объем файла данных равен: 128 байт (“шапка”) + (n_points • n_chan • 4) байт (сами данные). Поля “begtime” и “endtime” записаны как строковые переменные в формате представления даты и времени, соответствующем версии операционной системы, которая была установлена на регистрирующем компьютере в момент проведения измерений, например, “Mon Oct 17 22:50:41 1994” , “1-2-1999 9:52:13” и т.д. Параметр осреднения “PO” - размер “окна осреднения” отсчетов сигнала (система регистрации рассчитывает среднее арифметическое каждых PO отсчетов с выхода АЦП и записывает их в файл). Примечание: В ранних версиях (до 1999 года) этот параметр должен был применяться при расчете частоты дискретизации сигналов, записанных в файлах PO 1000000 FD Гц . В поздних версиях этот параметр стал учитываться самой timecad системой регистрации путем перерасчета параметра timecad : timecad timecad PO . Соответственно для расчета частоты дискретизации внешними программами должна 1000000 Гц . применяться формула FD timecad Примеры DAT-файлов приведены на нашем FTP TXT - формат Текстовый формат. Содержит шапку, сопровождаемую необязательными комментариями. Дале идут данные в несколько столбцов – по числу каналов. Разделитель между отсчетами – одни или несколько пробелов. См. пример : # количество каналов 9 # количество точек 5843 # Частота дискретизации (Гц) 0.0333 # Дата начала записи (25-12-2009) 08-01-2009 # Время начала записи (17:34:36) 00:00:00 # Названия каналов (через ;) Скор.ветра;В порывах;Напр.ветра;Темп.возд.;Давление;Т.почвы;T.точки росы;Ср.напр. # Значения отсчётов сигнала (канал1 канал2 канал3 ...) 4.97 5.59 182.13 18.54 98.66 999.93 -8.03 18.32 182.11 5.13 5.28 183.54 18.54 98.66 999.93 -8.03 18.32 183.52 5.05 5.59 184.94 18.54 98.66 999.93 -8.03 18.32 184.92 5.05 5.05 4.82 4.74 5.05 5.59 5.28 5.28 5.28 5.59 187.40 184.59 183.18 184.24 188.46 18.54 18.54 18.54 18.54 18.54 98.66 98.66 98.66 98.66 98.66 999.93 999.93 999.93 999.93 999.93 -8.03 -8.03 -8.03 -8.03 -8.03 18.32 18.32 18.32 18.32 18.32 187.38 184.57 183.16 184.22 188.44 … Примечание: в DAT-файлах нет имен каналов. В TXT – есть, в последней информационной строке шапки, разделенные точкой с запятой. Поэтому в DAT файлы мы имена не будем писать (разве что подумаем и задействуем неиспользованное поле char empty[44] ). В TXT файлы имена писать будем, предлагаю на всякий случай имена формировать из имени станции и направления, т.е. использовать такие: MSH-BHN, MSHBHE, MSH-BHZ. 6. Программа конвертирования должна работать под Windows, вызываться из командной строки с параметрами. Например SEED_to_OIAS <входной файл> <выходной файл> /опция1 /опция2 … Нам надо различать тип выходного файла – DAT или TXT. Это можно реализовать на основе анализа расширения указанного выходного файла, или использовать отдельную опцию. Очень актуальна опция для указания временного промежутка выбираемой записи (датывремени начала данных и длины записи, например, в секундах). Если этой опции нет – по умолчанию выбирается все, что есть в файле. Может быть будут актуальными опции явного указания имени станции (MSH, PET, YAC, …), ориентации регистраторов (BHN, BHE, BHZ), составного имения канала (MSH-BHN, PET-BHE, YAC-BHZ, .). ! Это не первоочередная опция, пока по умолчанию путь берутся все каналы, которые есть в seed-файле. С окончательным видом командной строки определитесь сами. Имейте ввиду, что программа должна работать и как обычное пользовательское приложение, и в составе нашей ОИАС, где будут автоматически генерироваться командные строки для конвертирования файлов. Типовой запрос к ОИАС – предоставить в формате TXT или DAT данные с сейсмостанции MSH за период c 23.02.2009 13:44:31 по 23.02.2009 16:14:22 . ОИАС должна будет найти соответствующий seed-файл и сформировать командную строку на выборку заданного интервала. NB. Как вы понимаете, потенциально возможно, что одного SEED-файла может не хватить, потом подумаем, как поступать в подобных случаях. 7. Для отладки используйте программный комплекс DIMAS – его реально применяют сейсмологи Камчатского филиала Геофизической службы РАН для локализации положения эпицентра и оценки магнитуды землетрясений. Его надо распаковать в директории C:/Dimas, вызвать программу Dimas.exe, далее все интуитивно понятно. В частности можно открыть SEED-файлы, посмотреть на сигналы в разных видах (используйте меню View), сохранить данные в текстовые ASC-файлы (у них отличный от нашего текстовый формат), почитать справочную систему. Пока все. Можно начинать. PS. Игорь, оцените свою временную загруженность курсовой и прочими делами. Мне минимально функциональный вариант программы желательно получить до конца марта, лучше, если еще раньше. Может быть, порекомендуете еще кого-нибудь из своей группы, кто менее загружен и при этом способен справиться с задачей. Может быть, будете работать с кем-то в паре, хотя для этой задачи вполне достаточно одного программиста. Будут вопросы – пишите. ВК