在 Matlab Psychtoolbox 中生成锯齿音

Generate sawtooth tone in 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

简单的方法是替换

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

类似

sound = mod(frq*time,1);

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

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

最佳,

谢谢。我的同事也研究了一下,他的想法是:

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

这个版本和你的版本听起来没有区别,但是当我将它与在线生成的锯齿波进行比较时,这个 Matlab 的声音听起来不太清晰,并且开始和结束时都发出很小但可以听到的咔哒声。不确定是驱动问题还是声音本身问题。