File size: 1,645 Bytes
e78c327
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
import numpy as np

class SeismicSimulation:
    def __init__(self, frequencies):
        self.frequencies = frequencies
        self.mine_characteristics = {
            'M19': [(300, 0.02, 100), (450, 0.01, 150)],
            'VS2.2': [(250, 0.015, 120)],
            'VS50': [(1000, 0.03, 50), (1250, 0.025, 80)],
            'TS50': [(850, 0.035, 90), (950, 0.02, 100)]
        }

    def simulate_seismic_response(self, mine_info, soil_impact):
        response = np.zeros_like(self.frequencies)
        for resonance_freq, intrinsic_amplitude, intrinsic_width in mine_info:
            affected_amplitude = intrinsic_amplitude * (1 - soil_impact)
            response += affected_amplitude * np.exp(-((self.frequencies - resonance_freq) ** 2) / (2 * intrinsic_width ** 2))
        return response

    def add_environmental_noise(self, signal, noise_level):
        return signal + np.random.normal(0, noise_level, len(signal))

    def generate_data(self, soil_impact_on, noise_level_on, soil_impact_off, noise_level_off):
        results = {}
        for mine, characteristics in self.mine_characteristics.items():
            on_mine_response = self.simulate_seismic_response(characteristics, soil_impact_on)
            off_mine_response = self.simulate_seismic_response([(freq, amp*0.1, width) for freq, amp, width in characteristics], soil_impact_off)

            on_mine_response = self.add_environmental_noise(on_mine_response, noise_level_on)
            off_mine_response = self.add_environmental_noise(off_mine_response, noise_level_off)
            results[mine] = (on_mine_response, off_mine_response)
        return results