2

下面你可以看到一个生成纯正弦波形的函数。我需要对其进行修改以生成锯齿波形。请帮忙!(我在 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
4

2 回答 2

1

最简单的方法是更换

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

有类似的东西

sound = mod(frq*time,1);

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

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

最好的,

于 2015-05-16T18:51:25.057 回答
0

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

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

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

于 2015-05-18T09:49:14.140 回答