HTML5   发布时间:2022-04-27  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了ios – 用正弦扫描计算频率响应的问题大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我目前正在尝试计算 iphone扬声器/麦克风往返的频率响应.我在扬声器上进行正弦扫描,通过麦克风录制并尝试从中获得频率响应.最终目标是能够将FR乘以任何给定的声音,使其听起来像iphone扬声器/麦克风.

我的代码到目前为止:

//apply window function
vDSP_vmul(sinesweepMic,1,hAMMingWindow,sinesweepMic,n);
vDSP_vmul(sinesweepFile,sinesweepFile,n);

//put both signals in complex arrays
vDSP_ctoz((DSPComplex *)sinesweepMic,2,&fftSinesweepMic,nOver2);
vDSP_ctoz((DSPComplex *)sinesweepFile,&fftSinesweepFile,nOver2);

//fft of both file and mic sweeps
vDSP_fft_zrip(fftSetup,log2n,FFT_FORWARD);
vDSP_fft_zrip(fftSetup,FFT_FORWARD);

//BACk to interleaved
vDSP_ztoc(&fftSinesweepFile,(COMPLEX *)sinesweepFile,nOver2);
vDSP_ztoc(&fftSinesweepMic,(COMPLEX *)sinesweepMic,nOver2);

//divide mic-sweep by file-sweep to create frequency response
vDSP_vdiv(sinesweepFile,frequencyResponse,n);

这个工作到目前为止,当我将FR与初始@L_450_2@扫描相乘时,它听起来像麦克风扫描.

我的问题:
这仅适用于生成FR的确切@L_450_2@(扫描).只要我使用FR修改其他声音,音乐就会出现噪音.

我像这样使用FR(频域,交错,不复杂,甚至相同长度):

vDSP_vmul(soundToModify,soundToModify,n);

我在扬声器上播放的@L_450_2@正弦扫描:

我记录的正弦扫描(衰减的低频可见):

我的@L_450_2@正弦扫描在频域中与在代码生成的FR一起乘以:

我的目标:
在我的理解中,频率响应是关于每个频率的信息,它被系统衰减或放大多少(在我的例子中它不能再现低频).为了获得这种信息,我生成一个包含每个所需频率(正弦扫描)的声音,并通过划分记录扫描/@L_450_2@扫描(代码划分)来分析每个频率的修改方式.

通过在频域中将此FR乘以任何声音,应修改频率幅度以模仿我系统上的回放,对吧?

谢谢!

更新:
最后,故障是缺失的复杂算术,正弦扫描和粉红噪声都很好地作为恢复脉冲响应的冲动.

通过初始扫描fft数据来获得工作代码只是复杂划分记录的扫描fft数据.

解决方法

如果您想重新创建iPhone扬声器/麦克风的声音,理想情况下您需要找到系统的脉冲响应.

你做错了什么:找到正弦扫描的FFT是没有意义的,因为输入频率是在系统强加其自身频率响应之前开始变化(线性或指数或其他).正如上面提到的Paul R所建议的,找到白噪声的FFT更有意义,因为在许多统计上平坦的输入频率上求平均将为您提供系统的实际频率响应.

但是,如果您的目标是重新创建系统的声音,则还需要处理阶段,这在上述任何一种方法中都没有完成.这种“理想”的方式是在完全安静和干燥(无反射)的环境中捕捉iPhone扬声器/麦克风系统对“冲动”的反应.有3种方法可以做到:
1.使用气球弹出声音或合成创建的脉冲声音.
2.使用Golay码,这是一种平均许多脉冲响应测量的简单方法
3.使用正弦扫描,然后使用相关性找出脉冲响应.

https://ccrma.stanford.edu/realsimple/imp_meas/imp_meas.pdf

一旦获得脉冲响应测量值,或者将其与您试图“着色”的信号进行卷积,或者将两个信号的FFT相乘,在频域中相乘,然后采用逆FFT得到彩色信号.

说明:据我所知,我会尽力解释一下: – 当您采用脉冲响应的FR时,您可以获取其FFT的幅度,丢弃相位数据.因此,有许多具有相同幅度FR的滤波器(系统)将为您提供完全不同的输出.例如,Allpass过滤器 – 它们都有一个平坦的FR,但如果你通过它们产生冲动,你可以根据过滤器参数获得正弦扫描.显然,这应该指出这样一个事实:尽管你总是可以从IR到FR,但是向相反方向返回意味着你正在做出任意选择.因此,即使粗略估计,也不能丢弃相位.我们无法听到阶段这一事实意味着我们可以查看FR以获取有关系统的信息,但不允许我们忽略系统建模的阶段.我希望这是有道理的?要使用正弦扫描,请执行以下操作 – 如果s(t)= sin(A(t))和A(t)=积分[0到t](w(t)dt),则将信号e(t)关联起来= corr(v(t),sin(A(t))其中v(t)= 2 * abs(dw / dt)将产生一个脉冲.因此,如果用与被测信号的相关性替换正弦扫描,你应该获得它的冲动响应.希望有所帮助!对不起,因为它是如此数学.

大佬总结

以上是大佬教程为你收集整理的ios – 用正弦扫描计算频率响应的问题全部内容,希望文章能够帮你解决ios – 用正弦扫描计算频率响应的问题所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。