2015-02-09 59 views
1

我想在Matlab中生成一個連續的脈衝。我想在5khz生成信號,持續時間爲0.01s,然後0.09s沒有任何信號,然後重新開始。這是一種矩形脈衝,除了它在5khz。如何以0.01s的持續時間和0.09s的延遲在5khz產生脈衝?

我有下面的代碼輸出爲0.01s 5kHz時的波形,

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脈衝。

就像下面的情節:

enter image description here

+1

這沒有意義; 5kHz波形的週期是0.2ms,即0.0002秒。這與你引用的數字相符合的程度如何? – 2015-02-09 21:55:23

+0

我可能是錯的。 MOre的一般問題是如何使用pulsetran生成具有另一個自定義波函數的波形? – Foreverniu 2015-02-09 22:01:17

+0

根據您的圖表,您希望生成頻率爲10 Hz或0.1 s的波形。 – rayryeng 2015-02-09 22:10:31

回答

1
pulstran

現在。

關於pulstran的簡短文檔。語法是:

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

t是用於計算脈衝(也總時間和輸出的尺寸),d是脈衝中心(移位增量)和p1, p2, ..是附加參數的函數的時間步長。

所以輸出結果類似於d所有元素的總和function(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 

這雖然比previous answer慢一點。

+0

Trilarion,非常感謝您提供兩個很好的答案。對此,我真的非常感激! – Foreverniu 2015-02-13 15:14:28

2

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 

的矩形包絡計算取模和比較的幫助。

它看起來像:

enter image description here

+0

非常感謝,這正是我所期待的。 – Foreverniu 2015-02-11 02:14:05

相關問題