Этот пример показывает, как сгенерировать широко используемые периодические и апериодические формы волны, синусоиды со свептом и последовательности импульсов с помощью функций, доступных в Signal Processing Toolbox™.
В дополнение к sin
и cos
функции в MATLAB ®, Signal Processing Toolbox™ предлагает другие функции, такие как sawtooth
и square
, которые формируют периодические сигналы.
The sawtooth
функция генерирует пилообразную волну с peaks и период . Необязательный параметр ширины задает дробное кратное при котором происходит максимальное значение сигнала.
The square
функция генерирует квадратную волну с периодом . Необязательный параметр задает коэффициент заполнения, процент периода, для которого сигнал положителен.
Сгенерируйте 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
функций.
The tripuls
функция генерирует дискретизированный апериодический треугольный импульс единичной высоты с центром около t = 0 и шириной по умолчанию 1.
The 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); figure 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')
The gauspuls
функция генерирует модулированный Гауссом синусоидальный импульс с заданным временем, центральной частотой и дробной шириной полосы.
The sinc
функция вычисляет математическую функцию sinc для вектора или матрицы входа. Функция sinc является непрерывным обратным преобразованием Фурье прямоугольного импульса ширины и высота модуля измерения.
Сгенерируйте Гауссов РЧ импульс частотой 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); figure 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')
Тулбокс также предоставляет функции для генерации сигналов со стреловидностью, таких как chirp
функция. Два необязательных параметра задают альтернативные методы сдвига и начальную фазу в степенях. Ниже приведены несколько примеров использования chirp
функция для генерации линейных или квадратичных, выпуклых и вогнутых квадратичных щебетаний.
Сгенерируйте линейный щебет.
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
Вычислите и отобразите спектрограммы щебета.
figure 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');
Вычислите и отобразите спектрограммы щебета.
figure 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
(управляемый напряжением осциллятор), который генерирует сигнал, колеблющийся на частоте, заданной входным вектором. Вектор входа может быть треугольником, прямоугольником или синусоидой, среди других возможностей.
Сгенерируйте 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);
Постройте график спектрограмм сгенерированных сигналов.
figure 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
функция.
Создайте train прямоугольных импульсов на 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); figure 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')
chirp
| gauspuls
| pulstran
| rectpuls
| sawtooth
| sin
| sinc
| square
| tripuls
| vco