如何基于DCT系数计算信号能量及前n个大系数的能量占比
结论
你给出的计算逻辑完全正确,核心依据是正交变换的能量守恒特性。
理论依据
- DCT是正交变换,满足帕塞瓦尔恒等式:信号在时域/空域的总能量,和变换到DCT域后的总能量完全相等(仅可能差一个固定的归一化常数,不同DCT实现的常数取值有差异,但不影响比例计算)。
- 信号的能量可以直接用向量L2范数的平方表征:L2范数
norm(v)的计算规则为$\sqrt{\sum_{i} v_i2}$,因此前n个最大DCT系数的能量和为$\text{norm}(X_{topn})2$,全部DCT系数的总能量为$\text{norm}(X)^2$,二者求比值时开平方运算会抵消,最终结果和直接用范数求比值完全一致。
2D图像场景适配方法
如果是计算2D图像的DCT系数能量占比,仅需要先对图像做2D DCT变换,再将得到的2D系数矩阵拉平为一维向量,后续逻辑和一维场景完全相同。
参考代码说明
你贴出的Matlab代码逻辑如下:
X = dct(x); % 对输入一维信号x做DCT变换,得到系数向量X [XX,ind] = sort(abs(X),'descend'); % 按DCT系数的绝对值从大到小排序,得到排序后索引 i = 1; while norm(X(ind(1:i)))/norm(X) < 0.99 % 累加系数直到选中的系数能量占总能量的99% i = i + 1; end
内容的提问来源于stack exchange,提问作者jossdb
相关产品推荐
相关产品推荐

