嵌入式综合-心得与笔记【1】

文章目录

  • 时域信号
  • 时域转频域信号
    • 傅里叶变换将时域信号转换为频域信号
    • 快速傅里叶变换FFT计算离散傅里叶变换
  • 参考文献

时域信号

嵌入式综合-心得与笔记【1】_第1张图片

import numpy as np
import matplotlib.pyplot as plt

# 设置 Matplotlib 支持中文
plt.rcParams['font.sans-serif'] = ['SimHei']  # 设置字体为 SimHei
plt.rcParams['axes.unicode_minus'] = False  # 解决负号显示问题

# 定义时间范围
t = np.linspace(0, 1, 500)  # 从 0 到 1 秒,500 个点
f_t = np.sin(2 * np.pi * 5 * t)  # 计算信号值

# 绘制时域信号
plt.figure(figsize=(8, 4))
plt.plot(t, f_t, label="f(t) = sin(2π·5t)")
plt.title("时域信号")
plt.xlabel("时间 t (秒)")
plt.ylabel("幅度 f(t)")
plt.grid(True)
plt.legend()
plt.show()

时域转频域信号

傅里叶变换将时域信号转换为频域信号

  • 连续傅里叶变换
    F ( ω ) = ∫ − ∞ ∞ f ( t ) e − i ω t   d t F(\omega) = \int_{-\infty}^{\infty} f(t) e^{-i \omega t} \, dt F(ω)=f(t)etdt
  • 离散傅里叶变换(DFT)
    X [ k ] = ∑ n = 0 N − 1 x [ n ] e − i 2 π N k n X[k] = \sum_{n=0}^{N-1} x[n] e^{-i \frac{2\pi}{N} kn} X[k]=n=0N1x[n]eiN2πkn

快速傅里叶变换FFT计算离散傅里叶变换

import numpy as np
import matplotlib.pyplot as plt

# 设置 Matplotlib 支持中文
plt.rcParams['font.sans-serif'] = ['SimHei']  # 设置字体为 SimHei
plt.rcParams['axes.unicode_minus'] = False  # 解决负号显示问题

# 定义时域信号
fs = 100  # 采样频率 (Hz)
T = 1 / fs  # 采样间隔
t = np.arange(0, 1, T)  # 时间范围:0 到 1 秒
f1 = 5  # 信号频率 (Hz)
f2 = 20  # 信号频率 (Hz)
f_t = np.sin(2 * np.pi * f1 * t) + 0.8 * np.sin(2 * np.pi * f2 * t)  # 时域信号

# 计算傅里叶变换
F_omega = np.fft.fft(f_t)  # 计算 FFT
frequencies = np.fft.fftfreq(len(f_t), d=T)  # 计算频率轴

# 计算幅度谱
magnitude_spectrum = np.abs(F_omega)

# 找到主要频率成分
peak_indices = np.where(magnitude_spectrum > 5)[0]  # 找到幅度大于 5 的频率成分
peak_frequencies = frequencies[peak_indices]  # 对应的频率
peak_magnitudes = magnitude_spectrum[peak_indices]  # 对应的幅度

# 打印主要频率成分
print("主要频率成分 (Hz):", peak_frequencies)
print("对应的幅度:", peak_magnitudes)

# 绘制时域信号
plt.figure(figsize=(12, 6))
plt.subplot(2, 1, 1)
plt.plot(t, f_t, label="时域信号")
plt.title("时域信号")
plt.xlabel("时间 t (秒)")
plt.ylabel("幅度 f(t)")
plt.grid(True)
plt.legend()

# 绘制频域信号
plt.subplot(2, 1, 2)
plt.stem(frequencies, magnitude_spectrum, basefmt=" ", label="频域信号")
plt.title("频域信号")
plt.xlabel("频率 f (Hz)")
plt.ylabel("幅度 |F(ω)|")
plt.grid(True)
plt.legend()

plt.tight_layout()
plt.show()
  • 时域信号
    • 图形显示两个正弦波的叠加。
    • 信号由两个正弦波组成,频率分别为 5   Hz 5 \, \text{Hz} 5Hz 10   Hz 10 \, \text{Hz} 10Hz
    • 采样频率为 100   Hz 100 \, \text{Hz} 100Hz
  • 频域信号
    • 图形显示在 5   Hz 5 \, \text{Hz} 5Hz 10   Hz 10 \, \text{Hz} 10Hz 处的频率成分。
    • 使用 np.fft.fftscipy.fft.fft 计算频域信号。
    • 使用 np.fft.fftfreqscipy.fft.fftfreq 计算频率轴

嵌入式综合-心得与笔记【1】_第2张图片

参考文献

  1. DeepSeek

你可能感兴趣的:(Embedded,system,and,HPC,嵌入式)