2

我是 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}');
4

1 回答 1

1

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

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

你的括号不平衡来自

  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

编辑2:

% 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
于 2014-12-28T13:31:51.397 回答