【问题标题】:generate 100 sample at given rate以给定速率生成 100 个样本
【发布时间】:2013-05-12 15:13:44
【问题描述】:

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

【问题讨论】:

    标签: matlab signal-processing


    【解决方案1】:

    你可以试试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 可以精确地表示为浮点数。

    【讨论】:

      【解决方案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
      

      【讨论】:

      猜你喜欢
      • 2020-01-10
      • 1970-01-01
      • 1970-01-01
      • 2016-01-06
      • 2020-06-22
      • 2013-02-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多