文件格式以segd为例,其他地震文件格式同理。
时域数据
时域数据通俗点讲就是我在某个时间段记录的一个值,然后经过一段时间后,产生的一组数据就是时域数据。
频域数据
频域数据是指信号在频率域上的表示,即信号的频率特性。频域分析是将时域信号转换为频域信号的过程,通过分析信号在不同频率上的成分和振幅来理解信号的频谱特性
时域转频域
时域转频域需要使用FFT(快速傅里叶运算)进行转化
segd文件格式就不再介绍,无非就是文件头,道头,数据位,读出原始数据,然后进行操作即可。
前期工作
Qt安装FFT可以参考这篇文章链接
Qt对Segd数据时域转频域
QVector<double> EP_Work::calculateSpectrum(const QVector<double> data)
{QVector<double> spectrum(data.size()/2);fftw_complex *in = (fftw_complex*) fftw_malloc(sizeof(fftw_complex) * data.size());fftw_complex *out = (fftw_complex*) fftw_malloc(sizeof(fftw_complex) * data.size());fftw_plan plan = fftw_plan_dft_1d(data.size(), in, out, FFTW_FORWARD, FFTW_ESTIMATE);for (int i = 0; i < data.size(); i++) {in[i][0] = data[i];in[i][1] = 0;}fftw_execute(plan);for (int i = 0; i < data.size()/2; i++) { double re = out[i][0];double im = out[i][1];//double p=(re * re + im * im) / N;double p=sqrt(re * re + im * im);spectrum[i] =10 * log10(p) ; //进行指数运算,缩小最大值与最小值范围//spectrum[i] = sqrt(pow(out[i][0], 2) + pow(out[i][1], 2));//spectrum[i] = p;}fftw_destroy_plan(plan);fftw_free(in);fftw_free(out);return spectrum;
}
Segd波形
进行fft运算后的幅度谱
这个小工具还可进行查看功率谱,相干性,以及相位谱等。
下载地址
感谢支持,有什么不对的地方欢迎指出问题