В этом примере показано, как сгенерировать широко используемые периодические и апериодические формы волны, последовательности (импульс, шаг, пандус), многоканальные сигналы, последовательности импульсов, sinc и функции Дирихле, доступные в Signal Processing Toolbox™.
В дополнение к sin и потому что функции в MATLAB®, тулбокс предлагает другие функции, которые производят периодические сигналы, такие как зуб пилы и квадрат.
Пилообразная функция генерирует пилообразную волну с peaks в +/-1 и период 2*pi. Дополнительный параметр ширины задает дробное кратное 2*pi, в котором происходит максимум сигнала.
Квадратная функция генерирует прямоугольную волну с периодом 2*pi. Дополнительный параметр задает рабочий цикл, процент периода, в течение которого сигнал положителен.
Чтобы сгенерировать 1,5 секунды зуба пилы на 50 Гц (соответственно квадрат) волна с частотой дискретизации 10 кГц, используйте:
fs = 10000; t = 0:1/fs:1.5; x1 = sawtooth(2*pi*50*t); x2 = square(2*pi*50*t); subplot(2,1,1) plot(t,x1) axis([0 0.2 -1.2 1.2]) xlabel('Time (sec)') ylabel('Amplitude') title('Sawtooth Periodic Wave') subplot(2,1,2) plot(t,x2) axis([0 0.2 -1.2 1.2]) xlabel('Time (sec)') ylabel('Amplitude') title('Square Periodic Wave')
Чтобы сгенерировать треугольные, прямоугольные и Гауссовы импульсы, тулбокс предлагает tripuls, rectpuls и функции gauspuls.
Функция tripuls генерирует произведенное апериодическое, высота единицы треугольный импульс, сосредоточенный о t = 0 и с шириной по умолчанию 1.
Функция rectpuls генерирует произведенный апериодический, меандр высоты единицы, сосредоточенный о t = 0 и с шириной по умолчанию 1. Обратите внимание на то, что интервал ненулевой амплитуды задан, чтобы быть открытым справа, то есть, rectpuls (-0.5) = 1 в то время как rectpuls (0.5) = 0.
Чтобы сгенерировать 2 секунды треугольного (соответственно прямоугольный) импульс с частотой дискретизации 10 кГц и шириной 20 мс, используйте:
fs = 10000; t = -1:1/fs:1; x1 = tripuls(t,20e-3); x2 = rectpuls(t,20e-3); subplot(2,1,1) plot(t,x1) axis([-0.1 0.1 -0.2 1.2]) xlabel('Time (sec)') ylabel('Amplitude') title('Triangular Aperiodic Pulse') subplot(2,1,2) plot(t,x2) axis([-0.1 0.1 -0.2 1.2]) xlabel('Time (sec)') ylabel('Amplitude') title('Rectangular Aperiodic Pulse')
Функция gauspuls генерирует Модулируемый гауссовым образом синусоидальный импульс с требуемым временем, центральной частотой и дробной пропускной способностью.
Функция sinc вычисляет математическую функцию sinc для входного вектора или матрицы. Функция sinc является непрерывным обратным преобразованием Фурье меандра ширины 2*pi и высота 1.
Сгенерируйте Гауссов РЧ импульс на 50 кГц с 60%-й пропускной способностью, произведенной на уровне 1 МГц. Обрежьте импульс, где конверт падает на 40 дБ ниже пика:
tc = gauspuls('cutoff',50e3,0.6,[],-40);
t1 = -tc : 1e-6 : tc;
y1 = gauspuls(t1,50e3,0.6);
Сгенерируйте функцию sinc для вектора с линейно распределёнными значениями:
t2 = linspace(-5,5); y2 = sinc(t2);
subplot(2,1,1) plot(t1*1e3,y1) xlabel('Time (ms)') ylabel('Amplitude') title('Gaussian Pulse') subplot(2,1,2) plot(t2,y2) xlabel('Time (sec)') ylabel('Amplitude') title('Sinc Function')
Тулбокс также обеспечивает функции, чтобы сгенерировать формы волны развернутой частоты, такие как функция щебета. Два дополнительных параметра задают альтернативные методы развертки и начальную фазу в градусах. Ниже несколько примеров использования функции щебета, чтобы сгенерировать линейные или квадратичные, выпуклые и вогнутые квадратичные щебеты.
Сгенерируйте линейный щебет:
t = 0:0.001:2; % 2 secs @ 1kHz sample rate ylin = chirp(t,0,1,150); % Start @ DC, cross 150Hz at t=1sec
Сгенерируйте квадратичный щебет:
t = -2:0.001:2; % +/-2 secs @ 1kHz sample rate yq = chirp(t,100,1,200,'q'); % Start @ 100Hz, cross 200Hz at t=1sec
Вычислите и отобразите спектрограммы
subplot(2,1,1) spectrogram(ylin,256,250,256,1E3,'yaxis') title('Linear Chirp') subplot(2,1,2) spectrogram(yq,128,120,128,1E3,'yaxis') title('Quadratic Chirp')
Сгенерируйте выпуклый квадратичный щебет.
t = -1:0.001:1; % +/-1 second @ 1kHz sample rate fo = 100; f1 = 400; % Start at 100Hz, go up to 400Hz ycx = chirp(t,fo,1,f1,'q',[],'convex');
Сгенерируйте вогнутый квадратичный щебет:
t = -1:0.001:1; % +/-1 second @ 1kHz sample rate fo = 400; f1 = 100; % Start at 400Hz, go down to 100Hz ycv = chirp(t,fo,1,f1,'q',[],'concave');
Вычислите и отобразите спектрограммы.
subplot(2,1,1) spectrogram(ycx,256,255,128,1000,'yaxis') title('Convex Chirp') subplot(2,1,2) spectrogram(ycv,256,255,128,1000,'yaxis') title('Concave Chirp')
Другой функциональный преобразователь является vco (Управляемый напряжением генератор), который генерирует сигнал, колеблющийся на частоте, определенной входным вектором. Давайте посмотрим на два примера с помощью vco с прямоугольным входом и треугольником.
Сгенерируйте 2 секунды сигнала, произведенного на уровне 10 кГц, мгновенная частота которых является треугольником (соответственно прямоугольник) функция времени:
fs = 10000; t = 0:1/fs:2; x1 = vco(sawtooth(2*pi*t,0.75),[0.1 0.4]*fs,fs); x2 = vco(square(2*pi*t),[0.1 0.4]*fs,fs);
Постройте спектрограммы сгенерированных сигналов:
subplot(2,1,1) spectrogram(x1,kaiser(256,5),220,512,fs,'yaxis') title('VCO Triangle') subplot(2,1,2) spectrogram(x2,256,255,256,fs,'yaxis') title('VCO Rectangle')
Чтобы сгенерировать последовательности импульсов, мы можем использовать функцию pulstran. Ниже, мы продемонстрируем два примера о том, как использовать эту функцию.
Создайте обучение меандров на 2 ГГц, произведенных на уровне 100 ГГц при интервале 7,5 нс.
fs = 100E9; % sample freq D = [2.5 10 17.5]' * 1e-9; % pulse delay times t = 0 : 1/fs : 2500/fs; % signal evaluation time w = 1e-9; % width of each pulse yp = pulstran(t,D,@rectpuls,w);
Сгенерируйте периодический Гауссов импульсный сигнал на уровне 10 кГц с 50%-й пропускной способностью. Импульсная частота повторения составляет 1 кГц, частота дискретизации составляет 50 кГц, и длина последовательности импульсов составляет 10 мс. Амплитуда повторения должна затухать к 0,8 каждым разам. Пример использует указатель на функцию, чтобы относиться к функции генератора.
T = 0 : 1/50e3 : 10e-3; D = [0 : 1/1e3 : 10e-3 ; 0.8.^(0:10)]'; Y = pulstran(T,D,@gauspuls,10E3,.5);
subplot(2,1,1) plot(t*1e9,yp); axis([0 25 -0.2 1.2]) xlabel('Time (ns)') ylabel('Amplitude') title('Rectangular Train') subplot(2,1,2) plot(T*1e3,Y) xlabel('Time (ms)') ylabel('Amplitude') title('Gaussian Pulse Train')