【问题标题】:why do we need time sampling to plot a stationary signal?为什么我们需要时间采样来绘制平稳信号?
【发布时间】:2015-02-24 22:05:57
【问题描述】:

我是 matlab 和信号处理的新手。我写了下面发布的代码。我无法理解的是,代码开头的time soecification 部分。我不知道为什么我们在指定间隔或持续时间时需要采样,我认为指定如下内容就足够了:

t = (0: 0.2: 1.0)  for an example,

为什么我需要像采样这样的东西来绘制静止信号。 另一个问题是,这段代码给了我一个错误,告诉我paranthesis imbalance 如何解决它。

代码

%% Time specifications:
  Fs = 8000;                       % samples per second
  dt = 1/Fs;                       % seconds per sample
  StopTime = 1;                    % seconds
  t = (0:dt:StopTime-dt);         % seconds

  x = (10)*cos(2*pi*3*t) ...          
  + (20)*cos(2*pi*6*t  ...  
   + (30)*cos(2*pi*10*t) ...
  + (50)*cos(2*pi*15*t);

  % Plot the signal versus time:
  figure;
  plot(t,x);
  xlabel('time (in seconds)');
  ylabel('Amplitude');
  title('Signal versus Time');
  title('{\bf Periodogram}');

【问题讨论】:

    标签: matlab signal-processing wavelet wavelet-transform continuous-fourier


    【解决方案1】:

    因为我们正在处理数字化信号。您不能绘制无限数量的信号样本。这就是为什么您需要在处理数字化信号之前指定一些参数,例如采样频率。采样频率为您提供了样本索引和时间之间的关系,即在一秒钟的信号中有多少样本。

    您还可以按照问题开头的建议定义时间向量,但如果您指定了对信号进行采样的采样频率,则更方便。尤其是如果您想进行一些信号处理(例如:Nyquist sampling theorem),了解不同采样频率的限制和属性至关重要。

    你的括号不平衡来自于

      x = (10)*cos(2*pi*3*t) ...          
      + (20)*cos(2*pi*6*t)  ...  % <= Missing parenthesis in this line
       + (30)*cos(2*pi*10*t) ...
      + (50)*cos(2*pi*15*t);
    

    编辑:

    要获得一种“实时绘图”,您可以将绘图代码更改为以下内容:

    figure;
    xlabel('time (in seconds)');
    ylabel('Amplitude');
    title('Signal versus Time');
    
    h = plot(nan);
    for i=1:length(t)
        set(h,'YData', x(1:i), 'XData', t(1:i));
        drawnow
    end
    

    EDIT2:

    % Time specifications:
    Fs = 8000;                       % samples per second
    dt = 1/Fs;                       % seconds per sample
    StopTime = 1;                    % seconds
    t = (0:dt:StopTime-dt);         % seconds
    
    x1 = (10)*cos(2*pi*3*t);
    x2 = (20)*cos(2*pi*6*t);
    x3 = (30)*cos(2*pi*10*t);
    x4 = (50)*cos(2*pi*15*t);
    
    % Plot the signal versus time:
    figure;
    xlabel('time (in seconds)');
    ylabel('Amplitude');
    title('Signal versus Time');
    
    h1 = plot(nan, 'r');
    hold on
    h2 = plot(nan, 'g');
    hold on
    h3 = plot(nan, 'black');
    hold on
    h4 = plot(nan, 'b');
    hold on
    for i=1:length(t)
        set(h1,'YData', x1(1:i), 'XData', t(1:i));
        set(h2,'YData', x2(1:i), 'XData', t(1:i)); 
        set(h3,'YData', x3(1:i), 'XData', t(1:i)); 
        set(h4,'YData', x4(1:i), 'XData', t(1:i)); 
        drawnow
    end
    

    【讨论】:

    • 感谢您的回答。您能告诉我如何将上述代码转换为随时间变化的非平稳信号吗?我尝试的是,您的答案中的代码相同,但每次“t”分别替换为 t-.2、t-.7、t-.5,是这样吗?
    • 我认为您对静态信号(这是一个更具统计性的术语)及其通过绘图的可视化有一些错误的印象。你所拥有的本质上是一个更大时间“框架”中的信号视图。这意味着您会看到您的时间在 x 轴上进行,以及您的适当的 x 瞬时值。如果您想真正看到情节的进展,则需要某种动画。但这不会给你任何额外的信息。
    • 我在我的答案中添加了一些代码,这将为您提供实时情节。这是你想要的吗?
    • 当然这是一个很好的信号呈现方式,我什至没有想到matlab有这样的功能。但是,我认为它不会显示频率内容随时间变化的非平稳信号
    • 你真的必须明确你想要达到的目标。你的最终目标是进行傅里叶分析,它会给你频率分量。但是,如果您想查看单个内容(即加法信号中的所有单个余弦波)随时间变化,请查看我的第二次编辑。因为你所有的余弦波都有一个不同的频率,所以频率分量不会随着时间的推移而变化。在您的信号的任何实例中,您的频率分量都会为 3、6、10 和 15 Hz。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-26
    • 2019-06-09
    • 2013-08-30
    • 1970-01-01
    • 2022-06-16
    • 2019-09-15
    相关资源
    最近更新 更多