演示混叠的效果

信息处理 matlab 离散信号 采样 混叠
2022-01-05 23:22:40

当我们在采样期间不使用奈奎斯特速率从信号中消除混叠时,信号看起来如何?

假设信号是正弦的,频率为 500 Hz,幅度为 2。

signal = 2*cos(2*pi*500*t)

如果我对其进行采样(替换 t=nTs , Ts = 采样周期和 n 代表样本数)并使用 MATLAB 中的 subplot 命令绘制具有不同采样周期的采样信号,我如何识别采样信号中的混叠?

这是绘制两个信号的示例代码,一个以奈奎斯特速率,而另一个低于奈奎斯特速率:

A = 2;
Fmax = 10;
Fs = 2*Fmax;
n = 0:1/Fs:1;
Cont = A*sin(2*pi*(Fmax/Fs)*n);
Cont1 = A*sin(2*pi*(Fmax/18)*n);
subplot(2,1,1)
stem(n,Cont)
hold on
stem(n,Cont1)

这是波形:

在此处输入图像描述

我无法识别别名。不使用奈奎斯特速率时对信号有何影响?

3个回答

您无法用特定频率的简单正弦曲线识别混叠,这在某种程度上是试图避免它的重点。您无法知道您“查看”的正弦曲线是 Hz 还是 Hz。Q2FsQ

单个混叠正弦分量看起来就像一个非混叠正弦波。如果您想体验混叠,您必须尝试使用​​更复杂的波形或随时间变化的正弦曲线。

“体验混叠”的一种方法是通过以下方式对啁啾进行欠采样:

Fs = 8000;t=0:(1./Fs):(5-1./Fs);p=2.*pi.*t; %Sampling Frequency, Time Vector, Phase Vector
y1 = chirp(t,0,5,Fs/2.0); %Create a chirp that goes from DC to Fs/2.0
spectrogram(y1); %Have a look at it through spectrogram, please pay attention at the axis labels. This is basically going to be a "line" increasing with time.
soundsc(y1,Fs); %Listen to it...It clearly "goes up" in frequency
y2 = chirp(t,0,5,Fs); %Now create a chirp that goes from DC to Fs
spectrogram(y2); %Have a look at it through spectrogram
soundsc(y2,Fs); %Listen to it...Do you "get" the folding of the spectrum?

通常,您可以将采样视为调制,因为这是在ADC 转换器的采样和保持元件中有效发生的事情。

这将使您能够更容易地理解诸如欠采样之类的概念(以及以低于 Nyquist 速率进行采样完全可以的应用程序)。而且,您可以在 MATLAB 中加载一个 WAV 文件(使用“wavread”),其中包含一些更复杂的信号,然后在使用“soundsc”收听它之前,只需将它与“方”波*相乘(您可能想要查找函数'square') 的频率低于 WAV 文件的这将有效地引入混叠的关键(不需要的)特性,即频谱的这种折叠结果不是很愉快,因此您可能希望降低扬声器音量。Fs

我希望这有帮助。

*编辑:显然,“正方形”返回一个幅度在区间 [-1,1] 内的正方形,因此在将其与您的信号相乘之前,最好将其重新缩放为:

aSquareWave = (square(100.*p)+1.0)/2.0 % Where p is the phase vector and here we are producing a square wave at 100Hz (given an Fs of 8kHz as above). aSquareWave's amplitude is now in the interval [0,1]

你有正确的想法,但一个关键的错误是搞砸了你的结果。

n=0:1/Fs:1;

通过使时间增量为 1/Fs,您隐含地使时间单位为秒。换句话说,“0”是0秒,“1”是1秒。

Cont = A*sin(2*pi*(Fmax/Fs)*n);

通过 Fs 对正弦频率进行归一化,您隐含地假设样本单位为 1/Fs 秒。这就是为什么当您打算每个周期只有两个样本(奈奎斯特率)时,您会在单个正弦曲线周期中获得大量样本。顺便说一句,任何一个样本单位都可以(1 秒或 1/Fs 秒),您只需要保持一致即可。

这是我对您的意图的尝试。

A = 2;
Fmax = 10;
Fs = 2*Fmax;
n=0:1/Fs:1;
Cont = A*cos(2*pi*Fmax*n);
Cont1 = A*cos(2*pi*Fmax*(20/18)*n);
subplot(2,1,1)
stem(n,Cont)
subplot(2,1,2)
stem(n,Cont1)

我将“sin”更改为“cos”,因为它击中了所有正弦曲线零点而不是峰值。 在此处输入图像描述

我认为您需要增加大小的频率或在采样中使用更大的步骤。

如果您有一个非常平滑的函数,则不会出现混叠。例如,无论您使用什么采样,常量函数都不会产生混叠。