You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python绘制基于Tanh的锥化函数傅里叶变换图?

如何绘制Tanh锥化函数的傅里叶变换图

首先修正你提供的锥化函数代码中的错误:tanh_taper_inverted函数里的elif N/2 < n < N:语句中,变量n应为x,否则会触发未定义变量的报错。

以下是完整的实现步骤:

1. 导入依赖库

需要用到数学计算、数值处理和绘图的工具库:

import math
import numpy as np
import matplotlib.pyplot as plt

2. 修正后的锥化函数

def tanh_taper(N, x, c):
    if x < 0:
        v = 0.0
    elif 0 <= x <= N/2:
        v = math.tanh(c * x)
    elif N/2 < x < N:
        v = math.tanh(-c * x + N * c)
    else:
        v = 0.0
    return v

def tanh_taper_inverted(N, x, c):
    if x < 0:
        v = 1.0
    elif 0 <= x <= N/2:
        v = math.tanh(-c * x) + 1.0
    elif N/2 < x < N:
        v = math.tanh(c * x - N * c) + 1.0
    else:
        v = 1.0
    return v

3. 生成离散采样数据

设定窗口长度N和锥化陡峭程度参数c,生成对应采样点的函数值:

N = 256  # 窗口的离散采样点数
c = 0.1  # 控制锥化边缘的陡峭程度,值越大边缘越陡

# 生成0到N-1的离散采样位置
x_samples = np.arange(N)

# 计算两个锥化函数的采样值数组
taper_vals = np.array([tanh_taper(N, x, c) for x in x_samples])
taper_inv_vals = np.array([tanh_taper_inverted(N, x, c) for x in x_samples])

4. 计算傅里叶变换并处理结果

用FFT计算频域特性,转换为dB幅度谱并截取对称的前半部分:

# 计算FFT并提取幅度
fft_taper = np.fft.fft(taper_vals)
fft_taper_amp = np.abs(fft_taper)
# 转换为dB(加微小值避免log(0)报错)
fft_taper_db = 20 * np.log10(fft_taper_amp + 1e-10)

fft_inv_taper = np.fft.fft(taper_inv_vals)
fft_inv_taper_amp = np.abs(fft_inv_taper)
fft_inv_taper_db = 20 * np.log10(fft_inv_taper_amp + 1e-10)

# 生成归一化频率轴,只取前半部分(0到Nyquist频率)
freq_axis = np.fft.fftfreq(N)[:N//2]
fft_taper_db_half = fft_taper_db[:N//2]
fft_inv_taper_db_half = fft_inv_taper_db[:N//2]

5. 绘制频域图

用matplotlib绘制和维基百科风格一致的傅里叶变换幅度谱:

plt.figure(figsize=(12, 6))

# 绘制常规Tanh锥化函数的频域图
plt.subplot(1, 2, 1)
plt.plot(freq_axis, fft_taper_db_half)
plt.title('Tanh锥化函数傅里叶变换(dB)')
plt.xlabel('归一化频率')
plt.ylabel('幅度(dB)')
plt.grid(True)

# 绘制反转Tanh锥化函数的频域图
plt.subplot(1, 2, 2)
plt.plot(freq_axis, fft_inv_taper_db_half)
plt.title('反转Tanh锥化函数傅里叶变换(dB)')
plt.xlabel('归一化频率')
plt.ylabel('幅度(dB)')
plt.grid(True)

plt.tight_layout()
plt.show()

额外说明

  • 归一化频率范围为0到0.5,对应离散信号的Nyquist频率,是FFT频域图的标准展示方式
  • 转换为dB刻度可以更清晰地观察旁瓣的衰减特性,和维基百科中窗函数的频域图风格匹配
  • 调整N(窗口长度)和c(锥化陡峭度)可以观察不同参数对频域特性的影响

内容的提问来源于stack exchange,提问作者Juha P

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 00:05:16