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