Спектральный анализ сигнала в Matlab

Одной из самых распространённых задач является выявление в спектре сигнала составляющих. Делается это для того чтобы отфильтровать сигнал. Ведь иногда по одной линии передаётся далеко не один сигнал, в то время как обрабатывать каждый из них нужно по разному.

Рассмотрим простейший случай такого анализа в Matlab.

Сформируем временную сетку:

>> t = 0:0.001:0.6;

Теперь зададим сигнал для тренировок:

>> x = sin(2*pi*50*t) + sin(2*pi*120*t);

Изображение сигнала

Как видите это всего навсего 2 синусоиды. одна на частоте 50Гц, другая на 120Гц. В жизни такого конечно же нет. Это всего навсего математическая абстракция, которая поможет понять как всё происходит.

Выведем сигнал для наглядности:

>> plot(1000*t(1:50),x(1:50))
>> title('Сигнал')
>> xlabel('Время (мс)')

Теперь делаем преобразование Фурье для нашего сигнала.

Имеем 512 отсчётов. Примем это во внимание для нахождения цифрового преобразования:

>> X=fft(x,512);

Домножим на комплексно сопряженное и нормализуем:

>> Pxx=X.*conj(X)/512;

Теперь задаём сетку частот и выводим спектр:

>> f = 1000*(0:256)/512;
>> plot(f,Pxx(1:257))
>> title('Спектр сигнала');
>> xlabel('Частота (Гц)');

Изображение спектра

Как видно на рисунке, в спектре имеется 2 выброса на частотах 50 и 120Гц. Что подтверждается частотами, которые мы задали.

Отмечу ещё раз, что это идеальная ситуация, которой в жизни никогда не бывает. В настоящем сигнале постоянно присутствуют помехи с самыми разными частотами, что существенно зашумляет спектр и делает его менее наглядным.

Просмотров:   15732

Комментарии

ср, 05/13/2015 - 11:16
Николай

Почему "Имеем 512 отсчётов"? Массив для времени состоит из 600 шагов, т.е. 601 точку отсчета. Я не прав?

сб, 05/16/2015 - 20:14

Все верно, указав меньшую величины можно "обрезать" массив.

вт, 07/21/2015 - 14:00
Андрей

поясните эти две строчки. Что это и для чего
>> f = 1000*(0:256)/512;
>> plot(f,Pxx(1:257))

пт, 07/24/2015 - 20:24

таким образом генерируюся отсчеты по оси частот и выводиться кривая графика

вс, 04/24/2016 - 07:31

Здравствуйте, а почему амплитуды у спектра разные? Как можно преобразовать код, чтобы амплитуды спектра были одинаковыми?

Добавить комментарий

Plain text

  • HTML-теги не обрабатываются и показываются как обычный текст
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Строки и параграфы переносятся автоматически.
CAPTCHA
Введи эти символы. Ато роботы одолели!