Matlab 如何在5khz下产生持续时间为0.01s、延迟为0.09s的脉冲?
我想在Matlab中生成一个连续的脉冲。我想以5khz的频率产生持续时间为0.01s的信号,然后在0.09s内不产生任何信号,然后重新开始。这是一种矩形脉冲,除了5khz 我有以下代码以5khz的频率输出0.01s的波形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
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,非常感谢您提供了两个很好的答案。我真的很感激!