Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабы / Методическое пособие (1).pdf
Скачиваний:
0
Добавлен:
25.03.2026
Размер:
1.27 Mб
Скачать

Приложение 8. Некоторые функции в MATLAB

В данном приложении приведены функции MATLAB, которые используется сразу в нескольких лабораторных работах. Более подробно познакомиться с функционалом приведенных функций, а также с другими функциями, реализованными в MATLAB, можно в онлайн справке https://www.mathworks.com/help/matlab/ref/, поддерживающей в том числе поиск функций по их названию.

1) Импорт сигнала из csv таблицы

Создайте скрипт в MATLAB (файл с расширением .m) и поместите CSVфайл с вашим сигналом в ту же папку, что и скрипт MATLAB. Используя код

T=readtable('file_name.csv');

X=T{:,1};

вы загружаете в память дискретные значения сигнала из файла file_name.csv. Функция readtable считывает данные в табличном виде, а вторая строчка кода преобразует табличные данные в массив X чисел в формате double.

2) Дискретное преобразование Фурье находится с помощью функции

fourx=fft(X);

Функция fft использует алгоритм быстрого преобразования Фурье. Ее аргументом является одномерный массив значений (в данном примере это дискретные отсчеты сигнала, обозначенные X). Данная функция возвращает в себя одномерный массив комплексных значений дискретного образа Фурье (6.1) в порядке увеличения k.

3) Построить график дискретного сигнала можно используя функцию

plot(X);

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

67

times=0:Ts:Ts*(length-1); plot(times,X);

Здесь Ts – период дискретизации, а length – длина массива X (количество отсчетов, его видно в окне со списком переменных). Первая строчка кода задает набор дискретных времен, соответствующих отсчетам дискретного сигнала.

Аналогично можно построить, например, амплитудный спектр сигнала: plot(abs(fourx));

Здесь функция abs вычисляет модуль. По аналогии с предыдущим примером можно отложить по горизонтали не номер дискретной частоты, а саму дискретную частоту (например, в Гц). Аргумент числа в MATLAB вычисляется с помощью функции angle. По аналогии с графиком сигнала, по горизонтали также можно отложить не номер дискретной частоты, а саму частоту. Для этого надо задать массив частот в соответствии с формулой

(6.2).

Чтобы увеличить некоторую область на графике, нажмите Tools- >Zoom In и выделите нужную область.

Чтобы построить несколько графиков за одну компиляцию кода, можно воспользоваться функцией subplot(m,n,p), которая делит лист на m строк и n столбцов, а последующий график строит на p-ой позиции, где отсчет позиций в табличном представлении листа идет по правилам чтения. Например, чтобы построить на одном листе графики сигналов X и Y один под другим, нужно написать:

subplot(2,1,1);

plot(X);

subplot(2,1,2);

plot(Y);

Чтобы построить два и более графиков в одних осях, нужно воспользоваться функцией hold on/off. Например, чтобы построить три графика зависимости xk от tk, где k пробегает значения от 1 до 3, нужно использовать следующий код:

plot(t1,x1); hold on; plot(t2,x2); plot(t3,x3); hold off;

68

4) Для расчета нерекурсивных фильтров в MATLAB также есть встроенные функции. Например, расчет нерекурсивного фильтра методом взвешивания осуществляется посредством функции

h=fir1(filter_order,Wn,ftype,window);

Здесь filter_order – порядок фильтра, Wn – граничная частота среза (или частоты среда) фильтра, нормированная на частоту Найквиста, ftype – тип фильтра, window – тип оконной функции (если не указывать тип окна, то по умолчанию используется окно Хэмминга). Напомним, что частотой Найквиста называется половина частоты дискретизации. Очевидно, частота среза фильтра не может превышать данной частоты, поэтому Wn должно лежать в промежутке от 0 до 1. В случае расчета, например, полосового фильтра частот среза будет две и данная частота указывается в формате [w1 w2] в квадратных скобках через пробел. Под частотой среза в MATLAB понимается частота в переходной полосе, в которой коэффициент передачи

составляет 12 (примерно -6 дБ). С форматом задания аргументов ftype и

window можно самостоятельно ознакомиться в справке MATLAB

(https://www.mathworks.com/help/signal/ref/fir1.html).

Функция fir1 возвращает в себя массив дискретных значений импульсной характеристики фильтра. Используя функцию свертки (convolution), можно применить рассчитанный фильтр к сигналу:

Y=conv(h,X);

где Y – массив дискретных значений выходного сигнала. Заметьте, что длина массива сигнала Y будет отличаться от длины массива X на количество отсчетов равное порядку фильтра.

5) Для рекурсивных цифровых фильтров разностное уравнение, рассчитывающее выходной сигнал, реализуется посредством функции

Y=filter(db,da,X);

где db и da – коэффициенты передаточной функции фильтра как в формуле (П4.4), а X – массив значений входного сигнала фильтра. По умолчанию реакция фильтра рассчитывается для нулевых начальных условий, однако можно задать ненулевые начальные условия с помощью дополнительных аргументов (см. справку MATLAB для подробностей). Если da=1, то данная функция вычисляется реакцию нерекурсивного фильтра аналогично функции conv с точностью до замены h на db.

69

6) Для построения частотных характеристик рекурсивного фильтра используется функция

[H,f]=freqz(db,da,n,fs);

где db и da – коэффициенты передаточной функции фильтра как в формуле (П4.4), fs – частота дискретизации (если она указана, например, в Гц, то и результат будет в Гц), а n – количество точек, на которые равномерно разбивается промежуток частот от 0 до частоты Найквиста. Функция выдает массив f, содержащий данный набор из n частот, и массив H, содержащий значения передаточной функции фильтра в этих точках. Для нерекурсивного фильтра роль массива db выполняет массив значений импульсной характеристики, а da полагается равным 1.

7) В случае работы со звуковым сигналом, можно воспроизвести его в MATLAB. Делается это с помощью функции:

soundsc(Y,fs);

где Y – сигнал, которой нужно воспроизвести (в формате одномерного массива дискретных значений), а fs – частота дискретизации в Гц. Отметим, что если задать частоту дискретизации, выходящую за пределы поддерживаемой вашим устройством, то MATLAB выдаст ошибку «Device

Error: Unanticipated host error».

8) Некоторые элементарные функции переменной x в MATLAB: tan(x) – тангенс;

sqrt(x) – квадратный корень; log(x) – натуральный логарифм; factorial(x) – факториал;

abs(x) – модуль;

angle(x) – аргумент комплексного числа.

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

70

9) Работа с массивами в MATLAB:

1. Создание одномерного массива чисел осуществляется через квадратные скобки с пробелами в качестве разделителей. Например, чтобы создать массив array из чисел 1, 2 и 3 в заданной порядке, нужно написать

array=[1 2 3];

2. Для создания двумерного массива (матрицы) нужно разделить строки точкой с запятой. Например, для создания матрицы array, имеющей вид

 

1

2

3

 

, нужно написать

 

4

5

6

 

 

 

 

array=[1 2 3; 4 5 6];

3.Для обращения к элементу массива используются круглые скобки с разделителями в виде запятых между адресами. Например, чтобы обратиться к элементу матрицы, приведенной выше, который равен 4, используется запись array(2,1). Если нужно вызвать, например, весь первый столбец этой же матрицы, то используется запись array(:,1), где точка с запятой отражает, что этот адрес (в данном случае номер строки) пробегает все значения. Наконец, если мы хотим обратиться лишь к части второй строки, например, получить одномерный массив из чисел 4 и 5, то стоит написать array(2,1:2).

4.Перемножение элементов массива осуществляется функцией prod. Например, prod([2 3 5]) вернет в себя число 30.

71