Неожиданный выход БПФ импульсной характеристики интегратора

Я пытаюсь получить частотную характеристику любых передаточных функций, используя преобразование Фурье импульсной характеристики системы. Это работает довольно хорошо для большинства протестированных случаев, но у меня все еще есть проблема с передаточными функциями, в которых есть интегратор (например, 1/s; (4s+2)/(3s^2+s) и т. д.).

Возьмем пример чистого интегратора с H(s) = 1/s. Полученная импульсная характеристика представляет собой ступенчатую функцию, как и ожидалось, но тогда преобразование Фурье импульсной характеристики не дает ожидаемых теоретических результатов. Вместо этого он дает очень маленькие результаты и не приводит к классическим характеристикам интегратора (-20 дБ/декада амплитуды и -90 градусов фазы) после обработки.

Возможно, несколько строк кода могут быть полезны, если я недостаточно ясно выразился:

h = tf(1,[1 0]);
t_step = .1;
t = [0 : t_step : 100000]';
[y,t1] = impulse(h,t);
y_fft = fft(y);

Вы знаете, откуда может исходить эта проблема? Если вам нужна дополнительная информация, пожалуйста, дайте мне знать. Я работаю над MATLAB R2013b.


person J-D    schedule 01.09.2017    source источник
comment
Проблема связана с тем, что: (1) fft предполагает периодический сигнал, т. е. бесконечное повторение предоставленного дискретного сигнала, и (2) вы также должны включать ответ для отрицательных моментов времени, т. е. до появления импульса.   -  person m7913d    schedule 01.09.2017
comment
@ m7913d m7913d Что касается первого замечания, которое вы сделали, я не понимаю, как эта проблема не могла возникнуть ни для какой другой передаточной функции, кроме как для интегратора. Не могли бы вы объяснить? Кроме того, я уже пытался добавить отрицательные моменты и не увидел особых изменений.   -  person J-D    schedule 01.09.2017


Ответы (1)


Как упоминалось в моем комментарии, проблема связана с:

  1. fft предполагает периодический сигнал, т.е. бесконечное повторение предоставленного дискретного сигнала
  2. вы также должны включить ответ для отрицательных моментов времени, т.е. до возникновения импульса.

h = tf(1,[1 0]);
t_step = 1;
t = [0 : t_step : 999]';
[y,t1] = impulse(h,t);

y = [y; zeros(1000, 1)];
y_fft = fft(y);

figure
semilogx(db(y_fft(1:end/2)), 'r.');

figure
semilogx(180/pi*angle(y_fft(y_fft(1:end/2)~=0)), 'r');

введите здесь описание изображения введите здесь описание изображения

Дополнительные замечания

  • Обратите внимание, что из-за периодичности fft (и y) половина значений минус бесконечность, которую я не наносил на график, чтобы получить более приятный результат.

  • Обратите внимание, что влияние разницы между БПФ и непрерывным преобразованием Фурье зависит от реального преобразования Фурье импульсной характеристики. В частности, проблемой может быть псевдоним.

person m7913d    schedule 01.09.2017
comment
Это действительно работает, извините, я, должно быть, ошибся. Однако мне не удается иметь аргумент постоянным и равным 90 градусам, даже с помощью этого метода. Ты можешь? - person J-D; 01.09.2017
comment
@ J-D Я попытался объяснить это несколько подробнее, но, возможно, есть и другие эффекты, о которых я забыл упомянуть. - person m7913d; 01.09.2017