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

Опубликовано lamazavr - вс, 04/21/2013 - 18:50
Body

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

Рассмотрим простейший случай такого анализа в 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Гц. Что подтверждается частотами, которые мы задали.

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

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

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