NumPy 教程

NumPy 首页 NumPy 简介 NumPy 环境

数组

NumPy Ndarray 对象 NumPy 数据类型

创建和操作数组

NumPy 数组创建例程 NumPy 数组操作 NumPy 基于现有数据创建数组 NumPy 基于数值范围创建数组 NumPy 数组迭代 NumPy 重塑数组 NumPy 连接数组 NumPy 堆叠数组 NumPy 拆分数组 NumPy 展平数组 NumPy 转置数组

索引与切片

NumPy 索引 &切片 NumPy 索引 NumPy 切片 NumPy 高级索引 NumPy 高级索引 NumPy 字段访问 NumPy 使用布尔数组切片

数组属性与操作

NumPy 数组属性 NumPy 数组形状 NumPy 数组大小 NumPy 数组步长 NumPy 数组元素大小 NumPy 广播 NumPy 算术运算 NumPy 数组加法 NumPy 数组减法 NumPy 数组乘法 NumPy 数组除法

高级数组运算

NumPy 交换数组的轴 NumPy 字节交换 NumPy 副本和视图 NumPy 逐元素数组比较 NumPy 过滤数组 NumPy 连接数组 NumPy 排序、搜索& 计数函数 NumPy 搜索数组 NumPy 数组并集 NumPy 查找唯一行 NumPy 创建日期时间数组 NumPy 二元运算符 NumPy 字符串函数 NumPy 矩阵库 NumPy 线性代数 NumPy Matplotlib NumPy 使用 Matplotlib 绘制直方图

排序和高级操作

NumPy 数组排序 NumPy 沿轴排序 NumPy 使用花式索引进行排序 NumPy 结构化数组 NumPy 创建结构化数组 NumPy 操作结构化数组 NumPy 记录数组 NumPy 加载数组 NumPy 保存数组 NumPy 将值附加到数组 NumPy 交换列数组 NumPy 将轴插入数组

处理缺失数据

NumPy 处理缺失数据 NumPy 识别缺失值 NumPy 移除缺失数据 NumPy 插补缺失值数据

性能优化

NumPy 使用数组进行性能优化

线性代数

NumPy 线性代数 NumPy 矩阵库 NumPy 矩阵加法 NumPy 矩阵减法 NumPy 矩阵乘法 NumPy 逐元素矩阵运算 NumPy 点积 NumPy 矩阵求逆 NumPy 行列式计算 NumPy 特征值 NumPy 特征向量 NumPy 奇异值分解 NumPy 求解线性方程 NumPy 矩阵范数

元素级矩阵运算

NumPy 总和 NumPy 平均值 NumPy 中位数 NumPy 最小值 NumPy 最大值

集合运算

NumPy 唯一元素 NumPy 交集 NumPy 并集 NumPy 差集

随机数生成

NumPy 随机数生成器 NumPy 排列和重排 NumPy 均匀分布 NumPy 正态分布 NumPy 二项分布 NumPy 泊松分布 NumPy 指数分布 NumPy 瑞利分布 NumPy 逻辑分布 NumPy 帕累托分布 NumPy 使用 Seaborn 可视化分布 NumPy 多项分布 NumPy 卡方分布 NumPy Zipf 分布

文件输入 &输出

NumPy 使用 NumPy 进行 I/O NumPy 从文件读取数据 NumPy 将数据写入文件 NumPy 支持的文件格式

数学函数

NumPy 数学函数 NumPy 三角函数 NumPy 指数函数 NumPy 对数函数 NumPy 双曲函数 NumPy 舍入函数

傅里叶变换

NumPy 离散傅里叶变换 (DFT) NumPy 快速傅里叶变换 (FFT) NumPy 逆傅里叶变换 NumPy 傅里叶级数和变换 NumPy 信号处理应用 NumPy 卷积

多项式

NumPy 多项式表示 NumPy 多项式运算 NumPy 求多项式的根 NumPy 求多项式的根

统计

NumPy 统计函数 NumPy 描述性统计

日期时间函数

NumPy 日期和时间基础知识 NumPy 表示日期和时间 NumPy 日期和时间运算 NumPy 使用日期时间进行索引 NumPy 时区处理 NumPy 时间序列分析 NumPy 处理时间增量 NumPy 闰秒处理 NumPy 矢量化日期时间运算

ufunc

NumPy ufunc 简介 NumPy 创建通用函数 (ufunc) NumPy 算术通用函数 (ufunc) NumPy 小数舍入 ufunc NumPy 对数通用函数(ufunc) NumPy 求和通用函数 (ufunc) NumPy 乘积通用函数 (ufunc) NumPy 差分通用函数 (ufunc) NumPy 寻找最小公倍数 (LCM) NumPy 寻找最大公约数 (GCD) NumPy 三角函数 (ufunc) NumPy 双曲线 (ufunc) NumPy 集合运算(ufunc)

实用资源

NumPy 快速指南 NumPy 备忘单


NumPy - 信号处理应用

NumPy 信号处理

NumPy 中的信号处理涉及信号的操作和分析,这些函数用于传递信息。这些信号可以是任何形式,从声波到数字数据。目标是从这些信号中转换或提取有用的信息。

NumPy 提供了一些信号处理工具,例如滤波、傅里叶变换和卷积。例如,您可以使用傅里叶变换将信号从时域转换为频域,从而更容易分析其频率成分。

您还可以应用滤波器来消除噪声或提取信号的特定部分。这些操作在音频处理、通信和图像分析等各个领域都很有用。

信号滤波

滤波是一种基本的信号处理技术,用于从信号中去除不需要的成分或提取有用的部分。滤波器可以是低通、高通、带通或带阻,具体取决于它们允许或阻止的频率。

示例:低通滤波

在以下示例中,我们对噪声信号应用低通滤波器以消除高频噪声 -

import numpy as np
from scipy.signal import butter, lfilter

# 生成样本信号
t = np.linspace(0, 1, 500, end=False)
signal = np.sin(2 * np.pi * 5 * t) + np.random.randn(500) * 0.5

# 设计低通滤波器
def butter_lowpass(cutoff, fs, order=5):
   nyquist = 0.5 * fs
   normal_cutoff = cutoff / nyquist
   b, a = butter(order, normal_cutoff, btype='low', analog=False)
   return b, a

def lowpass_filter(data, cutoff, fs, order=5):
   b, a = butter_lowpass(cutoff, fs, order=order)
   y = lfilter(b, a, data)
   return y

# 应用低通滤波器
cutoff_frequency = 10
sampling_rate = 500
filtered_signal = lowpass_filter(signal, cutoff_frequency, sampling_rate)

print("滤波后信号:", filtered_signal)

结果显示滤波后的信号,高频噪声已被去除 -

滤波后的信号:[ 3.92381804e-07  3.54383602e-06  1.63967023e-05  5.28930079e-05 ... -9.55624060e-01 -9.81063288e-01 -1.00076423e+00]

用于频率分析的傅里叶变换

傅里叶变换在信号处理中被广泛用于分析信号的频率成分。它将时域信号转换为频域表示,从而揭示信号中存在的频率。

示例:使用 FFT 进行频率分析

在以下示例中,我们使用快速傅里叶变换 (FFT) 分析信号的频率分量 -

import numpy as np

# 生成样本信号
t = np.linspace(0, 1, 500, end=False)
signal = np.sin(2 * np.pi * 5 * t) + 0.5 * np.sin(2 * np.pi * 10 * t)

# 计算 FFT
fft_values = np.fft.fft(signal)

# 计算频率区间
freqs = np.fft.fftfreq(len(signal), d=t[1] - t[0])

print("频率成分:", freqs)
print("FFT 值:", fft_values)

结果显示频率成分及其对应的 FFT 值 −

频率成分:[ 0. 1. 2. 3. 4. 5. ...]
FFT 值: [-3.87326339e-14+0.00000000e+00j  4.12725409e-14+2.68673972e-14j ...]

卷积与相关

卷积与相关是信号处理中用于分析和修改信号的数学运算。卷积用于滤波信号,而相关函数则用于衡量信号之间的相似性。

示例:卷积

在以下示例中,我们使用卷积对信号应用平滑滤波器 -

import numpy as np

# 生成样本信号
t = np.linspace(0, 1, 500, end=False)
signal = np.sin(2 * np.pi * 5 * t) + np.random.randn(500) * 0.5

# 定义平滑滤波器
filter_kernel = np.ones(10) / 10

# 应用卷积
smoothed_signal = np.convolve(signal, filter_kernel, mode='same')

print("Smoothed信号:", Smoothed_signal)

结果显示应用卷积后的信号平滑 -

平滑信号:[ 0.10531384  0.10089093  0.10978193 ... -0.19290414-0.26696232 -0.2166795 ]

示例:互相关

在以下示例中,我们计算两个信号之间的互相关 -

import numpy as np

# 生成两个样本信号
t = np.linspace(0, 1, 500, end=False)
signal1 = np.sin(2 * np.pi * 5 * t)
signal2 = np.sin(2 * np.pi * 5 * t + np.pi / 4)

# 计算互相关
cross_corr = np.correlate(signal1, signal2, mode='full')

print("互相关:", cross_corr)

结果显示两个信号之间的互相关 −

互相关: [ 0.00000000e+00  4.15241156e-02  1.21369107e-01 ... -2.76126688e-01 -1.35723843e-01 -4.43996022e-02]

信号重采样

重采样涉及改变信号的采样率,即增加(上采样)或减少(下采样)样本数量。这在处理不同采样率的信号时通常需要。

示例:信号重采样

在以下示例中,我们将信号下采样 2 倍 -

import numpy as np
from scipy.signal import resample

# 生成样本信号
t = np.linspace(0, 1, 500, end=False)
signal = np.sin(2 * np.pi * 5 * t)

# 将信号下采样 2 倍
num_samples = len(signal) // 2
downsampled_signal = resample(signal, num_samples)

print("下采样信号:", downsampled_signal)

结果显示下采样后的信号−

下采样信号:[-3.51535300e-16  1.25333234e-01  2.48689887e-01 ... -2.48689887e-01 -1.25333234e-01]

小波变换

小波变换是另一种信号分析技术,尤其适用于频率成分随时间变化的非平稳信号。小波变换提供了信号的时频表示。

示例:连续小波变换

在以下示例中,我们使用连续小波变换 (CWT) 分析信号 -

import numpy as np
import pywt

# 生成样本信号
t = np.linspace(0, 1, 500, end=False)
signal = np.sin(2 * np.pi * 5 * t) + 0.5 * np.sin(2 * np.pi * 10 * t)

# 计算连续小波变换
coeffs, freqs = pywt.cwt(signal, scales=np.arange(1, 128), wavelet='gaus1')

print("CWT 系数:", coeffs)
print("频率:", freqs)

结果显示 CWT 系数及其对应的频率 -

CWT 系数: [[ 5.11544621e-01  5.51952738e-01  5.90635494e-01 ...  6.21499677e-01  5.95101447e-01  5.67801389e-01]
 [ 1.08933167e+00  1.07658265e+00  1.05980188e+00 ...  9.62940518e-01  9.99652239e-01  1.03508272e+00]
 ...
 [-5.28687791e-04 -4.50587872e-04 -3.71247724e-04 ... -1.84740494e-04 -3.07220733e-04 -4.29412055e-04]]
频率:[0.03125     0.0625      0.09375    ...  1.65625     1.6875      1.71875]

信号处理的应用

信号处理在各个领域都有广泛的应用,例如:-

  • 音频处理:音乐和语音信号的降噪、均衡和压缩。
  • 图像处理:数字图像的增强、滤波和压缩。
  • 通信:传输系统中的调制、解调和纠错。
  • 控制系统:工程系统中的信号调理和反馈控制。
  • 生物医学工程:分析和滤波生理信号,例如心电图 (ECG) 和脑电图 (EEG)。