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

时间:2013-05-12 15:13:44

标签: 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;

但我怎么能用呢?我应该用fs乘以fs,反之亦然fs应除以句点?

2 个答案:

答案 0 :(得分:3)

您可以尝试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稍微不同地构建矢量。输入edit linspace查看方法。对于您给出的特定值,@ Frank Dernoncourt的解决方案更高效,更精确,因为1 / fs = 0.5可以完全以浮点表示。

答案 1 :(得分:2)

问题在于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