Advanced Lab Topic 1 这段文字截取自一份PPT,主题为引力波的数据处理与分析,最后一节似乎涉及滤波
Time frequency analysis#
时频分析#
- 使用Matlab的
spectrogram函数对到目前为止已编码的信号进行时频绘图[url]。 - 每个小组应选取下一个小组编写的信号函数(按环形进行)
- 读取信号生成函数帮助(在Matlab中使用“help
”),必要时读取关联的 test<functionName>.m脚本 - 如果帮助/测试脚本文档不充分,通知函数/脚本的作者进行完善
- 每个函数的作者应如
DSP/crcbgenqcsig.m所示在函数文件中添加自己的姓名
- 每个函数的作者应如
- 以适当的奈奎斯特采样频率生成信号时间序列
- 制作spectrogram:成功后,将spectrogram生成添加到
test<functionName>.m脚本中
- 读取信号生成函数帮助(在Matlab中使用“help
- 参见
DSP/SpecgrmQCDemo.m作为示例 - 强烈推荐:查看Matlab中
spectrogram的文档(从“help spectrogram”开始,并跟进帮助末尾的超链接)
Filtering#
滤波#
- 使用生成正弦波的函数生成包含三个正弦波之和的信号,参数如下:
- 采样点数:2048
- 采样频率:1024 Hz
- 用此采样频率能生成的离散时间正弦波的最高频率是多少?
| 信号1 | 信号2 | 信号3 | |
|---|---|---|---|
| $A$ | 10 | 5 | 2.5 |
| $f_0$ | 100 | 200 | 300 |
| $\phi_0$ | 0 | $\pi/6$ | $\pi/4$ |
- 使用Matlab的
fir1函数设计3个不同的滤波器,使得第$i$个滤波器仅允许第$i$个信号通过 - 将每个滤波器应用于该信号,并展示输入和输出的周期图(所有小组进行相同练习;将滤波器设计分配给小组成员)
FIR filter design#
FIR滤波器设计#
>> help fir1
fir1 使用窗函数法设计FIR滤波器。
B = fir1(N,Wn)设计一个$N$阶低通FIR数字滤波器,并返回长度为$N + 1$的向量$B$作为滤波器系数。截止频率$Wn$必须在$0 < Wn < 1.0$之间,其中$1.0$对应采样率的一半。滤波器$B$是实的且具有线性相位。滤波器在$Wn$处的归一化增益为-6dB。
B = fir1(N,Wn,'high')设计一个$N$阶高通滤波器。也可以使用B = fir1(N,Wn,'low')设计低通滤波器。
如果$Wn$是一个两元素向量,$Wn=[W1\ W2]$,fir1返回一个$N$阶带通滤波器,通带为$W1 < W < W2$。也可以指定B = fir1(N,Wn,'bandpass')。如果$Wn = [W1\ W2]$,B = fir1(N,Wn,'stop')将设计一个带阻滤波器。
Filtering#
滤波#
- Matlab滤波器设计函数的主要要点是频率相对于输入数据采样率的一半来指定
>> help fir1- 使用窗函数法设计FIR滤波器。$B = \text{fir1}(N, Wn)$设计一个$N^{\text{th}}$阶低通FIR数字滤波器,并返回长度为$N + 1$的向量$B$作为滤波器系数。截止频率$Wn$必须在$0 < Wn < 1.0$之间,其中$1.0$对应采样率的一半。
fir1是最简单的FIR滤波器设计方法(fir2和firls是更复杂的方法):适用于设计标准低通、高通和带通滤波器。- 对于练习,你必须用适当的频率限制设计上述三种类型的滤波器。
- 研究脚本
DSP/LowPassFilterDemo.m,了解低通滤波器是如何设计并应用于二次啁啾信号的。
好的,下面详细推导 fir1 和 fftfilt 的数学原理。
一、fir1 的数学原理#
1. FIR 滤波器的定义#
有限冲击响应(FIR)滤波器的输出为: $$ y[n] = \sum_{k=0}^{M} b[k],x[n-k] $$ 其中 $b[k]$ 是滤波器系数,$M$ 是滤波器阶数,$x[n]$ 是输入信号。
2. 理想低通滤波器的冲激响应#
理想低通滤波器的频率响应为: $$ H_{ideal}(f) = \begin{cases} 1, & |f| \leq f_c \ 0, & |f| > f_c \end{cases} $$ 其对应的时域冲激响应(sinc函数): $$ h_{ideal}[n] = 2f_c \cdot \text{sinc}(2\pi f_c (n - M/2)) $$ 其中 $f_c$ 是归一化截止频率,$\text{sinc}(x) = \frac{\sin(x)}{x}$。
3. 加窗法#
理想冲激响应是无限长的,实际 FIR 只能取有限长度。
fir1 用加窗法截断理想冲激响应:
$$
b[n] = h_{ideal}[n] \cdot w[n]
$$
其中 $w[n]$ 是窗函数(如汉明窗、矩形窗等)。
4. 归一化截止频率#
fir1 的截止频率参数 $W_n$ 是归一化到奈奎斯特频率的:
$$
W_n = \frac{f_c}{f_s/2}
$$
其中 $f_s$ 是采样频率。
二、fftfilt 的数学原理#
1. 卷积的定义#
FIR 滤波器的时域实现是卷积: $$ y[n] = (b * x)[n] = \sum_{k=0}^{M} b[k],x[n-k] $$
2. 卷积定理#
卷积定理:时域卷积等价于频域乘法。 $$ \mathcal{F}{b * x} = \mathcal{F}{b} \cdot \mathcal{F}{x} $$ 其中 $\mathcal{F}$ 表示傅里叶变换。
3. FFT 快速卷积#
- 对 $b$ 和 $x$ 补零到同样长度 $N$,做 FFT 得到 $B[k]$ 和 $X[k]$。
- 频域相乘:$Y[k] = B[k] \cdot X[k]$
- 逆 FFT 得到时域输出 $y[n]$。
4. 分块处理(overlap-add)#
当信号很长时,fftfilt 会把信号分成多段,每段与滤波器系数做 FFT 卷积,最后拼接(overlap-add)得到完整输出。
总结#
- fir1:用加窗法设计 FIR 滤波器,核心是截断理想冲激响应并加窗。
- fftfilt:用 FFT 实现滤波器系数与信号的卷积,利用卷积定理将时域卷积转为频域乘法,大幅提升效率。
如需具体公式推导或代码实现细节,可继续追问!