香农采样定律
定理内容
采样频率(fsfs)必须至少是信号中最高频率(fmaxfmax)的两倍,即:
fs≥2⋅fmaxfs≥2⋅fmax这一最低采样频率 2⋅fmax2⋅fmax 被称为奈奎斯特频率(Nyquist Rate)。若低于此频率,会导致混叠(Aliasing)现象,即高频信号被错误地重建为低频信号。
关键概念
-
信号带宽
信号中最高有效频率分量 fmaxfmax 决定了信号的带宽。例如,音频信号带宽通常为 20 Hz - 20 kHz,最高频率 fmax=20 kHzfmax=20 kHz。 -
采样频率选择
-
例如,CD 音频的采样频率为 44.1 kHz(略高于 2 × 20 kHz),以满足人耳听觉需求。
-
实际应用中,常选择 fs=2.2⋅fmaxfs=2.2⋅fmax 以留出安全余量。
-
-
混叠(Aliasing)
当 fs<2fmaxfs<2fmax 时,高频成分在采样后会被“折叠”到低频区域,导致信号失真。例如,车轮在视频中看似反向旋转即为混叠现象。 -
抗混叠滤波器
采样前需使用低通滤波器滤除高于 fs/2fs/2 的频率成分,避免混叠。
数学解释
-
连续信号 x(t)x(t) 的傅里叶变换为 X(f)X(f),其频谱在 ∣f∣≤fmax∣f∣≤fmax 外为零。
-
以 fs≥2fmaxfs≥2fmax 采样后,离散信号频谱为原始频谱的周期性延拓,且无重叠。
-
通过理想低通滤波器(如 sinc 函数插值)可完美重建原始信号。
应用领域
-
数字通信:调制解调、信道编码。
-
音频处理:CD、数字录音。
-
图像处理:数码相机采样、图像压缩。
-
医学成像:MRI、CT 扫描信号重建。
注意事项
-
实际信号的非理想性:真实信号可能包含高频噪声,需通过抗混叠滤波器预处理。
-
非带限信号:若信号频率范围无限(如方波),需先滤波限制带宽。
香农采样定理是数字信号处理的基石,确保模拟世界到数字世界的高保真转换。理解并正确应用该定理,对避免信息丢失和信号失真至关重要。
#include <stdio.h>
#include <math.h>
// 信号参数
#define SIGNAL_FREQ 50 // 信号频率 (Hz)
#define AMPLITUDE 1.0 // 信号幅值
#define SAMPLE_RATE 1000 // 采样频率 (Hz),需满足香农定理:SAMPLE_RATE > 2*SIGNAL_FREQ
// 生成连续信号(示例为正弦波)
double generate_signal(double t) {
return AMPLITUDE * sin(2 * M_PI * SIGNAL_FREQ * t);
}
int main() {
double duration = 0.02; // 采样时长 (秒)
int num_samples = (int)(duration * SAMPLE_RATE); // 总采样点数
double sampling_interval = 1.0 / SAMPLE_RATE; // 采样间隔
printf("开始采样...\n");
printf("采样频率: %d Hz, 信号频率: %d Hz\n", SAMPLE_RATE, SIGNAL_FREQ);
printf("总采样点数: %d\n\n", num_samples);
// 执行采样并输出结果
for (int i = 0; i < num_samples; i++)
{
double t = i * sampling_interval; // 当前采样时间
double sample = generate_signal(t); // 获取采样值
// 输出采样结果(可替换为存储到数组或文件)
printf("t=%.4f s, 采样值=%.4f\n", t, sample);
}
return 0;
}
代码说明:
-
参数定义:
-
SIGNAL_FREQ:被采样信号的频率(50Hz) -
SAMPLE_RATE:采样频率(1000Hz),满足香农定理(>2×50Hz) -
AMPLITUDE:信号幅值
-
-
信号生成:
-
generate_signal()函数生成一个正弦波信号,可根据需求修改为其他信号
-
-
采样过程:
-
计算总采样点数
num_samples -
通过循环在等间隔时间点采集信号值
-
输出采样时间和对应的信号值
-
运行结果示例:
开始采样... 采样频率: 1000 Hz, 信号频率: 50 Hz 总采样点数: 20 t=0.0000 s, 采样值=0.0000 t=0.0010 s, 采样值=0.3090 t=0.0020 s, 采样值=0.5878 ... t=0.0190 s, 采样值=-0.5878
关键点:
-
采样率选择:确保
SAMPLE_RATE > 2×SIGNAL_FREQ,本例中1000Hz远高于最低要求100Hz -
信号扩展:可修改
generate_signal()函数生成方波、三角波等信号 -
实际应用:
-
将输出保存到文件(如CSV)用于后续分析
-
添加抗混叠滤波器(模拟前端低通滤波)
-
通过FFT实现频谱分析验证采样效果
-
验证香农定理:
尝试修改 SAMPLE_RATE 为低于100Hz(如80Hz),观察采样后的信号会出现频率混叠现象。
这个示例展示了香农采样定理的核心实现,实际工程中还需考虑量化、抗混叠滤波、重构等更多环节。
posted on 2025-05-21 09:07 CarryBricks 阅读(473) 评论(0) 收藏 举报
浙公网安备 33010602011771号