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

论DCT和IDCT的重要性,汇编SIMD版第一,此贴第二,就是这么狂 :-)

输入: [1.000 2.000 3.000]
输出: [ 3.464 -1.414 0.000]
重建: [1.000 2.000 3.000]

[0] cos(0.0*π/3)*sqrt(1/N)*1.0 + cos(0.0*π/3)*sqrt(1/N)*2.0 + cos(0.0*π/3)*sqrt(1/N)*3.0 = 3.464
[1] cos(0.5*π/3)*sqrt(2/N)*1.0 + cos(1.5*π/3)*sqrt(2/N)*2.0 + cos(2.5*π/3)*sqrt(2/N)*3.0 = -1.414
[2] cos(1.0*π/3)*sqrt(2/N)*1.0 + cos(3.0*π/3)*sqrt(2/N)*2.0 + cos(5.0*π/3)*sqrt(2/N)*3.0 = 0.000

恭喜,你(基本)明白DCT了!可M为啥是正交矩阵?!

[0,0] cos(0.0*π/3)*sqrt(1/N)*cos(0.0*π/3)*sqrt(1/N) + cos(0.0*π/3)*sqrt(1/N)*cos(0.0*π/3)*sqrt(1/N) + cos(0.0*π/3)*sqrt(1/N)*cos(0.0*π/3)*sqrt(1/N)
[0,1] cos(0.0*π/3)*sqrt(1/N)*cos(0.5*π/3)*sqrt(2/N) + cos(0.0*π/3)*sqrt(1/N)*cos(1.5*π/3)*sqrt(2/N) + cos(0.0*π/3)*sqrt(1/N)*cos(2.5*π/3)*sqrt(2/N)
[0,2] cos(0.0*π/3)*sqrt(1/N)*cos(1.0*π/3)*sqrt(2/N) + cos(0.0*π/3)*sqrt(1/N)*cos(3.0*π/3)*sqrt(2/N) + cos(0.0*π/3)*sqrt(1/N)*cos(5.0*π/3)*sqrt(2/N)
[1,0] cos(0.5*π/3)*sqrt(2/N)*cos(0.0*π/3)*sqrt(1/N) + cos(1.5*π/3)*sqrt(2/N)*cos(0.0*π/3)*sqrt(1/N) + cos(2.5*π/3)*sqrt(2/N)*cos(0.0*π/3)*sqrt(1/N)
[1,1] cos(0.5*π/3)*sqrt(2/N)*cos(0.5*π/3)*sqrt(2/N) + cos(1.5*π/3)*sqrt(2/N)*cos(1.5*π/3)*sqrt(2/N) + cos(2.5*π/3)*sqrt(2/N)*cos(2.5*π/3)*sqrt(2/N)
[1,2] cos(0.5*π/3)*sqrt(2/N)*cos(1.0*π/3)*sqrt(2/N) + cos(1.5*π/3)*sqrt(2/N)*cos(3.0*π/3)*sqrt(2/N) + cos(2.5*π/3)*sqrt(2/N)*cos(5.0*π/3)*sqrt(2/N)
[2,0] cos(1.0*π/3)*sqrt(2/N)*cos(0.0*π/3)*sqrt(1/N) + cos(3.0*π/3)*sqrt(2/N)*cos(0.0*π/3)*sqrt(1/N) + cos(5.0*π/3)*sqrt(2/N)*cos(0.0*π/3)*sqrt(1/N)
[2,1] cos(1.0*π/3)*sqrt(2/N)*cos(0.5*π/3)*sqrt(2/N) + cos(3.0*π/3)*sqrt(2/N)*cos(1.5*π/3)*sqrt(2/N) + cos(5.0*π/3)*sqrt(2/N)*cos(2.5*π/3)*sqrt(2/N)
[2,2] cos(1.0*π/3)*sqrt(2/N)*cos(1.0*π/3)*sqrt(2/N) + cos(3.0*π/3)*sqrt(2/N)*cos(3.0*π/3)*sqrt(2/N) + cos(5.0*π/3)*sqrt(2/N)*cos(5.0*π/3)*sqrt(2/N)

如果用上复数(欧拉公式),就可以用等比数列求和公式了!!

from math import cos, sqrt, pi
import numpy as npπ = pi; N = 3
m = None # DCT矩阵
mt = None # IDCT矩阵,m的转置
mc = None # "C"版本DCT矩阵
ms = None # string版DCT矩阵

ne = lambda a, b: not np.allclose(a, b, atol=1E-6)def generate_dct_matrices():global m; global mt; global mc; global msm = np.zeros((N, N))# [[0]*3]*3不对。[0]*3得[0,0,0],再*3复制引用‌而非创建独立副本。修改任意一行会影响所有行;debug 1小时mc = [[0] * N for _ in range(N)]ms = [[0] * N for _ in range(N)]for k in range(N):for n in range(N):mc[k][n] = m[k,n] = cos((n + 0.5) * k * pi / N)ms[k][n] = f'cos({(n+0.5)*k}*π/{N})'m[0,:] *= sqrt(1/N)for n in range(N):mc[0][n] *= sqrt(1/N)ms[0][n] += f'*sqrt(1/N)'m[1:,:] *= sqrt(2/N)for k in range(1,N):for n in range(N):mc[k][n] *= sqrt(2/N)ms[k][n] += f'*sqrt(2/N)'mt = m.Tif ne(m, mc): raise ValueError()# x是一维数组,shape=(3,),np将其视为‌列向量‌(3,1)
# 3x3 x 3x1 = 3x1 再摆平
dct  = lambda x: np.dot(m,  x)
idct = lambda y: np.dot(mt, y)
# So, dct和idct其实是一个函数

np.set_printoptions(suppress=True,  # 禁用科学计数法precision=3,    # 保留3位小数floatmode='fixed'  # 固定小数位数
)generate_dct_matrices()x = np.array([1.0, 2.0, 3.0]); print("输入:", x)
y = dct(x); print("输出:", y)
r = idct(y); print("重建:", r)
ee = np.eye(m.shape[0])
if ne(np.matmul(m, mt), ee): raise ValueError()
print()y2 = [0] * N
for i in range(N):for j in range(N): y2[i] += mc[i][j] * x[j]
if ne(y, y2): raise ValueError()y2 = [0] * N
for i in range(N):s = ''for j in range(N): s += f'{ms[i][j]}*{x[j]} + 's = s[:-3]y2[i] = eval(s)print(f'{[i]} {s} = {y2[i]:.3f}')
if ne(y, y2): raise ValueError()
print('')print('恭喜,你(基本)明白DCT了!可M为啥是正交矩阵?!')a = ms; b = np.array(ms).T; e = [[0] * N for _ in range(N)]
for i in range(N):for j in range(N):s = ''for k in range(N): s += f'{a[i][k]}*{b[k][j]} + 's = s[:-3]print(f'[{i},{j}] {s}')e[i][j] = eval(s)
if ne(e, ee): raise ValueError()
print()print('如果用上复数(欧拉公式),就可以用等比数列求和公式了!!')

 

http://www.gsyq.cn/news/24578.html

相关文章:

  • 这些SAP实施公司哪家强?国内比较好的SAP实施商推荐
  • 博士研究文档管理技术指南
  • 10/19
  • 10.11-10.18 一周总结
  • 10/19/2025 一周总结
  • AI元人文:跨学科视野下的人工智能伦理新范式
  • Rust 开发最佳实践(Rustlang Best Practices)
  • 20232322 2025-2026-1 《网络与系统攻防技术》实验二实验报告
  • 20232301郑好 实验二 后门原理与实践
  • 2025年复合钢丝网厂家推荐排行榜,昆山高精密网版,复合钢丝网公司精选!
  • 2025 年中国超声波流量计行业品牌全景分析报告:十大高性能品牌技术、性能与市场优势深度解析
  • 学习华为昇腾AI教材人工智能研发框架部分Day2
  • 实用指南:WebSocket和长轮询技术在实时性和资源消耗方面有哪些具体的数据对比?
  • 软件工程第三次作业-结对项目
  • Azure DevOps Server 25H2 安装手册
  • 2025精密球轴承优质厂家推荐:无锡雨露精工,国产高端定制首选!
  • Azure DevOps Server 25H2 最新版本发布
  • 2025年粘度计厂家推荐排行榜,在线/旋转/振动/实验室粘度计,反应釜/管线在线粘度计公司推荐!
  • 20232306 2025-2026-1 《网络与系统攻防技术》实验二实验报告
  • 对话式AI竞赛决赛队伍揭晓
  • Boids算法
  • 常见问题解决 --- 为什么我导出的apk不包含dex文件
  • 2025年润滑油厂家推荐排行榜,工业润滑油,汽车润滑油,发动机润滑油,甲醇发动机润滑油,全合成润滑油,长效发动机润滑油公司推荐!
  • 10.19 —— (VP)2022icpc西安
  • Redis 有序集合解析 - 指南
  • 科技领域导师制度与因果分析方法解析
  • 完整教程:使用Celery处理Python Web应用中的异步任务
  • 2025年UV光源厂家推荐排行榜,UV面光源,UV LED点光源,UV LED面光源,UV LED固化机公司精选
  • 比赛与好题记录(2025 9-10)
  • 函数简单传入参数的汇编分析 - 指南