记得曾经大研做录音放音程序,老大让我编一个扫频信号做输入,还给了个英文的扫频信号说明,晕晕乎乎做了半天。。。突然发现matlab有产生扫频信号的函数的,一听扫频就感觉好亲切啊,这个肯定要收藏了。
这个网址有介绍http://blog.csdn.net/skyujwang/archive/2011/03/03/6221201.aspx,我不妨翻译一下matlab帮助吧。
=
根据指定的方法在时间t上产生余弦扫频信号,f0为第一时刻的瞬时频率,f1为t1时刻的瞬时频率,f0和f1单位都为Hz。如果未指定,f0默认为e-6(对数扫频方法)或0(其他扫频方法),t1为1,f1为100Hz。
linear线性扫频、
phi允许指定一个初始相位(以°为单位),默认为0,如果想忽略此参数,直接设置后面的参数,可以指定为0或[];
shape指定二次扫频方法的抛物线的形状,凹还是凸,值为concave或convex,如果此信号被忽略,则根据f0和f1的相对大小决定是凹还是凸。
例如,线性扫频
t = 0:0.001:2; % 2 secs @ 1kHz sample rate y = chirp(t,0,1,150); % Start @ DC, % cross 150Hz at t=1 sec spectrogram(y,256,250,256,1E3,'yaxis')
二次扫频
% ±2 secs @ 1kHz sample rate t = -2:0.001:2; % Start @ 100Hz, cross 200Hz at t=1 sec y = chirp(t,100,1,200,'quadratic'); spectrogram(y,128,120,128,1E3,'yaxis')
指数扫频
t = 0:0.001:10; % 10 seconds @ 1kHz sample rate fo = 10; f1 = 400; % Start at 10Hz, go up to 400Hz y = chirp(t,fo,10,f1,'logarithmic'); spectrogram(y,256,200,256,1000,'yaxis')
spectrogram或specgram为用短时傅里叶变换计算信号的时频谱,
specgram(a,nfft,fs,window,numoverlap)
nfft是fft的长度,越长的话,频域分辨率越高,但是,对于语音这种时变信号,不能过长,一般采样率16k或者8k的取1024或者512,要看采样率的高低;
fs就是采样率;
window是指窗的长度,一般和nfft相同即可;
numoverlap是指nfft减去步长,越大越好,但运算量越大。一般取nfft的3/4效果就比较好了。