今天,我在matlab中偶然发现了一个奇怪的结果。假设我有一个正弦波
f = 1;
Fs = 2*f;
t = linspace(0,1,Fs);
x = sin(2*pi*f*t);
plot(x)
结果就在图中。
当我出发时,
f = 100
结果见下图,
具体原因是什么?这是奈奎斯特采样定理,因此它应该适当地产生正弦。当然,当我取,f,时,我得到了更好的结果和很好的正弦形状。我对自己的解释是,Matlab在使用浮点数时遇到了困难,但我不太确定这是否属实。有人有什么建议吗?
发布于 2015-04-17 06:54:50
你的问题与奈奎斯特定理和混叠无关。这是一个简单的图形表示问题。您可以更改您的代码,即正弦频率将降低Nyquist限制,但图形将像以前一样奇怪:
t = linspace(0,1,Fs+2);
plot(sin(2*pi*f*t));
结果:
为了解释问题,我修改了您的代码:
Fs=100;
f=12; %f << Fs
t=0:1/Fs:0.5; % step =1/Fs
t1=0:1/(10*Fs):0.5; % step=1/(10*Fs) for precise graphic representation
subplot (2, 1, 1);
plot(t,sin(2*pi*f*t),"-b",t,sin(2*pi*f*t),"*r");
subplot (2, 1, 2);
plot(t1,sin(2*pi*f*t1),"g",t,sin(2*pi*f*t),"r*");
见结果:
你的眼睛和大脑可以很容易地理解这些图表代表正弦波。
将频率改为更高:
f=48; % 2*f < Fs !!!
在蓝线和红星上看到。你的眼睛和大脑现在不明白这些图表代表着同样的正弦波。但你的“红星”实际上是正弦波的有效值。看下面的图表。
最后,对于频率为f=50 (2*f =Fs)的正弦有相同的图形:
附注:
Nyquist-Shannon抽样定理表明,如果:
然后你可以在任何时候再现函数的值(在我们的图上的绿色曲线)。您必须使用sinc插值来完成它。
发布于 2015-04-18 05:39:39
复制自Matlab帮助:
线段空间
生成线性空间向量语法
y = linspace(a,b)
y = linspace(a,b,n)
描述
线性空间函数生成线性空间矢量。它类似于冒号运算符":",但直接控制点数。
Y=线性空间(a,b)生成一个行向量y,在a和b之间线性地间隔100点。
Y= linspace(a,b,n)生成在a和b之间线性排列的n个点的行向量y。对于n<2时,线性空间返回b。
创建一个从1到500之间的100个线性行距数字的向量:
A = linspace(1,500);
创建一个从1到36之间的12个线性行距数的向量:
A = linspace(1,36,12);
发布于 2015-04-18 06:06:08
对于Nyquist间隔来说,linspace并不明显,所以您可以使用常见的形式:
t = 0:Ts:1;
或
t = 0:1/Fs:1;
并改变F值。
第一个数字是由于'0':sin(0)和sin(2*pi)的近似。我们可以注意到范围在10^(-16)级。
https://stackoverflow.com/questions/29661617
复制相似问题