ios – 用正弦扫描计算频率响应的问题

ios – 用正弦扫描计算频率响应的问题,第1张

概述我目前正在尝试计算 iphone扬声器/麦克风往返的频率响应.我在扬声器上进行正弦扫描,通过麦克风录制并尝试从中获得频率响应.最终目标是能够将FR乘以任何给定的声音,使其听起来像iphone扬声器/麦克风. 我的代码到目前为止: //apply window functionvDSP_vmul(sineSweepMic,1,hammingWindow,1,sineSweepMic,1,n);v 我目前正在尝试计算 iphone扬声器/麦克风往返的频率响应.我在扬声器上进行正弦扫描,通过麦克风录制并尝试从中获得频率响应.最终目标是能够将FR乘以任何给定的声音,使其听起来像iphone扬声器/麦克风.

我的代码到目前为止:

//apply window functionvDSP_vmul(sinesweepMic,1,hammingWindow,sinesweepMic,n);vDSP_vmul(sinesweepfile,sinesweepfile,n);//put both signals in complex arraysvDSP_ctoz((DSPComplex *)sinesweepMic,2,&fftSinesweepMic,nOver2);vDSP_ctoz((DSPComplex *)sinesweepfile,&fftSinesweepfile,nOver2);//fft of both file and mic sweepsvDSP_fft_zrip(fftSetup,log2n,FFT_FORWARD);vDSP_fft_zrip(fftSetup,FFT_FORWARD);//back to interleavedvDSP_ztoc(&fftSinesweepfile,(COMPLEX *)sinesweepfile,nOver2);vDSP_ztoc(&fftSinesweepMic,(COMPLEX *)sinesweepMic,nOver2);//divIDe mic-sweep by file-sweep to create frequency responsevDSP_vdiv(sinesweepfile,frequencyResponse,n);

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

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

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

vDSP_vmul(soundToModify,soundToModify,n);

我在扬声器上播放的文件正弦扫描:

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

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

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

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

谢谢!

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

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

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

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

但是,如果您的目标是重新创建系统的声音,则还需要处理阶段,这在上述任何一种方法中都没有完成.这种“理想”的方式是在完全安静和干燥(无反射)的环境中捕捉iPhone扬声器/麦克风系统对“冲动”的反应.有3种方法可以做到:
1.使用气球d出声音或合成创建的脉冲声音.
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 – 用正弦扫描计算频率响应的问题所遇到的程序开发问题。

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

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1038565.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-24
下一篇 2022-05-24

发表评论

登录后才能评论

评论列表(0条)

保存