Notifications
Clear all
Search result for: id10=WA 0812 2782 5310 Jasa Konsultasi Renovasi Rumah Dengan 100 Juta Terpercaya Magelang
Page 1 / 2
Next
Hi All,
We are using the Teensy 4.1 as a logger (Adafruit GPS is linked with the Teensy) for the MFAM SX. Below is the code for the Arduino IDE (Teensy), for people who might find it useful,
Roi
#include <NativeEthernet.h>
#include <SD.h>
// ---- NETWORK CONFIGURATION ----
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(192, 168, 2, 10);
IPAddress mfamIP(192, 168, 2, 2);
uint16_t mfamPort = 1000;
EthernetClient client;
// ---- PACKET STRUCTURE ----
const int PACKET_SIZE = 1380;
const int SAMPLE_SIZE = 32;
const int HEADER_SIZE = 16;
const int NUM_SAMPLES = 40;
const int SD_CHIP_SELECT = BUILTIN_SDCARD;
uint8_t buffer[PACKET_SIZE];
int bufferPos = 0;
// ---- SD CARD ----
File logFile;
bool sdReady = false;
unsigned long sampleCount = 0;
unsigned long fileStartTime = 0;
char filename[32];
// ---- AUXILIARY CHANNEL STORAGE ----
double gyroX = 0, gyroY = 0, gyroZ = 0, gyroT = 0;
double accelX = 0, accelY = 0, accelZ = 0, accelT = 0;
double compassX = 0, compassY = 0, compassZ = 0, compassT = 0;
// ---- GPS FROM ADAFRUIT MODULE ON SERIAL1 (Pin 0 = RX) ----
char gpsBuffer[256];
int gpsBufferPos = 0;
char gpsString[128] = "";
char gpsDate[12] = "00/00/00";
char gpsTime[16] = "00:00:00.000";
bool gpsFix = false;
uint8_t tsStatus = 0;
// ---- OUTPUT CONTROL ----
// Set to 1 to log every sample, 10 for 100Hz, 20 for 50Hz, etc.
const int DOWNSAMPLE_FACTOR = 1; // 50 Hz output
int downsampleCounter = 0;
// How many minutes per file. Set to 10, 20, 60, etc.
const int FILE_MINUTES = 10;
// ---- LED INDICATOR ----
// Off = starting up
// Very slow blink (every 3 sec) = connected and logging
// Fast blink (4/sec) = connected but no data arriving
// Solid on = no SD card
// 3 quick flashes then pause = cannot connect to MFAM
const int LED_PIN = 13;
unsigned long lastBlinkTime = 0;
bool ledState = false;
unsigned long lastDataTime = 0;
// ---- FUNCTION PROTOTYPES ----
void createNewFile();
void parsePacket(uint8_t* pkt);
void parseAuxChannels(uint8_t* sample, uint16_t frameID);
void readGPS();
void parseGPRMC(char* sentence);
void writeSample(unsigned long timestamp, uint16_t fiducial, double mag1, uint16_t mag1s,
double mag2, uint16_t mag2s, uint16_t sysStatus);
int16_t toSigned16(uint16_t val);
void createNewFile() {
static int fileNumber = 0;
// On first call, find the next available file number
if (fileNumber == 0) {
char testName[32];
for (int i = 1; i <= 99999; i++) {
snprintf(testName, sizeof(testName), "MFAM_%05d.txt", i);
if (!SD.exists(testName)) {
fileNumber = i - 1; // Will be incremented below
break;
}
}
}
fileNumber++;
snprintf(filename, sizeof(filename), "MFAM_%05d.txt", fileNumber);
logFile = SD.open(filename, FILE_WRITE);
if (logFile) {
logFile.println("Mag 1,Mag 2,Fid,SysS,Mg1S,Mg2S,Gyro X,Gyro Y,Gyro Z,Gyro T,Accel X,Accel Y,Accel Z,Accel T,CompassX,CompassY,CompassZ,Comp T,Date,Time,TS Status,GPS");
logFile.flush();
fileStartTime = millis();
Serial.print("Logging to: ");
Serial.println(filename);
} else {
Serial.print("ERROR: Could not create ");
Serial.println(filename);
}
}
void setup() {
Serial.begin(115200);
delay(2000);
// Start GPS serial port (Adafruit Ultimate GPS defaults to 9600 baud)
Serial1.begin(9600);
pinMode(LED_PIN, OUTPUT);
digitalWrite(LED_PIN, LOW);
memset(gpsString, 0, sizeof(gpsString));
// Initialize SD card
if (SD.begin(SD_CHIP_SELECT)) {
sdReady = true;
Serial.println("SD card ready.");
} else {
Serial.println("WARNING: No SD card found. Serial output only.");
digitalWrite(LED_PIN, HIGH);
}
// Initialize Ethernet
Ethernet.begin(mac, ip);
if (Ethernet.hardwareStatus() == EthernetNoHardware) {
Serial.println("ERROR: No Ethernet hardware found!");
while (true) {}
}
Serial.print("Teensy IP: ");
Serial.println(Ethernet.localIP());
Serial.print("Connecting to MFAM at ");
Serial.print(mfamIP);
Serial.print(":");
Serial.println(mfamPort);
if (client.connect(mfamIP, mfamPort)) {
Serial.println("Connected to MFAM!");
} else {
Serial.println("Connection failed!");
}
Serial.println("Waiting for GPS fix...");
if (sdReady) {
createNewFile();
}
Serial.println("Mag 1,Mag 2,Fid,SysS,Mg1S,Mg2S,Gyro X,Gyro Y,Gyro Z,Gyro T,Accel X,Accel Y,Accel Z,Accel T,CompassX,CompassY,CompassZ,Comp T,Date,Time,TS Status,GPS");
}
void loop() {
// Always read GPS data from Serial1
readGPS();
if (!client.connected()) {
Serial.println("Disconnected. Reconnecting...");
if (sdReady && logFile) {
logFile.flush();
}
for (int i = 0; i < 3; i++) {
digitalWrite(LED_PIN, HIGH);
delay(100);
digitalWrite(LED_PIN, LOW);
delay(100);
}
delay(1400);
client.connect(mfamIP, mfamPort);
if (client.connected()) {
lastDataTime = millis();
}
return;
}
while (client.available()) {
buffer[bufferPos] = client.read();
bufferPos++;
if (bufferPos >= PACKET_SIZE) {
parsePacket(buffer);
bufferPos = 0;
lastDataTime = millis();
}
}
// LED patterns
if (sdReady) {
if (millis() - lastDataTime > 3000) {
if (millis() - lastBlinkTime > 125) {
ledState = !ledState;
digitalWrite(LED_PIN, ledState ? HIGH : LOW);
lastBlinkTime = millis();
}
} else {
if (millis() - lastBlinkTime > 1500) {
ledState = !ledState;
digitalWrite(LED_PIN, ledState ? HIGH : LOW);
lastBlinkTime = millis();
}
}
}
// New file every FILE_MINUTES minutes
if (sdReady && logFile && (millis() - fileStartTime > (unsigned long)FILE_MINUTES * 60UL * 1000UL)) {
logFile.close();
createNewFile();
}
}
// ---- GPS READING FROM ADAFRUIT MODULE ON SERIAL1 ----
void readGPS() {
while (Serial1.available()) {
char c = Serial1.read();
if (c == '$') {
gpsBufferPos = 0;
}
if (gpsBufferPos < (int)sizeof(gpsBuffer) - 1) {
gpsBuffer[gpsBufferPos] = c;
gpsBufferPos++;
}
if (c == '\n' || c == '\r') {
gpsBuffer[gpsBufferPos] = '\0';
if (strncmp(gpsBuffer, "$GPRMC", 6) == 0 || strncmp(gpsBuffer, "$GNRMC", 6) == 0) {
// Save full sentence for logging
strncpy(gpsString, gpsBuffer, sizeof(gpsString) - 1);
gpsString[sizeof(gpsString) - 1] = '\0';
// Remove trailing newline/carriage return
int slen = strlen(gpsString);
while (slen > 0 && (gpsString[slen - 1] == '\n' || gpsString[slen - 1] == '\r')) {
gpsString[slen - 1] = '\0';
slen--;
}
parseGPRMC(gpsBuffer);
}
gpsBufferPos = 0;
}
}
}
void parseGPRMC(char* sentence) {
// $GPRMC,HHMMSS.sss,A,lat,N,lon,W,speed,course,DDMMYY,...
char copy[256];
strncpy(copy, sentence, sizeof(copy) - 1);
copy[sizeof(copy) - 1] = '\0';
char* token = strtok(copy, ",");
int field = 0;
while (token != NULL && field < 10) {
switch (field) {
case 1: // Time
if (strlen(token) >= 6) {
snprintf(gpsTime, sizeof(gpsTime), "%c%c:%c%c:%s",
token[0], token[1], token[2], token[3], token + 4);
}
break;
case 2: // Fix status
gpsFix = (token[0] == 'A');
break;
case 9: // Date
if (strlen(token) >= 6) {
snprintf(gpsDate, sizeof(gpsDate), "%c%c/%c%c/%c%c",
token[0], token[1], token[2], token[3], token[4], token[5]);
}
break;
}
token = strtok(NULL, ",");
field++;
}
// Update GPS bits of tsStatus
tsStatus = (tsStatus & 0x0C); // Keep MFAM PPS bits (3,2)
tsStatus |= 0x01; // Bit 0: RMC sentence received
if (gpsFix) {
tsStatus |= 0x02; // Bit 1: GPS fix valid
}
}
// ---- MFAM DATA PARSING ----
int16_t toSigned16(uint16_t val) {
if (val > 32767) return (int16_t)(val - 65536);
return (int16_t)val;
}
void parseAuxChannels(uint8_t* sample, uint16_t frameID) {
uint8_t auxID = (frameID >> 11) & 0x07;
uint16_t aux0 = sample[16] | (sample[17] << 8);
uint16_t aux1 = sample[18] | (sample[19] << 8);
uint16_t aux2 = sample[20] | (sample[21] << 8);
uint16_t aux3 = sample[22] | (sample[23] << 8);
switch (auxID) {
case 1:
compassX = toSigned16(aux0) / 0.01333333;
compassY = toSigned16(aux1) / 0.01333333;
compassZ = toSigned16(aux2) / 0.01333333;
compassT = toSigned16(aux3) / 128.0 + 25.0;
break;
case 2:
gyroX = toSigned16(aux0) / 16.384;
gyroY = toSigned16(aux1) / 16.384;
gyroZ = toSigned16(aux2) / 16.384;
gyroT = toSigned16(aux3) / 512.0 + 23.0;
break;
case 4:
accelX = toSigned16(aux0) / 16384.0;
accelY = toSigned16(aux1) / 16384.0;
accelZ = toSigned16(aux2) / 16384.0;
accelT = toSigned16(aux3) / 512.0 + 23.0;
break;
default:
break;
}
}
void writeSample(unsigned long timestamp, uint16_t fiducial, double mag1, uint16_t mag1s,
double mag2, uint16_t mag2s, uint16_t sysStatus) {
char tsStr[12];
snprintf(tsStr, sizeof(tsStr), "%d%d%d%d%d%d%d%d",
(tsStatus >> 7) & 1, (tsStatus >> 6) & 1, (tsStatus >> 5) & 1, (tsStatus >> 4) & 1,
(tsStatus >> 3) & 1, (tsStatus >> 2) & 1, (tsStatus >> 1) & 1, tsStatus & 1);
char sysHex[8], m1sHex[8], m2sHex[8];
snprintf(sysHex, sizeof(sysHex), "%04X", sysStatus);
snprintf(m1sHex, sizeof(m1sHex), "%04X", mag1s);
snprintf(m2sHex, sizeof(m2sHex), "%04X", mag2s);
char line[512];
snprintf(line, sizeof(line),
"%10.4f,%10.4f,%4d,%s,%s,%s,%10.2f,%10.2f,%10.2f,%5.1f,%8.5f,%8.5f,%8.5f,%5.1f,%8.1f,%8.1f,%8.1f,%5.1f,%s,%s,%s,%s",
mag1, mag2, fiducial, sysHex, m1sHex, m2sHex,
gyroX, gyroY, gyroZ, gyroT,
accelX, accelY, accelZ, accelT,
compassX, compassY, compassZ, compassT,
gpsDate, gpsTime, tsStr, gpsString);
if (sdReady && logFile) {
logFile.println(line);
if (sampleCount % 1000 == 0) {
logFile.flush();
}
}
if (sampleCount % 500 == 0) {
Serial.println(line);
}
}
void parsePacket(uint8_t* pkt) {
// Get PPS bits from MFAM system status
uint16_t firstSysStatus = pkt[HEADER_SIZE + 2] | (pkt[HEADER_SIZE + 3] << 8);
uint8_t mfamPPSbits = (firstSysStatus >> 12) & 0x0C;
tsStatus = (tsStatus & 0x03) | mfamPPSbits;
for (int i = 0; i < NUM_SAMPLES; i++) {
int offset = HEADER_SIZE + (i * SAMPLE_SIZE);
uint16_t frameID = pkt[offset] | (pkt[offset + 1] << 8);
uint16_t fiducial = frameID & 0x07FF;
uint16_t sysStatus = pkt[offset + 2] | (pkt[offset + 3] << 8);
uint32_t mag1raw = pkt[offset + 4] | (pkt[offset + 5] << 8) |
((uint32_t)pkt[offset + 6] << 16) | ((uint32_t)pkt[offset + 7] << 24);
double mag1 = mag1raw * 0.05 / 1000.0;
uint16_t mag1status = pkt[offset + 8] | (pkt[offset + 9] << 8);
uint32_t mag2raw = pkt[offset + 10] | (pkt[offset + 11] << 8) |
((uint32_t)pkt[offset + 12] << 16) | ((uint32_t)pkt[offset + 13] << 24);
double mag2 = mag2raw * 0.05 / 1000.0;
uint16_t mag2status = pkt[offset + 14] | (pkt[offset + 15] << 8);
parseAuxChannels(pkt + offset, frameID);
sampleCount++;
downsampleCounter++;
if (downsampleCounter >= DOWNSAMPLE_FACTOR) {
downsampleCounter = 0;
writeSample(millis(), fiducial, mag1, mag1status, mag2, mag2status, sysStatus);
}
}
}
🧭 How to Import Geophone Elevation Data into Plotrefa
If you have measured relative or absolute geophone elevations, you can incorporate these into your velocity model in Plotrefa to produce more geologically realistic results.
📄 Step 1: Prepare the Elevation File
Create an ASCII text file with two columns:
The left column contains geophone horizontal positions (in meters or feet).
The right column contains the corresponding elevation values.
Example:
0.0 100.0 5.0 101.2 10.0 101.5 ... 100.0 89.0
✅ Tip: While it’s recommended to have an elevation for each geophone, it’s not strictly required. Plotrefa will interpolate missing elevations as needed.
📥 Step 2: Import the Elevation Data
Open Plotrefa.
From the top menu, go to:Velocity model > Import elevation data file
Navigate to your file and double-click it to import.📌 Note: There is no default file extension, so ensure your file is visible in the dialog.
The elevation profile will now display alongside your data.
🎯 Step 3: Interpret Your Data
Once your elevation profile is imported:
Proceed with your velocity modeling or time-term inversion.
The resulting velocity model will be drawn relative to the elevation profile, accounting for topography.
Example Outputs:
Attachment : seismic_velocity_profile.png
Hello, I wanted to try our MagEditor software, but it didn't accept any of the files I converted to 10 Hz, 20 Hz, 50 Hz, 100 Hz, and 1000 Hz CSV formats from Survey Manager. What's the reason and how can I fix it? My operating system is Windows 11 Home Single, and my computer specifications are:Processor: Intel(R) Core(TM) i9-14900HX (2.20 GHz)Installed RAM: 32.0 GB (usable: 31.6 GB)System type: 64-bit operating system, x64-based processor.
Hello everyone, my name is Devan, and I would like to open a discussion about finding a lost MagArrow.
To give you some background, I lost my MagArrow II while it was mounted below the DJI M400 during a flight mission in a highly dense forest. We have the drone flight log, which indicates that it was stuck in a tree within a 50 m radius of the last known location. We have searched the whole area, but due to a highly dense forest and steep terrain, it was very difficult to find the MagArrow II and the drone on foot.
For more than a month, I presume it was still perched within the tree canopy. And now we have bought a new MagArrow II to continue our survey. In this case, I desperately want to find and retrieve the lost MagArrow using the new device.
I have an idea that if I conduct a 5 m spacing grid in both East-West and North-South directions within a 100-meter radius of the last known location, we could eventually narrow down our perimeter by finding an anomaly that indicates the lost device. Therefore, I have a few questions:1. How magnetic is the drone and the MagArrow II?2. Is it feasible to find the old MagArrow with the new MagArrow with the stated method? Alternatively, do you have any effective suggestions for a different approach?
I appreciate any insights you can provide. Thank you!
The 1PPS pulse phase locks and synchronizes the sample interval to be in lock step with the GPS. Thus once locked there will always be 1000 samples per second, with the sample beginning time precisely lined up with the 1 PPS edge. The 10 MHz input is for a different function. This input phase locks the 40 MHz master reference oscillator to the incoming 10 MHz, which is usually a GPS disciplined reference oscillator or atomic clock (in other words exactly 10 MHz). This phase locks the 40 MHz reference oscillator to exactly 40 MHz. The 40 MHz oscillator is the time base reference for calculating the Larmor frequency, and therefor the magnetic field value. Even though the 40MHz oscillator is really good even without the 10 MHz input, there is some drift in the 40 MHz over time (mostly thermal drift and some aging). For some applications where they need to measure very low frequency and low amplitude changes in the magnetic field the 10 MHz input will allow drifts in the reference oscillator to be removed. Without that it would be impossible to distinguish between reference oscillator drifts and low frequency low amplitude changes in the magnetic field.
The connector for the 10 MHz input is SMB RF connector from Molex.
If you must simulate the 1 PPS signal in a GPS denied environment, please be aware of certain requirements of the 1 PPS signal.
1. The lock range for the 1 PPS input pulse is very narrow. The simulated 1 PPS signal must be within 100 ppm of an exact 1 Hz PPS signal (100us).
2. Timing jitter must be small (less than 0.5 ppm, 0.5us) too. If you are setting a GPIO pin on a microcontroller, there may be some concern about timing jitter due to interrupt latency or other processor tasks delaying the I/O pin toggle. Any rectangular waveform should work but the leading edge must be very close to 1 Hertz. It is the positive edge that specifies the 1 second rollover.
To perform a heading error compensation flight, fly the UAV with MagArrow attached up to 100-150 meters in a low gradient area. Hover the drone in a single spot and rotate it slowly through 360 degrees while logging magnetic data the with MagArrow. By keeping the drone location stationary the mag field will be also be constant. Thus we are only left with the sensor reading as a function of orientation.
The MagArrow has two MFAM sensors, and the way they are arranged ensures that when one sensor is in its dead zone the other is at its optimum orientation, and vice versa. The readings from the two sensors are combined to produce one magnetometer reading only. The two sensor readings are weighted such that as one sensor approaches its dead zone it is weighted much less (down to zero in the dead zone) while the optimum oriented sensor is weighted more fully. Thus you get only one magnetometer reading with no dead zones whatsoever. In addition, the weighted averaging of the sensors still does partial heading error cancelling.
This is a very common question and for the best answer, please read page 45 of the Applications Manual for Portable Magnetometers.
To give an idea, the rule of thumb is that 1 ton of steel will give 1nT at 100 ft. The distortion caused by the steel in the earth’s field falls off as the cube with distance and is linear with mass. Therefore, at 50 ft, 250 lbs will give 1nT, at 25 ft 30 lbs will give 1nT, at 12 ft 4 lbs will give 1nT. Cables and pipelines fall off at somewhat a different rate (inverse square) so can be seen further for a given mass.
The time associated with each data point in a SEG-2 data file generated by a Geode is related to the time of the
“trigger” event which was instrumental in the production of the file and its content.
The Trigger Master and Trigger Distribution
The trigger event occurs at the Geode designated within the Controller software as the Trigger Master.
Although all Geodes are capable of being Trigger Masters, there must be one and only one Trigger Master in
any properly functioning Geode system. The Controller automatically takes care of this requirement when the
designation is made by a user, and when the system is established at the time of Controller start-up based on a
previous designation (or a default setting in the case of a “new survey”). All other Geodes in the system will
have their Trigger Master circuit disabled. A trigger event can be initiated by an external electrical pulse
provided to the trigger input connector of the Trigger Master Geode, or by a command sent via Ethernet from
the Controller to the Trigger Master (usually for test purposes), but only when all conditions are satisfied to
allow data recording. There is also a special trigger initiation situation, called “self-triggering” which will not
be discussed further here.
Upon acceptance of a trigger event, the Trigger Master will distribute the trigger signal to all Geodes in the
system, itself included, via an RS-485 network that resides within the digital interconnect cabling. (Proper
termination of this RS-485 network is automatically taken care of by the Controller.) The trigger signal is
propagated through the cabling and Geodes at the nominal speed of 70% of the speed of light, or approximately
2.1x10^8 m/sec. The maximum distance of successful propagation depends on a number of factors such as the
number of Geodes involved, the noise environment, the quality of the cables, and the acceptable amount of
timing uncertainty for the particular application. Distances approaching or exceeding 1km should be given
careful attention in this regard. In a 3-D Geode system involving LTUs, each LTU, unlike a Geode, will
reconstruct the trigger signal before sending it on, effectively confining the maximum distance issue to each
sub-network separated by LTUs. The penalty is an additional delay of about 100nS for each LTU in the route.
The External Trigger Circuit
The external trigger input is capacitively coupled, with a 2mS time constant, to the midpoint of a resistive
voltage divider. The voltage difference between the two ends of the divider constitute a voltage "window",
which size is set by the trigger sensitivity parameter and can range from essentially zero at the highest
sensitivity, to about +/- 2.5V at the lowest sensitivity. The Geode will trigger (if enabled) if and when the
coupled signal exceeds the window, in either direction (i.e., positive or negative going). The signal, after the
capacitor, is clamped by diodes to the range between the trigger signal ground and +5VDC.
The trigger detector output is disabled when the system is disarmed, during a parameter change, and during a
shot, up to the trigger hold-off time after the end of the shot. The trigger hold-off time is a parameter set by the
user.
Preceding the coupling capacitor (i.e., essentially the node accessible at pin A of the external connector), there
is a 3.3K-Ohm pull-up resistor to +5VDC (relative to pin B). Also a fast transient suppressor clamps the input
at about +/-14VDC. It is advised that the DC + AC level of any voltage applied to pin A relative to pin B be
kept within the range of +/-7V, giving some margin of safety.
If a DC voltage somewhat less than +5VDC is applied when the connector is first mated, the instrument may
trigger at that moment. But, subsequently, because of the capacitive coupling, it will trigger on the next positive
or negative going pulse that exceeds the window level. If the duration of the applied voltage pulse is less than
the record length + delay time + hold-off time, then the Geode will effectively be ready to trigger on the same
edge of another similar pulse.
Sub-sample Synchronization
The Geode supports a sub-sample timing synchronization feature used for synchronizing the data acquisition
after a trigger event to the distributed trigger signal, so that subsequent time points will be known to within 1/32
(~1/20 at the fastest two sampling rates) sample interval. It does this by increasing the sample interval at the
trigger time by 0 to 31/32 of a sample interval in increments of 1/32, so that the first sample after the trigger
would represent a time of one sample interval after the trigger event, with a tolerance within 1/32 of a sample
interval. The following samples continue from there at the expected intervals. For example, with a selected
sampling interval of ¼ mS and a recording delay of 0mS, the first sample in the recorded file for each channel
would represent data at 250 to 258uS after the trigger event.
This of course potentially introduces a small discontinuity at the time of the trigger, observable depending on
the nature of the channel waveform(s). (The zero-phase anti-alias filter will smear the discontinuity into the
nearby samples both before and after, consistent with the bandwidth of the filter.) Sub-sample synchronization
can be disabled if it is deemed to be detrimental for the particular application, at the expense of losing the 1/32
interval timing accuracy.
Timing Errors
The principal errors in Geode timing are of two types: those associated with the trigger mechanism and which
are static over the duration of the record, and those associated with the time base and which change over the
duration of the record. Excluding the trigger propagation delay mentioned above, the trigger timing uncertainty
is about 1uS. The known fixed errors have been lumped together and are reported in the SEG-2 file trace
headers as channel SKEW. (The actual channel skew is zero, since all channels are effectively sampled
simultaneously, but the SKEW value in the header is used as the only place permitting small timing corrections.
Note that the SKEW value for every channel is identical.) If the size of this correction is important to the
application, the SKEW value should be added to the calculated time points when the data is being processed.
The Geode time base has a +/-15ppm stability over temperature (-20C to +70C) and component variations.
Thus time drift relative to absolute time and relative to other Geodes is possible. (However, all channels within
any Geode enclosure use the same time base, so there is no relative drift between channels in the same
enclosure.) Therefore timing uncertainty increases from that existing at the time of the trigger until the time of
the next trigger (or end of record).
Special Timing Issues Involved with “Continuous” Recording
“Continuous” recording is a method that allows unending 100% time coverage with recorded Geode data. It
produces a series of time-overlapped records created by the use of a negative time delay set equal to the record
length such that each record consists of completed history at the time of the trigger event. This technique
circumvents the problem of data transmission overrunning data acquisition. The principle constraint is that the
cycle time from trigger to trigger must always be less than the chosen record length. Otherwise, gaps rather
than overlap would result. Commonly it is used with GPSderived
triggering in order to provide time-stamping of each trigger event.
Upon consideration of the above, it will become clear that the time-stamp associated with a particular trigger
event will pertain to the data in the following record, not to the data in the record in which the time-stamp is
written. This comes about because the trigger event ends the record.
Because there is data overlap between records, the precise trigger point in the following record at which the
time-stamp applies can be found by comparison of the data values at the end of the former record with those
near the beginning of the subsequent record. The overlapping data will be exactly identical in both records
(since they are read from the same memory location, twice). The earliest data in the subsequent record that
goes beyond the data of the previous record is the data that is one sample interval (assuming sub-sample
synchronization is enabled) past the time-stamp.
Note well that this comparison must be made independently for at least one channel of each 8-channel Geode
board set, because the discrete time at which data values are written to the memory buffer, relative to the trigger
event, is a function of each individual board set in the Geode system.
Correct GPS Time-Stamping
There are differences between various GPS models that can affect accurate time stamping. The 1PPS signal
from a GPS has a “timing edge” and return edge, of which only the former is the true whole-second edge.
Some models use a rising edge as the timing edge, some the falling edge, and some have it selectable. Consult
the GPS manual to determine the definition of its timing edge. As indicated earlier, the Geode can be triggered
on either a rising or falling edge. It is important to insure that the Geode is being triggered on the proper edge
in order to avoid timing that may be a fraction of a second off. This is expanded upon below.
Some GPS units provide a very narrow timing pulse, others one that has a nearly 50/50 duty cycle. For the
narrow pulse units, almost certainly it is the leading edge (rising or falling) that is the “timing edge”. This case
can be easily handled by using the Geode Trigger Hold-off feature. If a 10-second cycle time is desired, set the
Trigger Hold-off time to about 9.5 seconds. In this case, there is a very small chance that the very first trigger
could occur on the wrong (trailing) edge, but from then on the leading edge will be used as the triggering edge.
If the GPS provides a 50/50 duty cycle edge, and it is not alterable, then the Geode by itself could as easily start
on the wrong edge as on the correct timing edge, and continue thusly until restarted. For this case, Geometrics
can provide a Trigger Timing Interface Box (TTIB) that will correct the situation. The TTIB can be
programmed to respond only to the correct edge (rising or falling), change the polarity if needed, and gate
through only one of every N 1PPS pulses, where N is programmable. (The TTIB also incorporates an alarm
system that can provide a remote alert if a record is missed.)
Another potential issue comes from the variations between GPS models of the time that the serial time string
(containing the time value of the associated 1PPS) is issued relative to the 1PPS itself. The Geode Controller
attempts to pick the correct serial string based on a calculation involving the known record length, the PC times,
and the trigger notification message from the Geodes. But if the GPS issues the serial string at an unusual time
(and the time has been seen to vary somewhat with a given GPS unit) then it could pick up the incorrect time,
off by 1 second. If rare, it can be subsequently detected and corrected during data processing, but if consistent
it may not be easily detected. Again, the TTIB can accommodate the situation by only gating through to the Controller PC the string belonging to the gated-through 1PPS pulse. The Controller Serial Input Time Window can then safely be widened to 2 seconds (assuming the
cycle time is more than 2 seconds) if need be, to expand the Controller’s search for the string around the calculated trigger time.
GPS Clocks, used in Continuous Recording systems to provide 1 pps signal to trigger seismograph. Also provides GPZDA serial string to stamp records with UTC for Continuous Recording and Self-Triggering systems. Includes cable set to connect clock to PC, seismograph, and 12V DC power.
There are three GPS clock options for the Geode we sell. They are:
GS-101B GPS clock from Orca, 1 pps accurate to within 100 ns of the precise time. Includes waterproof antenna with separate electronics module, with display of time and other indicators. Provides time base during loss of satellite lock. Options to provide 1 pps referenced to an IRIG-B generating source and to enclose electronics module in hardened aluminum case (P/N 25374-59).
A101 Smart Antenna GPS clock from Hemisphere GPS, 1 pps accurate to within 20 ns of the precise time. Includes waterproof antenna with integrated electronics, with indicator of satellite lock, no display of time. Provides time base during loss of satellite lock.
GC200 GPS clock from San Jose GPS, 1 pps accurate to within 1 μs of the precise time. Includes waterproof antenna with integrated electronics, no display of time or other indicators. No time base during loss of satellite lock.
The level of precision needed determines which GPS clock is best suited for the job. Typically the GC200 fulfills the needs of 95% of our clients.
Low Cut: , 10, 15, 25, 35, 50, 70, 100, 140, 200, 250, 280, 400
Notch: 50, 60, 150, 180
High Cut: 32, 64,125, 250, 500 or 1000 Hz
The first recommendation for cases when you are having trouble getting sufficient signal to noise would be to increase your signal via stacking the data with multiple source events or get a more powerful seismic source. This will usually produce better results than the application of filters.
Another approach would be acquire data when the noise sources are less present. That may mean collecting data at night when the area is closed or the traffic is less. Early morning can be better for areas where the wind tends to increase during the day.
The selection of filters is very site dependent and can depend on a variety of factors as well as the type of survey being performed.
1) Typically the Notch filters are to remove noise due to electrical power lines (50 or 60 Hz and their harmonic frequencies depending on the country you are in).
2) Low cut filters are generally used for noise due to wind and moving vehicles, but care must be taken not to remove too much bandwidth from generated seismic signal. Often the noise sources have the same frequencies as the seismic data you are interested in and can’t be effectively removed using frequency filtering.
3) High cut filters can be used to remove noise from high frequency vibratory signals such as compressors or airplanes.
In general it is best to record the data without any frequency filters and filter in post processing or only on the displayed data in our software. It will be a matter of experimentation to determine the best filters at your site.
Modern 24-bit seismographs (Geode, Stratavisor, ES-3000, etc) have a much wider range of signal amplitudes that they can record accurately. This means that they can still accurately record smaller seismic signals even in the presence of larger noise signals. Therefore there is a reduced need for analog filters that are applied prior to digitization of the signals.
Digital filters are more flexible and can be more specifically applied to the noise that is recorded rather than the “Broader Brush” of analog filters. Digital filters also have the benefit of being able to go back to the original data if the wrong filter is applied, which is not the case with Analog filters. The general approach in the seismic industry is now to record everything – including the noise – and the filter out what you don’t want later.
Degaussing is a method by which magnetic domains in metals or magnetic inclusions in other materials are randomized so that net magnetization is minimized. One tool do accomplish this is the “Bulk Tape Eraser” designed to erase data tapes.
The method works because the “Bulk Tape Eraser” generates an alternating electromagnetic field, which flips the magnetization of the magnetic domains in the material at 100 or 120 reversals per second (50 or 60 hertz). As the operator slowly removes the “Eraser” from the vicinity of the magnetized material, the magnetic domains of the material individually freeze in one orientation or the other, leaving the domains in a randomized orientation with minimal net magnetic effect.
Degaussing with a Bulk Tape Eraser
*The procedure is straight forward. Plug the Eraser into an extension cord or wall socket (the Eraser cord is usually short). Holding the object to be degaussed in one hand, depress the Eraser start button and move it towards the object. Once close to the object or section of material, begin moving the Eraser with a small circular motion and then increase the radius of the circle as you draw the Eraser away from the object. DO NOT STOP the Eraser closer than three feet from the object being degaussed or it will become strongly magnetized in one direction! If this happens accidentally, just redo the degaussing procedure over again starting from the beginning.
*For larger objects, run the Eraser along tubing or struts in a circular motion to “bathe” the objects in an oscillating field. Be sure to cover the entire surface area of the object being degaussed. Then slowly withdraw the eraser (while still running) until it is at least 3 feet away. Then release the power switch.
*The magnetometer can be used to check the sufficiency of the degaussing procedure. After degaussing, rotate the object close to an operating magnetometer to see if there is a response from the magnetometer. This is best done with a cesium magnetometer operated in gradient mode, but it can be done with a single sensor with one person watching the result and another moving the object near the sensor.
Degaussing Sensor Mount
Degaussing Pack Frame
Degaussing GPS Antenna
Limitations of Degaussing with a Bulk Eraser
Depth of penetration: The Bulk Tape Eraser can only randomize materials to a certain depth. This is due to the size of the gap in the degaussing unit. A small gap makes for a very large degaussing field at the gap (about 2000 gauss, or 200 million nanoteslas), but also for a very rapid falloff away from the gap. Bulk tape erasers are optimized to penetrate through the thickness of a typical video tape. This gives a typical depth of an inch (2.5 cm). Deeper objects may need to be degaussed using stronger degaussing fields.
Degaussing through a conductive chassis: An additional problem occurs when the object being degaussed is covered by a conductive surface (such as a sheet of aluminum). The degaussing field will generate huge eddy currents in the conductive surface which will generate its own opposing magnetic field. This will be evident to the operator because the opposing field will cause the degausser to buzz loudly. This doesn’t hurt anything, but be aware that the degaussing field on the other side of the conductive surface will be attenuated by some amount, so it may take a longer amount of time or multiple passes to degauss the object.
The Bulk Tape Eraser is a short duty cycle device. It varies a little from manufacturer to manufacturer, but typically it is rated for 1 minute on and 5 to 10 minutes off. Most have an internal thermal cutout that will shut it off if it overheats, and if tripped may take 20 minutes or more to cool down enough to reset.
Frequently Asked Questions
Why is degaussing needed? Degaussing misaligns magnetic domains so that there is no net permanent magnetization that would give an offset or heading error to magnetic field readings. Sensitive magnetometers such as those manufactured by Geometrics can be effected by nearby materials that are not sufficiently magnetically randomized. Degaussing does not alter the induced magnetic moment of any material. A piece of steel, when degaussed, is still magnetic because it draws and concentrates the earth’s field through it. However, a degaussed piece of steel is much less magnetic than a permanently magnetized piece.
How much effect does it have on magnetic signatures? Depending on the distance from the sensor to the magnetic object and the amount of magnetization, the effects can be very large -10’s of nanoTeslas. Many materials including brass, aluminum, fiberglass and other non-ferrous materials may have some ferrous materials in them naturally or acquired during the manufacturing process. Other materials such as ‘non-magnetic’ stainless steel are hugely magnetic when compared to the sensitivity of our magnetometers. Degaussing can decrease the magnetic effect of these materials by a factor of 10 or more.
What should I degauss? The operator should degauss any metallic object that is near the sensor. By “near”, in general we mean within 1 meter but certainly those metallic and non-metallic materials within a few centimeters of the sensor must be considered (this also includes the sensor itself, which could have minute magnetic inclusions in the sensor materials). This could also include GPS antennas, magnetometer cart assemblies (including brass fittings, bolts, clamps), buckles, eyeglasses, boots and parts of backpacks. We would also do occasional degaussing of the G-858 console and batteries.
Will degaussing hurt anything? This is a tough question since it is impossible to imagine every conceivable system arrangement that could be subjected to degaussing. In all our experience we have never had any electronics device hurt by the degaussing process. This is because the induced voltages from the degausser are low, and the electronics components have a fairly high impedance at low voltages. It would be safer to degauss electronics while the power to the electronics is turned off in case the small induced voltages cause the device to operate incorrectly. It is always safe to degauss any of Geometrics’ manufactured equipment (including the sensor). On the other hand, here are some things to consider when degaussing some types of objects. Large conductive planes or rings will have large circulating currents induced in them by the degausser (but the voltages are still very small). This induced current will produce an opposing magnetic field that will fight the degaussing field – causing both the degausser and the conductive plane/loop to vibrate substantially. If the device being degaussed is sensitive to this vibration (intricate mechanical workings and the like) then this is a possible route for causing some damage. Also, sometimes objects being degaussed have embedded magnets that are necessary for the device to operate properly. A good example is a device with a permanent magnet speaker inside. Generally it is hard to degauss a magnetically hard permanent magnet, but the degausser is strong enough to at least partially do the job. A partially degaussed speaker (or other object that requires a magnet to work right) isn’t going to work the same as before – so be aware. [Things that have magnets in them shouldn’t be used near magnetometers anyway.]
When to degauss and how often? We recommend that parts close to the sensor be degaussed before every major survey event. In other words on a weekly or monthly basis or before a new survey. Remnant magnetism or “Perm” can be “picked up” (domains realigned) when the materials are static in the earth’s magnetic field for a period of time. The amount of time required to acquire a “Perm” can be from days to weeks or months depending on the magnetic “hardness” of the materials. This is also known as the materials “susceptibility”, that is, susceptibility to being magnetized. Also, magnets are everywhere, and they can easily and unknowingly ‘perm’ up parts on or near the sensor. Magnetic screwdrivers, for example, are great for holding steel screws on the end of the driver while starting them into a threaded hole, but they are bad news near any magnetometer sensors.
The batteries used in the portable magnetometer instruments are lead-acid gelled electrolyte batteries. The choice of this type of battery was dictated by their non-magnetic internal construction. We “magnetically compensate” these batteries to further reduce their magnetic signature. We do this with bucking coils which are mounted against the battery surfaces and then an external wrap applied.
The batteries should be charged using the charger furnished with the instrument. These chargers are fully automatic and designed to do the best job of charging and maintaining the batteries for long life. All of the chargers are equipped with lights indicating when the battery is being charged and when the charging cycle is completed.
The battery packs will provide the most operating cycles when they are fully charged after each use. The number of operating cycles can vary from 250 cycles to above 1000 cycles depending on how deep the discharge was and how soon the battery is charged after use.
A 30% discharge per cycle may result in a lifetime of 1000 cycles or more, whereas a 100% discharge per cycle can result in only 250 cycles. As a rule the magnetometer will shut down when the battery is discharged to about 20% of full voltage. This is to ensure proper shutdown of the instrument.
It is very important to recharge the battery as soon as possible after use so the maximum life can be expected from the pack. If the discharged pack is left to charge “when we get back from the field” the pack can suffer from “sulphation”. This is a high-resistance buildup in the battery which may render the battery unusable.
If a battery of this type must be stored for an extended period, it must be stored in a fully-charged condition. If such a battery is stored discharged and subject to below-freezing conditions, it is likely to freeze and be subsequently unusable.
All Lead-Acid batteries must be maintained when in storage. This means that the user must recharge each pack at least once a month. Lead Acid batteries will self-discharge due to stray internal resistances, causing very small drain currents. Thus the maintenance requirement for monthly recharging is critical to long battery life. Do not leave the charger on all the time during storage. Also it is very important to use discharge the batteries on a regular basis otherwise the lifespan will be severely shortened. For more information contact our Support Department.
The subject of "Bandwidth" comes up often when discussing cesium magnetometers. There are two different aspects of bandwidth that are different and need to be differentiated:
The cesium magnetometer uses an atomic resonance of the Cs 133 atom (see note 1 below) which varies proportional to the ambient magnetic field. This atomic resonance is used to set/control the frequency of an oscillator. Therefore the output signal from the magnetometer is a *frequency* which is proportional to the earth's magnetic field at a coefficient of 3.498572 Hertz per nT. Thus the output frequency (called the Larmor frequency) varies from roughly 70KHz at the equator to 350 KHz at the poles.
Because the cesium magnetometer is an oscillator, and because phase is important in an oscillator, the "Bandwidth" of the electronics in the magnetometer must be at least 10 times higher than the maximum output frequency of 350 Khz, or roughly 3.5 MHz.
This bandwidth should not be confused with the magnetic field measurement "Bandwidth", or how fast of a magnetic field change can be measured. To put a scaler value on any magnetic field reading the output frequency of the magnetometer must be counted, and then scaled appropriately to get a field reading in nanoTeslas. The counting process involves opening a gate period, counting the number of Larmor (frequency) cycles that occur, divide that number by the precise time interval of the gate period. then scale that value by dividing by the 3.498572 Hz / Larmor coefficient. You get one reading per gate period, which by default is five or ten hertz (200mS to 100 mS gate period). What you get for a reading during any gate period is the time interval average of the Larmor frequency over that period.
The transfer function of a "time interval averaged" signal is [sine(x) / x] with the first zero falling at the sample frequency. Thus if the G-882 is sampling at 10 hertz the maximum resolvable magnetic field change is roughly 5 hertz.
The sample interval of the G-882 is adjustable by sending commands to it. If the sample rate is set to 20 hertz the measurement bandwidth will double (from a 10 hertz sample rate) but the base line noise will go up as well.
It should also be noted that the basic system noise level of the G-882 for a stationary sensor is set by the counter resolution - not by the signal to noise ratio of the oscillator electronics. If the sensor is tilted away from its optimum orientation the magnetometer signal will decrease (and therefore the signal to noise ratio), but the counted field output will not show any significant degradation until the sensor is approaching the dead zone (where the signal is really low).
Raw Data
MagArrow data is imported into Survey Manager in the form of .MAGDATA files, downloaded from the MagArrow. The .MAGDATA file contains measurements from different sensors inside the MagArrow: 1000Hz magnetometer readings; accelerometer, gyro, compass, temperature readings; and GPS info.
MFAM assigns a fiducial number, or “FID” to each magnetometer reading, in a cycle from 1 to 1000 that repeats every second. In the instrument, the magnetometer readings and the GPS sentence data are synchronized so that the “FID-1” magnetometer record is matched with the GPS location and timing information.
Exports to CSV and Geosoft file formats 1000Hz un-filtered export
The 1000Hz export provides the original raw magnetometer data plus some simple interpolations:
• Magnetometer reading: The raw magnetic field values are exported without application of a filter. [While these raw measurements are the output of a filter inside the MFAM sensor: a 9-pole Butterworth low pass filter with a -3dB point at 400Hz, that filter is considered part of the sensor for this description.]
• Auxiliary sensors: Gyro, accelerometer, and temperature are acquired once per every 5 magnetometer readings, and are reported only when acquired. Compass readings are acquired one per every 10 magnetometer readings and are reported only when acquired.
• GPS NMEA sentence: Reported with the associated FID-1 mag record. A few individual fields from the GPS are also broken out from the GPS sentence and reported separately, without interpolation.
• Interpolated GPS fields: Time, date, latitude, longitude, and track (course over ground) are linearly interpolated between GPS readings.
Decimated exports
Each of the exports at frequencies from 10 Hz to 100 Hz is a decimation – data are filtered by a low-pass filter and then down-sampled to the target sample rate. Each low-pass filter (a different one for each decimation) is a symmetric finite impulse response (or FIR) filter, with the following design goals:
• -3dB attenuation at 0.75 * Nyquist frequency (e.g., the -3dB point for the 10Hz decimation is 3.75Hz)
• Significant attenuation of 50Hz and 60Hz signals.
• Reasonably flat response in the pass band.
Linear phase (or zero phase, or constant group delay) filters.
These filters are not Kalman filters. The filters are applied to fields in the decimations as follows:
• Magnetometer readings: Magnetometer readings are decimated: the FIR is applied, then the data are down-sampled to the target rate.
• Aux sensors: Aux sensors are first up-sampled to 1000Hz by linear interpolation of values between individual readings (which occur once every 5 mag readings for gyro, accelerometer, and temperature, and once every 10 mag readings for compass). Then these 1000Hz values are decimated in the same process as the magnetometer readings.
• Latitude and longitude are first up-sampled to 1000Hz by linear interpolation of values between successive GPS data (once per second), then these 1000 Hz values are decimated in the same process as the magnetometer readings.
• Time, date, and track are linearly interpolated as in the raw, unfiltered 1000Hz export.
Merging filtered and unfiltered data.
Some of the values in an individual line of data are filtered: mag readings, aux sensors, etc. Other measurements are not filtered: time and date, GPS sentences, record counters, and the simple interpolated fields. These two sets of values – filtered and unfiltered, must be reported in individual lines that contain values of both types. The question “How should the two sets of values be matched?” is addressed as follows:
A decimation filter has a center. For example, a single filter result that weighs 499 individual measurements running from record number 752 to record number 1250 (in DSP terms, it is the result of the convolution of 499 input values with 499 filter weights), is centered on record number 1001. The result is the “filtered value of record 1001”. In a single line along with this value should be the other filtered results centered on record number 1001 plus the unfiltered raw and interpolated values that were recorded as part of the original, raw record 1001.
The down-sampling part of decimation involves keeping some results and discarding others; down-sampling from 1000Hz to 100Hz includes discarding 9 out of 10 results. During exports, Survey Manager keeps the “FID 1” record, because it includes the original GPS information, then discards the next 9 records (if it’s a 100Hz decimation), and then repeats the pattern, each time starting with FID 1.
If you have questions about the MagArrow decimations, please contact your Geometrics account manager.
Page 1 / 2
Next