2

我必须绘制信号 m(t) = A Sin(2 pi 1000 t) 并且我正在使用以下 Matlab 代码来执行此操作。

Fm=1000;%1 kHz

Fs = 2*Fm;

t = 0:1/Fs:10; % ( that is, time will run from 0 to 10 with a sample at every 1/2000th second )
Am=1;%amplitude
m=Am*sin(2*pi*Fm*t);

figure(1)
plot(t,m)
title('Message signal')
xlabel('Time in Seconds') 
ylabel('m(t)') 

但是,我得到的情节是

在此处输入图像描述

但另一方面,如果我使用以下代码,

Fm=1000;%1 kHz

t=linspace(0,10,2000);
Am=1;%amplitude
m=Am*sin(2*pi*Fm*t);

figure(1)
plot(t,m)
title('Message signal')
xlabel('Time in S')

在此处输入图像描述

我得到了一个适当的罪波。这里到底发生了什么?第一个代码有什么问题?

4

2 回答 2

3

第一个代码片段的问题是采样周期正好是正弦曲线周期的一半。由于您使用的特定采样时刻,您总是在信号的 null 处对信号进行采样。这就是为什么你得到接近的值0(它们并不完全是0因为浮点算术固有的数值不准确性)。

第二个代码片段中,由于在其端点linspace包含在内,因此采样周期略有不同。所以你没有和上面一样的问题,你确实得到了一个正弦曲线。但是,您有一个不同的问题,现在很明显,即由于采样不足而产生的混叠。观察绘制的正弦曲线的频率与应有的频率有何不同(小得多)。

解决这两个问题的方法是提高采样率。根据奈奎斯特准则,至少两倍于最大信号频率的采样率就足以重建原始信号。但这并不意味着直接绘制以该速率采集的样本会产生类似于信号的图形。为此,您需要一个显着大于的因子2。此外,避免将采样率选择为正弦频率的整数倍,以防止由采样过程“耦合”到第一个片段中的信号变化引起的问题。

因此,在您的代码中,例如尝试Fs = 100/3*Fm(您可能需要放大才能正确查看信号)。

于 2021-01-25T18:22:01.983 回答
0

Fm=1000 #%1 kHz

这是python版本

import math
import matplotlib.pyplot as plt
Fs = 2*Fm

#t = 0:1/Fs:10  #( that is, time will run from 0 to 10 with a sample at every 1/2000th second )
t=np.linspace(0,10,Fs)

Am=1   #%amplitude
m=[ Am*math.sin(2*math.pi*Fm*value) for value in t]
plt.plot(m)
plt.show()
于 2021-02-11T13:03:28.140 回答