信号处理趣学D5——利用仿真教你理解周期混叠和采样定理
小虎最近发现了很有意思的采样定理,它是用来解决混叠失真的一个方法,这里小虎就用MATLAB带大家来理解一下这两个概念。
什么是周期混叠和采样定理
混叠失真
对于带限信号 x ( t ) x(t) x(t),如果对信号的采样频率不够大的话,将会出现混叠失真,一旦出现混叠失真,那么采样将不能够完美重构信号。
采样定理
采样定理(Nyqust and Shannon sampling theorem)是指,当采样频率
ω
s
\omega_s
ωs大于等于信号最高频率
ω
m
a
x
\omega_{max}
ωmax的两倍时,采样后的频谱不会产生混叠失真。
ω
s
≥
2
ω
m
a
x
\omega_s\ge 2\omega_{max}
ωs≥2ωmax
采样函数
设采样周期为
T
s
T_s
Ts,采样函数为
x
t
(
s
)
x_t(s)
xt(s),则采样函数的表达式如下。
x
t
(
s
)
=
x
(
t
)
δ
T
(
t
)
=
x
(
t
)
∑
i
=
−
∞
∞
δ
(
t
−
n
T
s
)
x_t(s)=x(t)\delta_T(t)=x(t)\sum_{i=-\infin}^\infin \delta(t-nT_s)
xt(s)=x(t)δT(t)=x(t)i=−∞∑∞δ(t−nTs)
当且仅当
t
=
n
T
s
t=nT_s
t=nTs时,后面一项不等于0。故
x
t
(
s
)
=
∑
i
=
−
∞
∞
x
(
n
T
s
)
δ
(
t
−
n
T
s
)
x_t(s)=\sum_{i=-\infin}^\infin x(nT_s) \delta(t-nT_s)
xt(s)=i=−∞∑∞x(nTs)δ(t−nTs)
将我们的采样频率
f
s
f_s
fs代入即可求出采样函数。
例如
x
t
=
s
i
n
(
80
π
t
)
+
3
∗
s
i
n
(
180
π
t
)
x_t=sin(80\pi t)+3*sin(180\pi t)
xt=sin(80πt)+3∗sin(180πt)的采样函数是
x
s
=
s
i
n
(
80
π
n
/
f
s
)
+
3
∗
s
i
n
(
180
π
n
/
f
s
)
;
xs=sin(80\pi n/f_s)+3*sin(180\pi n/f_s);
xs=sin(80πn/fs)+3∗sin(180πn/fs);
错误的采样函数
比如下面这个,不管采样点和采样频率怎么取,采样结果很大程度地偏离了原始信号。采样函数仅存在于模拟仿真,实际采样中,注意的参数是采样频率。
仿真结果
物理意义
1.这里的采样点数量总共只有11个,这11个点已经足够描述一个周期的信号,所以对分析结果没有影响。
2. 当采样频率低于
2
ω
m
a
x
=
180
H
z
2\omega_{max}=180Hz
2ωmax=180Hz时,采样得到的信号与原信号由于混叠失真无法很好构建原信号,而且
ω
s
\omega_s
ωs越小,偏离越严重,可以从上面图1~3看到。原因是采样的间隔太宽了,在这么宽的间隔中已经经过了好几个信号的周期,取得点相对于原信号密度十分低,这样得到一个新的信号规律将是片面的新点连接。
3. 当采样频率大于
2
ω
m
a
x
=
180
H
z
2\omega_{max}=180Hz
2ωmax=180Hz时,可以从上面图4看到,采样得到的点连接后,但是很好的拟合出原始信号。
代码分析
自变量范围-0.1~0.1s。
t=-0.1:0.001:0.1;
画出原始信号。
x_t=sin(2*pi*40*t)+3*sin(2*pi*90*t);
plot(t,x_t);
hold on;
设采样点数量和采样频率。
n=-5:5;
fs=300;
在与原信号同一图幅上画出它的采样函数。
xs=sin(2*pi*40*n/fs)+3*sin(2*pi*90*n/fs);
stem(n/fs,xs,'r--');
plot(n/fs,xs,'r--');
xlabel('t');
ylabel('x_4(t)');
legend('x_4(t)','recovery');
完整代码
t=-0.1:0.001:0.1;
x_t=sin(2*pi*40*t)+3*sin(2*pi*90*t);
plot(t,x_t);
hold on;
n=-5:5;
fs=300;
xs=sin(2*pi*40*n/fs)+3*sin(2*pi*90*n/fs);
stem(n/fs,xs,'r--');
plot(n/fs,xs,'r--');
xlabel('t');
ylabel('x_4(t)');
legend('x_4(t)','recovery');
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)