标量/向量/矩阵的相关运算
矩阵乘法
知乎-矩阵求导术:上篇和下篇。本文基本上是这两篇文章内容的重新整理。
刘建平Pinard系列博客,这个博客主要用于查缺补漏
教材:《矩阵分析与应用》,作者张贤达
博客:矩阵求导总结
查询手册:The Matrix Cookbook
超级强大的在线矩阵求导工具:Matrix Calculus
2 信号处理中数学公式Matlab编程实现
2.1 Wigner分布的实现
2.1.1 理论介绍
首先,下面这部分内容来自书籍《现代信号处理教程(第二版)》,该书籍的相关信息请参考下面这两个链接:
信号
信号处理算法要服务于实际工程,即最终的目的是要将它们应用于科研或工程的实际。因此,上面这种连续域无限长的理论公式必须要进行离散化和有限化才能在我们这个非连续有限的物理世界中实现,这时所遇到的问题就是信号的离散化及数据的有限长问题。
- 离散化
要离散化,就要对信号进行采样(把时间离散化),对于信号
进一步,要用计算机计算,连续的积分变量也要离散化,因此我们令
注意:上面这种描述我不知道是否准确,但是在写的过程中,还有如下一种思考: 信号 这时候我们只要把 假设这里暂不考虑有限性问题,那么就可以编程实现 虽然在 PS:还有一点要补充地是,为什么 额。。。其实在写这篇博客的时候感觉也不好说,或者自己还没有掌握本质,只能暂时解释为:要考虑 |
离散化之后,信号其实就变成了一系列离散的点了,比如
注意1:这里
是离散化了,但是 还是没有离散化,因为虽然 离散化了,但是 是连续的,一个连续的值 乘以一个离散固定值 仍然是连续值。
注意2:只是在对计算机计算时可以人为地把
归一化为1,并不是说我们要忘记 的值,当上述通过上式计算出结果后,我们要把对应 的轴乘以 ,对应 的轴除以
在继续讲解有限性之前,还有一个点需要插入,但是这里我就先不讲了,因为我自己也还无法弄懂,简单粘贴一下书中截图,后续如果有机会再补充:

- 有限性
现在还剩下两个问题需要解决,① 一是频率
现在令:
并假定
对于信号离散化之后的下标问题——即采用正负对称下标还是从0开始的下标,这里暂时我也还无法确定,有可能两种方法都行,也有可能需要按照情况讨论,不管怎么样,按照书中的讲解,这里就以上面的假定为例,即:
这里直接通过具体计算来展示,比如我们令
下标索引 |
||
---|---|---|
根据上表可以看出,由于下标采用的是
另外,对于计算机而言,数据长度不一样的时候需要进行0填充(PS:这句话肯定还需进一步修改,这里暂时这样记录),将
方法1:在序列后面补零:
下标索引 |
||
---|---|---|
方法2:在序列两侧补零:
下标索引 |
||
---|---|---|

参考书籍中的原文说的是选取方法1:在序列后面补零,但是,我觉得可能使用方法2:在序列两侧补零更合适一点,毕竟上面fftshit
问题,这个我可能穿插在代码部分,这里就先不展开了,这样表达式就变成了:
最后,看一下
也即,对于
所以,最终公式的完全离散化表达为:
2.1.2 代码实现
既然完成了公式的离散化,下面就可以编写程序实现了,一个示例程序如下所示。
- 首先产生一个线性调频信号
clc; clear; close all;
% 调频率
kr = 4;
% 信号持续时间4s
T = 4;
% 带宽
B = kr*T;
% 采样频率
fs = 4*B;
% 采样间隔
Ts = 1/fs;
% 采样点数
N = T*fs;
% 时间轴
t = -N/2:N/2-1;
% 解析信号 时间轴
x = 2*exp(1i*kr*pi*(t*Ts).^2);
X = fftshift(fft(fftshift(x)));
figure;
subplot(2, 2, 1);
plot(t*Ts, real(x));
xlabel('t'); ylabel('x(t)'); legend('x(t)');
subplot(2, 2, 2);
plot(t*fs/N, abs(X));
xlabel('f'); ylabel('|X(f)|'); legend('X(w)');
- 然后,调用一个函数来计算
矩阵,也可以自己写,然后通过一个例子来展示经过该函数后的输出
function R = rx(x, N)
# PS:这段代码来自下面的原创力文档链接
R = zeros(N, N);
for n = 0:N-1
M = min(n, N-1-n);
for k = 0:M
R(n+1, k+1) = x(n+k+1)*conj( x(n-k+1) );
end
for k = N-1:-1:N-M
R(n+1, k+1) = conj( R(n+1, N-k+1) );
end
end
% 上面设计的循环逻辑我个人是人为有点问题,因此按照我自己的理解:下面3行单独把R的第1列挪到最后一列
% PS1:这个问题本质就是fftshit和ifftshift的问题,我现在还没搞懂,因此下面3行可要可不要
% PS2:这个逻辑应该好修改,但是我懒得改了,毕竟不是目前的主要任务
RM = R;
R(:, 1:N-1) = RM(:, 2:N);
R(:, N) = RM(:, 1);
end
示例测试该函数:
clc; clear; close all;
% 偶数情况
x = ones(1, 8);
Rx = rx(x, length(x));
figure(1);
heatmap(Rx)
% 奇数情况
y = ones(1, 9);
Ry = rx(y, length(y));
figure(2);
heatmap(Ry)
输出结果如下:
偶数情况 | 奇数情况 |
---|---|
![]() |
![]() |
🚀 有3个点需要注意:
① 第1:偶数情况下,该函数在信号
② 第2:上面的图是保留函数最后3行的结果,自己也可以尝试去掉最后3行运行查看结果,差异就是最后一列在前在后的区别。
③ 第3:通过与我自己用visio绘制的图形可知,该函数的输出结果是采用方式2,并且经过fftshift
之后的结果,fftshift
就相当于把
- 进行WVD变换
TF = zeros(N, N);
for n = 0:N-1
temp = fftshift(fft( R(n+1, :) ));
TF(n+1, :) = temp;
end
fnew = t*fs/2/N;
tnew = t*Ts;
[F, T] = meshgrid(fnew, tnew);
subplot(2, 2, 3);
mesh(F, T, abs(TF));
xlabel('频率');
ylabel('时间');
subplot(2, 2, 4);
contour(F, T, abs(TF));
可以看到,上面的代码利用了fft
函数进行快速WVD变换,可以这样做是因为,考察DFT函数:
我们把DFT函数与离散化的WVD表达式对比,就很明显可以得到,把

参考链接1:MATLAB辅助现代工程数字信号处理 第二版 作者 李益华 第6-10章_ 第8章.ppt - 原创力文档
2.2 离散傅里叶DFT的实现
2.2.1 连续傅里叶变换的离散化
有了上面的基础,下面我自己想试着写一下DFT的实现。
连续傅里叶变换的公式为:
首先,对积分变量t进行离散化:
对于计算机来说,离散化后的
下面,就要考虑有限化了,这里很简单,信号
这就是离散时间傅里叶变换DTFT了。理论上,到此,我们就可以计算任意一个DTFT->DFT
。
观察到,
上面的fft
函数),都是默认
至此,算是彻底完成了连续傅里叶变换FT的离散化。下面可以编写程序了。
2.2.2 根据自己离散化的公式编写程序
clc; clear; close all;
% ====================================================
% 随机构建一个信号x(n)
% ====================================================
x = [1 0.6 0.2 -0.2 -0.6 -1 -0.6 -0.2 0.2 0.6 ...
1 0.6 0.2 -0.2 -0.6 -1 -0.6 -0.2 0.2 0.6 ...
1 0.6 0.2 -0.2 -0.6 -1 -0.6 -0.2 0.2 0.6 ...
1 0.6 0.2 -0.2 -0.6 -1 -0.6 -0.2 0.2 0.6 ...
1 0.6 0.2 -0.2 -0.6 -1 -0.6 -0.2 0.2 0.6 ...
1 0.6 0.2 -0.2 -0.6 -1 -0.6 -0.2 0.2 0.6 ...
1 0.6 0.2 -0.2 -0.6 -1 -0.6 -0.2 0.2 0.6];
x = [x, x];
% ====================================================
% 使用fft进行傅里叶变换
% ====================================================
X = fft(x);
figure;
plot(abs(X), 'LineWidth', 2.5);
hold on;
% ====================================================
% 使用自己离散化公式进行DFT
% ====================================================
N = length(x); % 频域的采样点可以自己调整
n = 0:length(x)-1;
K = 1;
myX = zeros(1, N);
for k = 0:1/N:1-1/N
temp = exp(-1i*2*pi*k*n).';
myX(K) = x*temp;
K = K+1;
end
plot(abs(myX), '.-y')
legend('官方fft','自写DFT')
结果如下:
2.2.4 补充1:波形分辨率与频率分辨率
一般而言,n点信号的离散傅里叶变换 (DFT) 的变换结果(频域)也是n个数据点。但在实际应用中,对实际信号作FFT时,常常涉及到变换前数据需要补零 (Zero padding) 的问题。一些论坛里,曾看到某些专业人士从信息论的角度分析认为:“Zero padding没有增加时域信号的有效信息,因此,不会改变DFT/FFT的分辨率”。
- 什么是补零
简单来说,补零 (Zero Padding) 就是对变换前的时域或空域信号的尾部添加若干个0,以增加数据长度。如下图所示,为含有

左图中信号长度为1000个样点,采样频率为
- 两种分辨率的辨析
这里涉及到两种意义下的分辨率问题,一种叫“波形频率分辨率”,一种叫“FFT分辨率”。波形频率分辨率是指可以被分辨的2个频率的最小间隔 (Spacing);而FFT 分辨率则是频谱中的数据点数 (The number of points in the spectrum),它是与做FFT的点数直接相关的。
因此,波形频率分辨率可定义为:
其中,
同样,FFT分辨率可以定义为:
其中,
值得注意的是,可能有很好的FFT分辨率,但却不一定能够很好的把2个频率成分简单的分开。同样,可能有很高的波形分辨率,但波形的能量峰值会通过整个频谱而分散开(这是因为FFT的频率泄漏现象)。可以通过下面的例子解释: 例1:信号时长为1秒,采样率 波形频率分辨率: FFT分辨率: 例2:信号时长为0.5秒,采样率1000 Hz,FFT点数2000(补零) 波形频率分辨率: FFT分辨率: (1) 补零(Zero-Padding)的陷阱 现象:通过补零增加FFT点数(如例2),频谱显示的频点间隔更小(FFT分辨率提高)。 误区:误以为补零能提高物理分辨率。实际上,补零仅增加频谱插值点数,使频谱曲线更平滑,但无法提升真实的频率分辨能力。 验证:若两个频率间隔小于 (2) 如何真正提高分辨率? 提升波形频率分辨率:必须增加信号的实际时长T(例如采集更长时间的数据)。 提升FFT分辨率:仅需增加 |
关于问题:我不明白波形频率分辨率为什么由信号实际时长T决定?为什么只有增加T才能提高真实分辨率?这个结论是如何推导出来的? 1. 直观解释:时间越长,分辨越清晰 想象你在听两个音调,比如钢琴上的两个键,它们的频率很接近(比如 440 Hz 和 441 Hz)。如果只听一瞬间(比如 0.1 秒),你可能听不出差别,因为耳朵需要时间来感知频率的周期性。但如果听的时间延长到 2 秒,你会更容易分辨出这两个音调的微小差异。信号处理也是类似的道理。 2. 数学推导:从傅里叶变换的本质看 对于一个连续时间信号 对这个有限长度信号进行傅里叶变换,得到的频谱为: 窗函数的频域影响:矩形窗 这意味着原始信号的频谱 假设信号 结果是两个 因此,频率分辨率定义为 |
关于问题:补零等价于频域sinc函数内插 进行zero padding只是增加了数据的长度,而不是原信号的长度。就好比本来信号是一个周期的余弦信号,如果又给它补了9个周期长度的0,那么信号并不是10个周期的余弦信号,而是一个周期的余弦加一串0,补的0并没有带来新的信息。其实zero padding等价于频域的sinc函数内插,而这个sinc函数的形状(主瓣宽度)是由补0前的信号长度决定的,补0的作用只是细化了这个sinc函数,并没有改变其主瓣宽度。而频率分辨率的含义是两个频率不同的信号在频率上可分,也就要求它们不能落到一个sinc函数的主瓣上。所以,如果待分析的两个信号频率接近,而时域长度又较短,那么在频域上它们就落在一个sinc主瓣内了,补再多的0也是无济于事的。 1. 问题的核心 补零(zero-padding)是在时域信号末尾添加零,使信号长度从 2. 证明:补零与sinc插值的关系 (1)原始信号及其频谱 假设有一个离散信号 频率间隔为 (2)补零后的信号 补零后,信号变为 其DFT为: 由于 频率间隔变为 证明步骤1:补零后的频谱表达式 将其视为 这表明 证明步骤2:频域插值的定义 插值的目标是从原始DFT 🌊 ① 在原始点 证明步骤3:从原始DFT重建 已知信号 将其代入 交换求和顺序: 证明步骤4:计算内层求和 内层是一个几何级数: 这正是 这就是用 证明步骤5:补零后的频谱与插值 将 整理后: 其中, 证明步骤6:为什么是 理想情况下, 补零的有限长度版本是对其的近似。 3. 物理意义:为什么sinc函数? 🚄 🚖 补零的频域效应:时域补零相当于频域与一个更宽的矩形窗卷积,其结果是用 步骤5中公式的推导整理过程: “相位项 参考链接:Sinc滤波器的解释 - 博客园 |
参考链接:傅里叶变换的波形分辨率与频率分辨率 - 微信公众号
3 实信号频谱对称,复信号频谱非对称
4 DFT/FFT 等效为窄带滤波器组
4.1 相干积累FFT实现方式:DFT/FFT 等效为窄带滤波器组
信号
设信号
此卷积在
可以观察到,两者是完全一样的,这样就说明了信号

4.2 用窄带滤波器组原理解释相干积累增益
https://zhuanlan.zhihu.com/p/609960189
5 非相干积累和相干积累
5.1 非相干积累
6 相干积累-DFT/FFT-窄带滤波器组-DBF
https://zhuanlan.zhihu.com/p/609960189
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】