在Matlab Psychtoolbox中生成锯齿音

时间:2015-05-16 14:45:10

标签: matlab psychtoolbox

下面你可以看到一个产生纯正弦波形的功能。我需要修改它以生成锯齿波形。请帮忙! (我在Matlab 2014b上使用Psychtoolbox 3.0.12,Win 8.1 x64)

function [tSnd] = mkPureTone(fs, frq, dur)

if nargin < 1; fs = 44100; end
if nargin < 2; frq = 1000; end
if nargin < 3; dur = 0.1; end


rtimeup = 0.006;    % duration of the ramp up in seconds
rtimedown = 0.006;   % duration of the ramp down in seconds
trup = 0:1/fs:rtimeup-1/fs;
lrup = length(trup);
rampup = (cos(2*pi*trup/rtimeup/2+pi)+1)/2;
trdown = 0:1/fs:rtimedown-1/fs;
lrdown = length(trdown);
rampdown = (cos(2*pi*trdown/rtimedown/2)+1)/2;

% compute target sound
time = 0:1/44100:dur;

sound = sin(2*pi*frq*time);
lt = length(sound);
sound(1:lrup) = sound(1:lrup).*rampup;
sound(lt-lrdown+1:end) = sound(lt-lrdown+1:end).*rampdown;
tSnd = sound;

% wavplay(tSnd, fs);

end

2 个答案:

答案 0 :(得分:1)

简单的方法是替换

sound = sin(2*pi*frq*time);

类似

sound = mod(frq*time,1);

这将创建频率为frq且幅度为1(介于0和1之间)的锯齿。您可以根据需要更改波形的幅度(通过将其与标量相乘)或移位(通过添加标量)。

但是这种修改不会考虑上升和下降的斜坡。在你显示的代码中处理它的方式对我来说似乎很奇怪,特别是我不明白为什么需要使用cos函数,所以我不会触及代码的那一部分。

最佳,

答案 1 :(得分:0)

感谢。我的同事也调查了它,他的想法是:

sound = time*frq - floor(time*frq)

这个版本和你的版本听起来都不可分辨,但是当我将它与在线生成的锯齿波形进行比较时,这个Matlab声音听起来不那么清晰,它以小而可听见的咔哒声开始和结束。不确定这是驱动程序还是生成的声音本身。