Mathilda11 / Speech-processing

howling suppression, 啸叫抑制, 声反馈抑制
80 stars 55 forks source link

问一下陷波法 #1

Open XcodeHw opened 5 years ago

XcodeHw commented 5 years ago

for i = 1:length(x) xs1 = [x(i)+temp; xs1(1:end-1)]; y2(i) = K(xs1'c); y2(i) = min(1,y2(i)); y2(i) = max(-1,y2(i)); d = y2(i); % iir滤波输入 for k = 1:size(iir_coef,1) % iir滤波过程 iir_buffer(k,1:3) = [d, iir_buffer(k,1:2)]; d = iir_buffer(k,1:3) iir_coef(k,1:3)' - iir_buffer(k,4:5) iir_coef(k,5:6)'; iir_buffer(k,4:5) = [d, iir_buffer(k,4)]; end y2(i) = d; xs2 = [y2(i); xs2(1:end-1)]; temp = xs2'*g; end 你这一段为啥是再中间加滤波呢,这不是原始声音么

HanaChyan commented 5 years ago

原始声混叠了反馈声,再过陷波器的叭?和流程图是对应的。我倒是很困惑为啥可以用固定频率的陷波器。。。好像没有啸叫检测过程?

XcodeHw commented 5 years ago

原始声混叠了反馈声,再过陷波器的叭?和流程图是对应的。我倒是很困惑为啥可以用固定频率的陷波器。。。好像没有啸叫检测过程?

我的理解不应该直接通过检测出频率然后直接抑制么,要什么不带啸叫的声音的啊

HanaChyan commented 5 years ago

确实就是应该检测出频率然后抑制呀,但是他的xs2是已经混叠过反馈声的啸叫声,不是原始声音,放在这里应该没问题

XcodeHw commented 5 years ago

确实就是应该检测出频率然后抑制呀,但是他的xs2是已经混叠过反馈声的啸叫声,不是原始声音,放在这里应该没问题

xs1 = [x(i)+temp; xs1(1:end-1)]; 我说的是他这一段程序利用了原始声音,他是先给原始声音每个点加了啸叫然后去啸叫,一个个点去弄的,我想的是如果只给出加了啸叫的,不给x(原始的)那应该怎么弄呢,只给出加了啸叫的声音,就没有x,这个程序好像就没什么用吧

XcodeHw commented 5 years ago

确实就是应该检测出频率然后抑制呀,但是他的xs2是已经混叠过反馈声的啸叫声,不是原始声音,放在这里应该没问题

就是多数场景下是没有x(原始声音的,,把他这代码的x去掉),就给一个啸叫的,我现在能检测出他在哪些频率上啸叫了,但我用陷波法始终滤不了

HanaChyan commented 5 years ago

iir滤波输入之前和滤波输入之后的过程都是模拟声场的声反馈路径,不是已知的,已知只有xs1的信息。然后啸叫抑制应该是实时的(不然实际应用中啸叫时间过长会损坏器件)。进入扬声器的声信息是逐点的,所以要逐点陷波。(但是我暂时不太理解他的陷波器怎么找陷波频点的)。

XcodeHw commented 5 years ago

iir滤波输入之前和滤波输入之后的过程都是模拟声场的声反馈路径,不是已知的,已知只有xs1的信息。然后啸叫抑制应该是实时的(不然实际应用中啸叫时间过长会损坏器件)。进入扬声器的声信息是逐点的,所以要逐点陷波。(但是我暂时不太理解他的陷波器怎么找陷波频点的)。

问题解决,就给一个啸叫音频,我就能啸叫抑制,虽然效果不太好,但确实可以了

XinWangg commented 4 months ago

iir滤波输入之前和滤波输入之后的过程都是模拟声场的声反馈路径,不是已知的,已知只有xs1的信息。然后啸叫抑制应该是实时的(不然实际应用中啸叫时间过长会损坏器件)。进入扬声器的声信息是逐点的,所以要逐点陷波。(但是我暂时不太理解他的陷波器怎么找陷波频点的)。

问题解决,就给一个啸叫音频,我就能啸叫抑制,虽然效果不太好,但确实可以了

能分享下得到啸叫频率点后,抑制该频率点的代码吗~