2

我想在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 应该除以句点?

4

2 回答 2

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以查看方法。对于您给出的特定值,@Franck Dernoncourt 的解决方案既更有效也更精确,因为 1/fs=0.5 可以用浮点数精确表示。

于 2013-05-12T17:18:26.990 回答
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
于 2013-05-12T15:33:01.077 回答