当前位置: 首页 > article >正文

用Python和NumPy动手实现8种DST变换:从公式到可视化基图像

用Python和NumPy动手实现8种DST变换从公式到可视化基图像在信号处理领域离散正弦变换DST是一组与离散余弦变换DCT齐名的重要工具。不同于DCT的对称延拓特性DST通过反对称延拓方式处理信号特别适合解决某些特定边界条件的问题。本文将带您用Python和NumPy实现全部8种DST变换并通过可视化技术揭示其数学本质。1. DST变换基础与准备工作1.1 理解DST的核心概念离散正弦变换家族包含8种变体DST-I至DST-VIII每种变体对应不同的边界条件和延拓方式。与DCT不同DST采用反对称延拓这使得它在处理特定类型信号时具有独特优势反对称延拓信号在边界点被镜像反射并取反纯正弦基函数变换核仅由正弦函数构成能量压缩特性适合处理具有不连续边界条件的信号在开始编码前我们需要搭建Python环境import numpy as np import matplotlib.pyplot as plt from scipy.fft import dct, idct # 用于对比验证1.2 创建测试信号为了验证我们的实现先构造一个典型的测试信号def generate_test_signal(N8): 生成包含多种频率成分的测试信号 n np.arange(N) signal 0.5 * np.sin(2*np.pi*n/N) signal 0.3 * np.cos(4*np.pi*n/N) signal 0.2 * np.random.randn(N) return signal2. DST-I到DST-IV的实现与解析2.1 DST-I最简单的反对称延拓DST-I的变换核定义如下$$ X[k] \sqrt{\frac{2}{N1}} \sum_{n0}^{N-1} x[n] \sin\left(\frac{\pi(k1)(n1)}{N1}\right) $$Python实现def dst1(x): N len(x) k np.arange(1, N1)[:, None] n np.arange(1, N1) basis np.sin(np.pi * k * n / (N 1)) return np.sqrt(2/(N1)) * np.dot(basis, x)可视化基函数def plot_dst_basis(dst_func, N8): basis dst_func(np.eye(N)) plt.figure(figsize(10, 8)) for i in range(N): plt.subplot(N, 1, i1) plt.stem(basis[i], use_line_collectionTrue) plt.ylabel(fk{i}) plt.suptitle(DST Basis Functions) plt.show()2.2 DST-II视频编码的宠儿DST-II在H.265/HEVC等视频编码标准中广泛应用$$ X[k] \sqrt{\frac{2}{N}} \eta_k \sum_{n0}^{N-1} x[n] \sin\left(\frac{\pi(k1)(2n1)}{2N}\right) $$其中$\eta_k$在$kN-1$时为$1/\sqrt{2}$否则为1。实现代码def dst2(x): N len(x) k np.arange(1, N1)[:, None] n np.arange(N) basis np.sin(np.pi * k * (2*n 1) / (2*N)) eta np.ones(N) eta[-1] 1/np.sqrt(2) return np.sqrt(2/N) * eta * np.dot(basis, x)2.3 DST-IIIDST-II的逆变换DST-III实际上是DST-II的逆变换$$ X[k] \sqrt{\frac{2}{N}} \eta_n \sum_{n0}^{N-1} x[n] \sin\left(\frac{\pi(2k1)(n1)}{2N}\right) $$实现时注意$\eta_n$的处理def dst3(x): N len(x) k np.arange(N)[:, None] n np.arange(1, N1) basis np.sin(np.pi * (2*k 1) * n / (2*N)) eta np.ones(N) eta[-1] 1/np.sqrt(2) return np.sqrt(2/N) * eta * np.dot(basis, x)2.4 DST-IV对称性最强的变体DST-IV具有优美的对称特性$$ X[k] \sqrt{\frac{2}{N}} \sum_{n0}^{N-1} x[n] \sin\left(\frac{\pi(2k1)(2n1)}{4N}\right) $$Python实现def dst4(x): N len(x) k np.arange(N)[:, None] n np.arange(N) basis np.sin(np.pi * (2*k 1) * (2*n 1) / (4*N)) return np.sqrt(2/N) * np.dot(basis, x)3. DST-V到DST-VIII的高级实现3.1 DST-V周期加倍变换DST-V需要特别注意其归一化因子$$ X[k] \frac{2}{\sqrt{2N1}} \sum_{n0}^{N-1} x[n] \sin\left(\frac{2\pi(k1)(n1)}{2N1}\right) $$实现代码def dst5(x): N len(x) k np.arange(1, N1)[:, None] n np.arange(1, N1) basis np.sin(2 * np.pi * k * n / (2*N 1)) return 2/np.sqrt(2*N 1) * np.dot(basis, x)3.2 DST-VI半采样偏移变体DST-VI引入了半采样偏移$$ X[k] \frac{2}{\sqrt{2N1}} \sum_{n0}^{N-1} x[n] \sin\left(\frac{\pi(k1)(2n1)}{2N1}\right) $$Python实现def dst6(x): N len(x) k np.arange(1, N1)[:, None] n np.arange(N) basis np.sin(np.pi * k * (2*n 1) / (2*N 1)) return 2/np.sqrt(2*N 1) * np.dot(basis, x)3.3 DST-VIIH.266/VVC的新宠最新视频编码标准H.266/VVC采用了DST-VII$$ X[k] \frac{2}{\sqrt{2N1}} \sum_{n0}^{N-1} x[n] \sin\left(\frac{\pi(2k1)(n1)}{2N1}\right) $$实现代码def dst7(x): N len(x) k np.arange(N)[:, None] n np.arange(1, N1) basis np.sin(np.pi * (2*k 1) * n / (2*N 1)) return 2/np.sqrt(2*N 1) * np.dot(basis, x)3.4 DST-VIII最复杂的变体DST-VIII的归一化最为复杂$$ X[k] \frac{2}{\sqrt{2N-1}} \eta_k \eta_n \sum_{n0}^{N-1} x[n] \sin\left(\frac{\pi(2k1)(2n1)}{4N-2}\right) $$Python实现def dst8(x): N len(x) k np.arange(N)[:, None] n np.arange(N) basis np.sin(np.pi * (2*k 1) * (2*n 1) / (4*N - 2)) eta_k np.ones(N) eta_k[-1] 1/np.sqrt(2) eta_n np.ones(N) eta_n[-1] 1/np.sqrt(2) return (2/np.sqrt(2*N - 1)) * eta_k * (eta_n * np.dot(basis, x))4. 可视化分析与实际应用4.1 基图像生成技术基图像能直观展示变换的特性。以下代码生成所有DST变体的基图像def plot_all_dst_bases(N8): dst_types [dst1, dst2, dst3, dst4, dst5, dst6, dst7, dst8] plt.figure(figsize(15, 20)) for i, dst_func in enumerate(dst_types): basis dst_func(np.eye(N)) # 计算基图像外积 full_img np.zeros((N*N, N*N)) for ki in range(N): for kj in range(N): full_img[ki*N:(ki1)*N, kj*N:(kj1)*N] np.outer(basis[ki], basis[kj]) plt.subplot(4, 2, i1) plt.imshow(full_img, cmapseismic, vmin-1, vmax1) plt.title(fDST-{i1} Basis Images) plt.colorbar() plt.tight_layout() plt.show()4.2 能量压缩特性对比不同DST变体对信号能量的压缩效率各异变换类型能量集中效率适用场景DST-I中等边界值为0的信号DST-II高视频编码DST-VII极高新一代视频编码DST-VIII高特殊边界条件4.3 实际信号处理示例def compare_dst_performance(): x generate_test_signal(32) dst_types [dst1, dst2, dst3, dst4, dst5, dst6, dst7, dst8] plt.figure(figsize(12, 8)) plt.subplot(2, 1, 1) plt.plot(x, o-, labelOriginal) plt.subplot(2, 1, 2) for i, dst_func in enumerate(dst_types): coeffs dst_func(x) energy np.cumsum(coeffs**2) / np.sum(coeffs**2) plt.plot(energy, labelfDST-{i1}) plt.legend() plt.title(Energy Compaction Comparison) plt.show()通过这个对比可以明显看出DST-VII和DST-II在能量压缩方面表现最为出色这也是它们被视频编码标准采用的原因。

相关文章:

用Python和NumPy动手实现8种DST变换:从公式到可视化基图像

用Python和NumPy动手实现8种DST变换:从公式到可视化基图像 在信号处理领域,离散正弦变换(DST)是一组与离散余弦变换(DCT)齐名的重要工具。不同于DCT的对称延拓特性,DST通过反对称延拓方式处理信…...

为什么90%的团队虚拟线程改造失败?揭秘3大反模式:阻塞IO、同步锁滥用、监控盲区(附诊断脚本)

第一章:虚拟线程的本质与高并发架构适配性再认知虚拟线程并非操作系统内核线程的简单封装,而是 JVM 在用户态实现的轻量级执行单元,其核心价值在于将“线程生命周期管理”从 OS 转移至运行时,从而解耦调度成本与并发规模。每个虚拟…...

【2024最硬核AI数据层教程】:用EF Core 10原生向量API构建低延迟RAG系统,实测P99<87ms

第一章:EF Core 10向量搜索扩展的演进与核心价值EF Core 10正式将向量搜索能力纳入官方生态,标志着ORM框架首次原生支持语义检索场景。这一演进并非简单叠加功能,而是深度整合了数据库向量索引、相似度计算与LINQ查询管道,使开发者…...

如何快速解锁NVIDIA消费级GPU虚拟化功能:完整操作指南

如何快速解锁NVIDIA消费级GPU虚拟化功能:完整操作指南 【免费下载链接】vgpu_unlock Unlock vGPU functionality for consumer grade GPUs. 项目地址: https://gitcode.com/gh_mirrors/vg/vgpu_unlock 在虚拟化环境中使用NVIDIA GPU加速一直是专业领域的特权…...

3分钟解锁B站缓存视频:免费开源m4s转MP4完整解决方案指南

3分钟解锁B站缓存视频:免费开源m4s转MP4完整解决方案指南 【免费下载链接】m4s-converter 一个跨平台小工具,将bilibili缓存的m4s格式音视频文件合并成mp4 项目地址: https://gitcode.com/gh_mirrors/m4/m4s-converter 你是否曾经在B站缓存了珍贵…...

告别繁琐操作!在Windows上轻松安装APK文件的终极指南

告别繁琐操作!在Windows上轻松安装APK文件的终极指南 【免费下载链接】APK-Installer An Android Application Installer for Windows 项目地址: https://gitcode.com/GitHub_Trending/ap/APK-Installer 你是否曾经遇到过这样的情况:在Windows电脑…...

用STM32和AD637搞定电路幅频特性测试:手把手教你复刻电赛D题核心模块

STM32与AD637构建的电路特性测试仪实战指南 在电子设计竞赛和实际工程中,快速准确地测量电路特性是每个硬件工程师的必备技能。本文将带你从零开始,用STM32微控制器和AD637真有效值检测芯片搭建一个功能完整的电路特性测试平台。不同于传统的赛题报告&am…...

Anaconda数据科学环境搭建:为千问3.5-9B模型服务准备Python生态

Anaconda数据科学环境搭建:为千问3.5-9B模型服务准备Python生态 1. 为什么需要Anaconda 在开始部署千问3.5-9B这类大模型之前,一个稳定、隔离的Python环境是必不可少的。Anaconda作为数据科学领域的瑞士军刀,能帮你轻松管理不同项目所需的P…...

从ProcessBuilder源码看Java进程创建:如何优雅地处理I/O流与子进程?

Java进程交互的深度实践:从ProcessBuilder源码到高效流处理 在分布式系统与自动化工具链开发中,Java进程管理能力直接影响着系统稳定性和资源利用率。当我们使用Runtime.getRuntime().exec()执行一个简单的ls命令时,背后究竟发生了多少层级的…...

Qwen3.5-2B模型处理网络协议分析:智能解析与异常流量识别

Qwen3.5-2B模型处理网络协议分析:智能解析与异常流量识别 1. 网络运维的痛点与AI解决方案 网络运维工程师每天都要面对海量的协议数据包和系统日志。传统分析方法需要人工逐条查看十六进制报文,或者编写复杂的过滤规则,效率低下且容易遗漏关…...

ComfyUI+Stable Audio Open:游戏开发者如何5分钟生成逼真环境音效(附实战案例)

ComfyUIStable Audio Open:游戏开发者如何5分钟生成逼真环境音效(附实战案例) 当你在深夜调试游戏场景时,突然发现缺少关键的环境音效——雨林中的虫鸣、古堡走廊的木质地板吱呀声、未来都市的悬浮车引擎嗡鸣。传统音效制作流程可…...

SAP ABAP开发避坑指南:BP业务伙伴的地址、银行、角色BAPI到底该怎么选?

SAP ABAP开发实战:BP业务伙伴BAPI选择策略与避坑技巧 每次打开SE37准备调用BP相关BAPI时,那些以BAPI_BUPA_开头的函数列表总让人眼花缭乱。上周刚踩过一个坑——用BAPI_BUPA_ADDRESS_CHANGE更新地址时,系统莫名其妙清空了邮政编码后三位。后来…...

别急着扔!华硕A555L老本升级实战:加内存、换系统,让它再战三年

华硕A555L老本重生指南:低成本升级方案与实战技巧 当手头的笔记本电脑开始力不从心,大多数人第一反应可能是"该换新机了"。但别急着把旧笔记本送进回收站——特别是像华硕A555L这样的机型,通过精准的硬件升级和系统优化&#xff0c…...

FrontPage练习题(3)

1、设置表单名称为“论坛个人信息设定表”。2、对照效果图fp:jp页面中尚有空缺的表单对象未完成插入。请插入空缺的表单对象,各对象的初始值见效果图。3、设置表单对象属性1:(1)设置表格第1行文本“论坛个人信息设定表…...

Arch Linux无线安装保姆级教程:从iwctl联网到KDE/GNOME桌面完整配置

Arch Linux无线安装全流程指南:从零配置到KDE/GNOME桌面环境部署 当你面对一台没有有线网络接口的机器,却想体验Arch Linux的纯净与自由时,传统的安装教程往往显得力不从心。这份指南将彻底解决无线环境下的安装难题,从最基础的iw…...

Git Cherry-Pick实战:精准移植代码变更的进阶指南

1. 为什么你需要掌握Git Cherry-Pick? 在多人协作的开发项目中,我们经常会遇到这样的场景:某个紧急修复需要从生产环境(release分支)同步到正在开发中的功能分支(feature分支),但又不…...

【仅剩72小时】Spring Boot 4.0 RC2插件仓库临时开放——抢先下载3个GA版前唯一可用的Agent-Ready调试插件(含源码签名证书)

第一章:Spring Boot 4.0 Agent-Ready 架构插件下载与安装 Spring Boot 4.0 引入了原生支持 Java Agent 的运行时增强能力,使 APM、分布式追踪、无侵入式指标采集等场景得以在不修改业务代码的前提下实现。Agent-Ready 架构要求应用启动时能自动识别并加载…...

保姆级教程:用Python-CAN库在树莓派上搭建汽车CAN总线数据监控器

树莓派Python-CAN实战:打造低成本汽车数据监控系统 在汽车电子和嵌入式开发领域,CAN总线作为车辆内部通信的神经系统,承载着发动机控制、车身电子、仪表盘等关键数据。传统CAN分析仪动辄上万元的价格让个人开发者和学生望而却步。而实际上&am…...

保姆级教程:在Android SystemUI源码中,用ADB广播动态控制导航栏三键(Home/Back/Recent)

深度定制Android导航栏:ADB广播动态控制三键显示的工程实践 在Android系统定制开发领域,SystemUI的修改往往是ROM开发者最常接触的核心模块之一。特别是导航栏这一用户交互的关键入口,其行为定制直接影响到设备的用户体验。传统修改方式需要反…...

深入Synopsys USB VIP内部:layering sequence如何玩转UVM callback与event机制

深入Synopsys USB VIP内部:layering sequence如何玩转UVM callback与event机制 在芯片验证领域,Synopsys VC USB VIP作为行业标杆工具,其核心价值不仅在于提供标准协议验证能力,更在于开放了丰富的扩展接口。本文将聚焦VIP中鲜为人…...

别再手动拖拽了!Matlab画图时用xlim函数精准控制X轴范围的3个实战技巧

别再手动拖拽了!Matlab画图时用xlim函数精准控制X轴范围的3个实战技巧 每次用Matlab画完图,你是不是也习惯性地用鼠标拖拽坐标轴来调整显示范围?这种操作不仅效率低下,还难以保证多张图表的一致性。今天我们就来彻底解决这个问题—…...

终极全面战争模组制作指南:5个步骤快速上手RPFM

终极全面战争模组制作指南:5个步骤快速上手RPFM 【免费下载链接】rpfm Rusted PackFile Manager (RPFM) is a... reimplementation in Rust and Qt5 of PackFile Manager (PFM), one of the best modding tools for Total War Games. 项目地址: https://gitcode.c…...

如何高效制作游戏模组:RPFM完整实战指南

如何高效制作游戏模组:RPFM完整实战指南 【免费下载链接】rpfm Rusted PackFile Manager (RPFM) is a... reimplementation in Rust and Qt5 of PackFile Manager (PFM), one of the best modding tools for Total War Games. 项目地址: https://gitcode.com/gh_m…...

如何轻松创建虚拟游戏控制器:vJoy完整使用指南 [特殊字符]

如何轻松创建虚拟游戏控制器:vJoy完整使用指南 🎮 【免费下载链接】vJoy Virtual Joystick 项目地址: https://gitcode.com/gh_mirrors/vj/vJoy 想要在Windows电脑上创建虚拟游戏控制器吗?vJoy虚拟摇杆工具就是你的终极解决方案&#…...

Apache Cloudberry 2.1.0 发布:多方面改进,积极推进 PostgreSQL 内核升级

Apache Cloudberry 2.1.0 正式发布,继 2.0.0 版本后继续改进数据库内核等。本次更新在查询执行、存储等方面有多项改进,还更新了生态系统组件,且正推进 PostgreSQL 内核升级。版本更新背景Apache Cloudberry 在 2.0.0 版本发布后,…...

Beyond Compare 5授权密钥生成器:3种方法轻松解决评估期过期问题

Beyond Compare 5授权密钥生成器:3种方法轻松解决评估期过期问题 【免费下载链接】BCompare_Keygen Keygen for BCompare 5 项目地址: https://gitcode.com/gh_mirrors/bc/BCompare_Keygen Beyond Compare 5作为一款功能强大的文件对比工具,在30天…...

命运2启动报错msvcp140.dll终极解决方法(2026版)

命运2启动报错msvcp140.dll终极解决方法(2026版)正在准备和朋友一起突袭,或者刚下班想上线完成几个悬赏,结果《命运2》的启动器一闪而过,取而代之的是一个冷冰冰的系统弹窗:“由于找不到msvcp140.dll&#…...

从C语言到Verilog:一个软件工程师的FPGA入门踩坑实录(附HDLBits刷题笔记)

从C语言到Verilog:一个软件工程师的FPGA入门踩坑实录 第一次接触Verilog时,我正坐在实验室里盯着屏幕上闪烁的波形发呆。作为一名计算机专业的毕业生,我习惯了C语言中清晰的顺序执行逻辑,但Verilog中那些看似熟悉却又陌生的语法结…...

利用systemd定时器实现Ubuntu服务精准延迟启动

1. 为什么需要精准延迟启动服务? 在Ubuntu服务器管理中,经常会遇到这样的场景:某个关键服务启动得太早,结果因为依赖项没准备好而频繁报错。比如数据库服务需要等存储设备挂载完成,或者Web应用需要等数据库服务就绪。传…...

DeepXDE终极指南:10分钟掌握科学机器学习核心库

DeepXDE终极指南:10分钟掌握科学机器学习核心库 【免费下载链接】deepxde A library for scientific machine learning and physics-informed learning 项目地址: https://gitcode.com/gh_mirrors/de/deepxde DeepXDE是一款强大的科学机器学习库,…...