下面你可以看到一个产生纯正弦波形的功能。我需要修改它以生成锯齿波形。请帮忙! (我在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
答案 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声音听起来不那么清晰,它以小而可听见的咔哒声开始和结束。不确定这是驱动程序还是生成的声音本身。