Демонстрация наложения с помощью Simulink

Сейчас мы посмотрим, как влияет недостаточная частота дискретизации. Для этого воспользуемся слегка модернизированным примером из справки MATLAB, показанном на рис. 46.

Пример 2. Составить схему системы осуществляющей анализ спектра двух синусоид. Исходные данные:

Амплитуда: 1В;

Частота: 15 Гц, 40Гц;

Фаза: 0 град;

Период дискретизации: 0.001 с;

Отсчетов на кадр: 128.

Рис. 46. Модернизированный пример применения

быстрого преобразования Фурье FFT в Simulink

От стандартного примера данный пример отличается только двумя блоками: Vector Scope1 и Vector Scope2. Vector Scope1 показывает итоговый сигнал, Vector Scope2 показывает каждую синусоиду отдельно.

Настройка параметров блоков.

1. Двойной клик мышью на блоке Sine Wave block: откроются параметры блока. Установите там следующие значения:

Amplitude = 1

Frequency = [15 40]

Phase offset = 0

Sample time = 0.001

Samples per frame = 128

Согласно этим данным, блок Sine Wave выведет две синусоиды с одинаковыми амплитудами, фазами и интервалами дискретизации. Частота одной синусоиды 15 Гц, другой – 40 Гц. В данном случае алгоритм нашей модели ориентирован на обработку последовательности кадров (векторов) сигнала (Frame Based). Векторная или кадровая форма реализации алгоритма обработки в модели, как правило, позволяет значительно ускорить процесс моделирования в нереальном времени. В этой форме для формирования кадров из непрерывно потока отсчетов используется буферная память.

Сохраним изменения и закроем окно.

2. Блок Matrix Sum. В окне параметров задайте следующее значение:

Sum along = Rows

3. Так как каждый отдельный сигнал это отдельный столбец матрицы, нам нужно сложить значения синусоид на каждом временном шаге, чтобы получить итоговый сигнал. Для этого в блоке Complex to Magnitude-Angle установим:

Output=Magnitude

Этот блок конвертирует комплексные значения FFT и рассчитывает амплитуду.

4. Блок Vector Scope:

Закладка Scope Properties

Input domain = Frequency

Закладка Axis Properties

Frequency units = Hertz

Frequency range = [0...Fs/2]

Отмечаем (галочкой) пункт «Inherit sample time from input»

Amplitude scaling = Magnitude

6. Блоки Vector Scope1 и Vector Scope2 оставляем без изменений.

7. Запустите модель. Vector Scope показывает два пика на 0.015 и 0.04 кГц, как и следовало ожидать (рис.47):

Рис. 47. График спектра двух синусоид

Теперь изменим частоту дискретизации в блоке Sine Wave так, чтобы она не соответствовала условиям теоремы Котельникова. Например, поставим Sample Time = 1/60. После этого на графике мы увидим новую частоту, которой не было в исходном сигнале (рис.48). Это и есть наложение (aliasing).

Рис. 48. Наложение

Синусоиды с частотой 40 Гц на этом графике вообще не видно. Это произошло из-за того, что мы указали в настройках Vector Scope отображать график в интервале [0... Fs /2]. Измените его на [0... Fs ].


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: