小虎最近发现了很有意思的采样定理,它是用来解决混叠失真的一个方法,这里小虎就用MATLAB带大家来理解一下这两个概念。

全文目录

  • 什么是周期混叠和采样定理
  • 混叠失真
  • 采样定理
  • 采样函数
  • 错误的采样函数
  • 仿真结果
  • 物理意义
  • 代码分析
  • 完整代码
  • 更多

什么是周期混叠和采样定理

混叠失真

对于带限信号混叠信号分选python代码 信号采样混叠_混叠信号分选python代码,如果对信号的采样频率不够大的话,将会出现混叠失真,一旦出现混叠失真,那么采样将不能够完美重构信号。

采样定理

采样定理(Nyqust and Shannon sampling theorem)是指,当采样频率混叠信号分选python代码 信号采样混叠_采样频率_02大于等于信号最高频率混叠信号分选python代码 信号采样混叠_代码分析_03的两倍时,采样后的频谱不会产生混叠失真
混叠信号分选python代码 信号采样混叠_混叠信号分选python代码_04

采样函数

采样周期为混叠信号分选python代码 信号采样混叠_混叠信号分选python代码_05,采样函数为混叠信号分选python代码 信号采样混叠_混叠信号分选python代码_06,则采样函数的表达式如下。
混叠信号分选python代码 信号采样混叠_物理意义_07
当且仅当混叠信号分选python代码 信号采样混叠_采样频率_08时,后面一项不等于0。故
混叠信号分选python代码 信号采样混叠_采样频率_09
将我们的采样频率混叠信号分选python代码 信号采样混叠_混叠信号分选python代码_10代入即可求出采样函数。
例如混叠信号分选python代码 信号采样混叠_物理意义_11的采样函数是混叠信号分选python代码 信号采样混叠_代码分析_12

错误的采样函数

比如下面这个,不管采样点和采样频率怎么取,采样结果很大程度地偏离了原始信号。采样函数仅存在于模拟仿真,实际采样中,注意的参数是采样频率。

混叠信号分选python代码 信号采样混叠_代码分析_13

仿真结果

混叠信号分选python代码 信号采样混叠_采样频率_14

物理意义

1.这里的采样点数量总共只有11个,这11个点已经足够描述一个周期的信号,所以对分析结果没有影响。
2. 当采样频率低于混叠信号分选python代码 信号采样混叠_代码分析_15时,采样得到的信号与原信号由于混叠失真无法很好构建原信号,而且混叠信号分选python代码 信号采样混叠_采样频率_02越小,偏离越严重,可以从上面图1~3看到。原因是采样的间隔太宽了,在这么宽的间隔中已经经过了好几个信号的周期,取得点相对于原信号密度十分低,这样得到一个新的信号规律将是片面的新点连接
3. 当采样频率大于混叠信号分选python代码 信号采样混叠_代码分析_15时,可以从上面图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');