зачем нам нужна временная выборка для построения стационарного сигнала?

Я новичок в 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}');

person user2121    schedule 28.12.2014    source источник


Ответы (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

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
person lmNt    schedule 28.12.2014
comment
Спасибо за твой ответ. подскажите, пожалуйста, как преобразовать указанный код в нестационарный сигнал, меняющийся во времени? то, что я пытался, это тот же код в ВАШЕМ ответе, но каждый раз, когда t заменяется на t-.2, t-.7, t-.5 соответственно, это так? - person user2121; 28.12.2014
comment
Я думаю, что у вас есть некоторые неправильные впечатления от стационарных сигналов (что является своего рода более статистическим термином) и их визуализации посредством построения графиков. То, что у вас есть, — это, по сути, представление сигнала в более крупном временном интервале. Это означает, что вы видите свое время, протекающее по оси x, и соответствующее мгновенное значение x. Если вы действительно хотите увидеть развитие сюжета, вам понадобится какая-то анимация. Но это не даст вам никакой дополнительной информации. - person lmNt; 28.12.2014
comment
Я добавил код в свой ответ, который даст вам живой сюжет. Это то, что вы хотели? - person lmNt; 28.12.2014
comment
конечно, это хороший способ подачи сигнала, я даже не думал, что в матлабе есть такой функционал. но, я думаю, он не показывает нестационарный сигнал, частотное содержание которого меняется со временем - person user2121; 28.12.2014
comment
Вы действительно должны уточнить, чего именно вы хотите достичь. Конечной целью для вас будет анализ Фурье, который даст вам частотные компоненты. Но если вы хотите увидеть, как одиночное содержимое (имеется в виду все одиночные косинусоидальные волны в вашем аддитивном сигнале), изменяющееся во времени, посмотрите мое второе редактирование. Поскольку все ваши косинусоидальные волны имеют различную частоту, частотные компоненты не будут меняться с течением времени. В любом случае вашего сигнала у вас будут частотные составляющие 3, 6, 10 и 15 Гц. - person lmNt; 28.12.2014
comment
подскажите, пожалуйста, почему в этом экв. t = (0: dt: StopTime-dt); мы используем stoptime-dt и не только stoptime - person user2121; 28.12.2014
comment
Потому что мы начинаем с t=0 и нам нужны данные за одну секунду (а именно 8000 выборок). Если бы мы не использовали stoptime-dt, у нас была бы 8001 выборка в нашем векторе t. - person lmNt; 28.12.2014
comment
возможно, вы тоже захотите ответить на этот вопрос :) " title="почему существует разрыв между сигналами и указанными частотами"> stackoverflow.com/questions/27678678/ - person user2121; 28.12.2014