文件格式以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运算后的幅度谱
这个小工具还可进行查看功率谱,相干性,以及相位谱等。
下载地址
感谢支持,有什么不对的地方欢迎指出问题