超越梦想分享 http://blog.sciencenet.cn/u/pcabaqus 结构减隔震控制 非线性抗震分析 Python简单编程

博文

「Python与地震工程」单自由度体系求解之频域法(傅里叶变换法)

已有 1102 次阅读 2023-3-26 11:49 |个人分类:地震分析|系统分类:科研笔记

2017 年 9 月墨西哥 7.1 级地震2017 年 9 月墨西哥 7.1 级地震

「Python与地震工程」单自由度体系求解之频域法(傅里叶变换法)

Baron Jean Baptiste Joseph FourierBaron Jean Baptiste Joseph Fourier

原理

频域法(傅里叶变换法)求解体系响应的基本流程

频域法(傅里叶变换法)求解体系响应的基本流程

图中, p(t)↔P(ω) 为激励的Fourier变换对;u(t)↔U(ω) 为响应的Fourier变换对; H(iω) 为频域响应函数,对于地震作用下的单自由度体系

image.png

程序代码

# mdof.py
import numpy as np
from numpy.fft import fft, ifft, fftfreq
import matplotlib.pyplot as plt


plt.style.use("ggplot")
plt.rcParams['font.sans-serif'] = ['Microsoft Yahei']
plt.rcParams['axes.unicode_minus'] = False


next2pow = lambda x: \
    int(round(2**np.ceil(np.log(x)/np.log(2.))))


def draw_response(title, ta, a, t, u):
    plt.figure(title,(12,6))
    plt.subplot(2,1,1)
    plt.plot(ta,a,label=r"输入地震波加速度时程")
    plt.grid(True)
    plt.legend()
    plt.xlim(0,t[-1])
    plt.subplot(2,1,2)
    plt.plot(t,u,label=r"SDOF体系位移响应时程")
    plt.xlabel(r"时间 (s)")
    plt.grid(True)
    plt.legend()
    plt.xlim(0,t[-1])
    plt.show()


def solve_sdof_eqwave_freq(omg, zeta, ag, dt):

    n = len(ag)
    Nfft = next2pow(n)*2 # Fourier变换数据点数取为2的整数次幂并大于等于原始数据点数的2倍 
    af = fft(ag, Nfft) # 快速Fourier变换
    f = fftfreq(Nfft, d=dt) # 离散频率点
    Omg = 2.0*np.pi*f # 离散圆频率点
    H_u = -1.0/(omg**2-Omg**2+2.*zeta*omg*Omg*1.0j# 频响函数
    u = ifft(af*H_u, Nfft).real # 快速Fourier逆变换并取实部
    v = ifft(af*Omg*H_u, Nfft).real # 快速Fourier逆变换并取实部

    u = u[:n]
    v = v[:n]

    return u, v


if __name__ == '__main__':

    acc0 = np.loadtxt("EQ-S-3.txt"# 读取地震波
    dt = 0.005 # 时间间隔
    n = len(acc0)
    t0 = np.linspace(0.0,dt*(n-1),n)
    
    # 显示地震结束后一段时间内的自由振动衰减情况
    ne = round(n*1.2)
    t = np.linspace(0.0,dt*(ne-1),ne)
    ag = np.zeros(ne)
    ag[:n] = acc0

    omg = 2.0*np.pi # 自振圆频率
    zeta = 0.05 # 固有阻尼比

    u, v = solve_sdof_eqwave_freq(omg, zeta, ag, dt)
    draw_response("Seismic Response -- freq", t0, acc0, t, u) # 绘图

文中所用地震波下载:EQ-S-3.txt

结果

频域法求解单自由度体系地震响应频域法求解单自由度体系地震响应

转载本文请注明出处。

「Python与地震工程」单自由度体系求解之频域法(傅里叶变换法)

科研成果中使用本文代码请引用作者课题组的研究论文:

作者课题组发表的研究论文列表(持续更新中……)




https://blog.sciencenet.cn/blog-339218-1381867.html

上一篇:研究论文——单自由度混联II型惯容减震体系的随机地震响应与参数设计
收藏 IP: 111.15.84.*| 热度|

0

该博文允许注册用户评论 请点击登录 评论 (0 个评论)

数据加载中...

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-4-28 05:47

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部