Matlab 以给定速率生成100个样本

Matlab 以给定速率生成100个样本,matlab,signal-processing,Matlab,Signal Processing,我想在matlab中生成100个频率为0.2Hz、采样率为2Hz的正弦波样本,为此,我使用了以下代码 f=0.2; fs=2; A=100;%suppose that amplitude is 100 q=20; t=0:1/fs:50; x=A*sin(2*pi*f*t+q); 但x的长度是101,而不是100;那么,生成100个样本数据的正确形式是什么呢?我已经大致计算了获得100个样本数据的上限;为此,我选择了50;但还有其他方法吗?当然我可以计算周期 T=1/f=5; 但是

我想在matlab中生成100个频率为0.2Hz、采样率为2Hz的正弦波样本,为此,我使用了以下代码

f=0.2;
 fs=2;
 A=100;%suppose that amplitude is 100
 q=20;
 t=0:1/fs:50;
 x=A*sin(2*pi*f*t+q);
但x的长度是101,而不是100;那么,生成100个样本数据的正确形式是什么呢?我已经大致计算了获得100个样本数据的上限;为此,我选择了50;但还有其他方法吗?当然我可以计算周期

T=1/f=5;

但是我该如何使用它呢?我应该用它乘以fs,还是反过来用fs除以句点呢?

问题是在
t=0:1/fs:50从0开始,这解释了为什么会得到100多个样本

解决方法之一是:

 number_of_sample_data = 100;
 f=0.2;
 fs=2;
 A=100;%suppose that amplitude is 100
 q=20;
 t=0:1/fs:((number_of_sample_data-1)*1/fs);
 x=A*sin(2*pi*f*t+q);
其中:

 >> length(x)

 ans =
 100

您可以尝试
linspace
功能,即:

number_of_sample_data = 100;
f = 0.2;
fs=2;
A=100;%suppose that amplitude is 100
q=20;
tf=number_of_sample_data/fs; %final time
t=linspace(0,tf,number_of_sample_data);
x=A*sin(2*pi*f*t+q);

但是,请注意,
linspace
不会总是给出与@Franck Dernoncourt更有效的解决方案完全相同的数值。这是因为有些数字不能用浮点表示,而
linspace
构建向量的方式略有不同。键入
编辑linspace
,查看如何编辑。对于您给出的特定值,@Franck Dernoncourt的解决方案更有效、更精确,因为1/fs=0.5可以用浮点精确表示。

像这样是吗?出于好奇,有没有其他方法?我不这么认为,这是非常标准的。使用下面@horchler提到的linspace函数。