在频域中设计啁啾

信息处理 声音的 频域 线性啁啾 唧唧喳喳
2022-02-25 00:44:58

我试图在频域中创建一个啁啾信号,只需将每个频率仓的幅度设置为 1,然后设置相位延迟函数,使得每个频率仓的最终时间延迟增加。我正在尝试从相位延迟函数计算得到的啁啾的长度。

如果每个频率的时间延迟,td(f),等于周期乘以相位延迟引入的周期数,以及ϕ(f)是以弧度为单位的相位延迟作为频率的函数,然后

td(f)=ϕ(f)2π1f

如果我们定义ϕ(f)作为,

ϕ(f)=2πnf2

然后是时间延迟,td(f), 是(谁)给的,

td(f)=2πnf22π1f=nf

对我来说很明显,当 f 达到最大值时会出现最大时间延迟fs2, 在哪里fs是采样频率。

但是,当我尝试合成信号时(在 Matlab 中),

% Create frequency axis (0 to nyquist)
fs = 44100;    
fAx = 0:1:(fs/2 - 1);

% Define n so td = nf = 0.25s, and define Phases
n = 0.25/(fs/2);
phi = -2*pi*n*fAx^2;

% Calculate the maximum time delay
td = n*(fs/2);

% Calculate the phase of each frequency up to nyquist
chirp_fft = exp(1i*phases);

% Create Hermitian symmetric signal and ifft
chirp_fft = [chirp_fft(1:end-1), 0, flip(conj(chirp_fft(2:end-1)))];
chirp = ifft(chirp_fft);

% Create time axis and plot chirp
tAx = 0:1/fs:(length(chirp) - 1)/fs;
plot(tAx, chirp)

所以根据我的计算,啁啾应该有 0.25 秒的最大延迟,但是,当我绘制它时:产生的啁啾

长度为 0.5 秒。当我尝试其他值时,得到的啁啾声始终是我计算结果的两倍。实际上这不是问题,但我真的很想了解我哪里出错了!我缺少的因子二在哪里?

1个回答

代替相位延迟td(f), 使用群延迟τ(f)

(1)τ(f)=ddωϕ(f),

计算为相位导数的负数ϕ(f)关于角频率ω,其定义为:

(2)ω=2πff=ω2π.

使用你的相移ϕ(f)

(3)ϕ(f)=2πnf2=nω22π,

我们从方程式得到。1:

(4)τ(f)=ddωnω22π=2nω2π=2nf.

这应该解释你的经验结果,考虑到这里τ(f)=2td(f).