如何以 0.01 秒的持续时间和 0.09 秒的延迟生成 5khz 的脉冲?

How to generate pulses at 5khz with 0.01s duration and 0.09s delay?

我想在 Matlab 中生成连续脉冲。我想以 5khz 的频率生成信号,持续时间为 0.01 秒,然后在 0.09 秒内没有信号,然后重新开始。它是一种矩形脉冲,只是频率为 5khz。

我有以下代码在 5khz 输出 0.01s 的波形,

function [ output ] = FreqGen(  )
%UNTITLED3 Summary of this function goes here
%   Detailed explanation goes here
fs = 44100;
T = 0.01;
t = 0:(1/fs):T;
f = 5000;
a = 0.5;
output = a*sin(2*pi*f*t);
end

但我没弄清楚如何使用 Matlab 函数 pulsetran 生成 0.09s 脉冲。

就像下图一样:

pulstran 的文档并没有太大帮助。虽然可以直接查看该函数,但它实际上是实现您自己想要的功能的最简单方法(并且您可以绕过信号处理工具箱)。我在这里做到了:

function Untitled()

[t, y] = FreqGen(5e2, 20e3, 1, 1, [0.01, 0.09]);
figure;
plot(t(1:3e3), y(1:3e3));
xlabel('time [s]');

end

function [t, y] = FreqGen(f, fs, T, A, Tr)
% f - frequency of sine wave [Hz], fs - sampling frequency [Hz], T - total
% duration [s], A - amplitude of sine wave, Tr - duration of high/low state
% of rectangular envelope pattern [s]

% time steps
t = 0 : (1/fs) : T;

% first the sine wave
ys = A * sin(2 * pi * f * t);

% then the rectangular envelope
yr = double(mod(t, sum(Tr)) < Tr(1));

% multiply both
y = ys .* yr;

end

矩形包络线是在模数和比较的帮助下计算出来的。

看起来像:

现在 pulstran

关于 pulstran 的简短文档。语法是:

y = pulstran(t, d, function_handle, p1, p2, ..)

t是计算脉冲的时间步长(也是输出的总时间和维度),d是脉冲中心(移动增量),p1, p2, ..是附加的函数的参数。

所以输出类似于function(t+d(i), p1, p2, ..)d的所有元素的总和。

代码如下:

function Untitled()

[t, y] = FreqGen(5e2, 20e3, 1, 1, 0.01, 0.1);
figure;
plot(t(1:3e3), y(1:3e3));
xlabel('time [s]');

end

function [t, y] = FreqGen(f, fs, T, A, Pulseduration, Interpulseduration)
% f - frequency of sine wave [Hz], fs - sampling frequency [Hz], T - total
% duration [s], A - amplitude of sine wave, Pulseduration [s],
% Interpulseduration [s]

% time steps
t = 0 : (1/fs) : T;

% pulse center steps
d = 0 : Interpulseduration : T;

% use pulstrans
y = pulstran(t, d, @my_pulse, A, f, Pulseduration);

end

function y = my_pulse(t, A, f, Tend)
% Sine pulse from 0 to Tend
    y = zeros(size(t));
    tx = t > 0 & t < Tend;
    y(tx) = A * sin(2 * pi * f * t(tx));
end

虽然比 慢一点。