在Matlab中以正好奈奎斯特速率进行采样

Tun*_*lan 3 matlab signal-processing sampling

今天我在matlab中偶然发现了一个奇怪的结果.让我们说我有一个正弦波

f = 1;
Fs = 2*f;
t = linspace(0,1,Fs);    
x = sin(2*pi*f*t);
plot(x)
Run Code Online (Sandbox Code Playgroud)

结果如图所示.

http://i.imgur.com/eUse3MO.jpg

我订的时候

f = 100
Run Code Online (Sandbox Code Playgroud)

结果如下图所示,

http://i.imgur.com/d5s5G0U.jpg

这是什么原因?这是奈奎斯特采样定理,因此它应该正确地产生正弦.当然,当我采用Fs >> f时,我会得到更好的结果和非常好的正弦形状.我对自己的解释是,Matlab在浮动数字方面遇到了困难,但我不确定这是否属实.有人有什么建议吗?

Lui*_*ndo 5

在第一种情况下,您只生成2个样本(第三个输入linspace是样本数),因此很难看到任何内容.

在第二种情况下,您将从0到1生成200个样本(包括这两个值).因此采样周期为1/199,采样频率为199,略低于奈奎斯特速率.所以存在混叠:你看到频率为100的原始信号加上频率为99的别名.

换句话说:以下代码再现了您的第二个数字:

t = linspace(0,1,200);
x = .5*sin(2*pi*99*t) -.5*sin(2*pi*100*t);
plot(x)
Run Code Online (Sandbox Code Playgroud)

.5-.5上述的事实,一个正弦波可以分解为两个频谱三角洲在正频率和负频率的总和,并且这些增量的系数具有相反的符号干.

这两个正弦波的总和相当于幅度调制,即由频率为1/2的正弦调制的频率为99.5的正弦波.由于时间跨度从0到1,调制器信号(其频率为1/2)仅完成半个周期.这就是你在第二个数字中所看到的.


为避免混叠,您需要将采样率提高到奈奎斯特速率以上.然后,要从其样本中恢复原始信号,您可以使用截止频率为Fs/2的理想低通滤波器.在你的情况,但是,因为你是抽样低于奈奎斯特率,你会不会在频率99恢复频率为100的信号,而是它的别名.

如果您采样高于奈奎斯特速率,例如Fs = 201,则可以从样本中理想地恢复原始信号.但这需要一个几乎理想的低通滤波器,在通带和阻带之间有一个非常明显的过渡.即,别名现在处于频率101并且应该被拒绝,而所需信号将处于频率100并且应该通过.

放宽滤波器要求,您需要的样品可以高于奈奎斯特速率.这样,别名就会从信号中进一步说明,并且过滤器可以更轻松地将信号与别名分开.


这并不意味着图表看起来像您的原始信号(参见SergV的回答); 它只意味着经过理想的低通滤波后.