Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 如何在5khz下产生持续时间为0.01s、延迟为0.09s的脉冲?_Matlab_Signal Processing - Fatal编程技术网

Matlab 如何在5khz下产生持续时间为0.01s、延迟为0.09s的脉冲?

Matlab 如何在5khz下产生持续时间为0.01s、延迟为0.09s的脉冲?,matlab,signal-processing,Matlab,Signal Processing,我想在Matlab中生成一个连续的脉冲。我想以5khz的频率产生持续时间为0.01s的信号,然后在0.09s内不产生任何信号,然后重新开始。这是一种矩形脉冲,除了5khz 我有以下代码以5khz的频率输出0.01s的波形 function [ output ] = FreqGen( ) %UNTITLED3 Summary of this function goes here % Detailed explanation goes here fs = 44100; T = 0.01; t

我想在Matlab中生成一个连续的脉冲。我想以5khz的频率产生持续时间为0.01s的信号,然后在0.09s内不产生任何信号,然后重新开始。这是一种矩形脉冲,除了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脉冲

如下图所示:

的文档并没有真正的帮助。虽然可以直接查看函数,但实际上这是实现所需功能的最简单方法(并且可以绕过信号处理工具箱)。我做到了:

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
函数未命名()
[t,y]=FreqGen(5e2,20e3,1,1[0.01,0.09]);
图形
图(t(1:3e3),y(1:3e3));
xlabel(‘时间’);
结束
函数[t,y]=FreqGen(f,fs,t,A,Tr)
%f-正弦波频率[Hz],fs-采样频率[Hz],T-总计
%持续时间[s],A-正弦波振幅,Tr-高/低状态持续时间
%矩形包络图案的形状[s]
%时间步长
t=0:(1/fs):t;
%首先是正弦波
ys=A*sin(2*pi*f*t);
%然后是矩形信封
yr=双倍(模(t,和(Tr))
矩形包络线的计算借助于模和比较

它看起来像:


现在使用
pulstran

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

y = pulstran(t, d, function_handle, p1, p2, ..)
t
是用于计算脉冲的时间步长(以及输出的总时间和尺寸),
d
是脉冲中心(移位增量),而
p1、p2、…
是该函数的附加参数

因此,在
d
的所有元素上,输出类似于
函数(t+d(i),p1,p2,…)
的和

代码如下:

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
函数未命名()
[t,y]=FreqGen(5e2,20e3,1,1,0.01,0.1);
图形
图(t(1:3e3),y(1:3e3));
xlabel(‘时间’);
结束
函数[t,y]=频率(f,fs,t,A,脉冲持续,脉冲间隔)
%f-正弦波频率[Hz],fs-采样频率[Hz],T-总计
%持续时间[s],A-正弦波振幅,脉冲持续时间[s],
%脉冲间隔[s]
%时间步长
t=0:(1/fs):t;
%脉冲中心阶跃
d=0:脉冲间隔:T;
%使用脉冲串
y=脉冲宽度(t,d,@my_脉冲,A,f,脉冲持续时间);
结束
函数y=我的脉冲(t、A、f、t)
%从0到0的正弦脉冲
y=零(尺寸(t));
tx=t>0&t

不过,它比以前的速度慢了一点。

这没有意义;5kHz波形的周期为0.2 ms,即0.0002秒。这和你引用的数字吻合吗?我可能错了。更普遍的问题是如何使用pulsetran生成具有另一个自定义波函数的波形?根据您的图表,您希望生成频率为10 Hz或0.1 s的波。@rayryeng:10 kHz?这似乎是一个在10 Hz(占空比为10%)下调制的5 kHz波开关。pulstrain的Matlab文档实际上在易懂性方面非常糟糕,由一位工程师在糟糕的一天编写。非常感谢,这正是我想要的。Trilarion,非常感谢您提供了两个很好的答案。我真的很感激!