首页 > 解决方案 > 如何在播放时改变正弦波的相位(带有视觉反馈)?

问题描述

我正在尝试复制一个著名的实验,其中通过耳机传递的正弦波被通过骨导体传递的相反相位的正弦波抵消。

为了通过实验实现这一点,参与者应该能够改变骨传导正弦波的相位,而空气传导正弦波以固定相位播放。在 MATLAB 中,需要两段代码:

  1. 在播放正弦波时用户输入改变正弦波相位的能力
  2. 显示带有阶段设置的实时更新的视觉反馈

我正在依次处理这些问题。

  1. 改变正弦波的相位 我使用 MATLAB 中的数字信号处理工具箱创建了两个正弦波系统对象,相位分离为两个 pi 弧度。两个正弦波都具有统一幅度。我打算将用户输入设置为介于 0 和 2 之间的值,将第二个正弦波的幅度乘以用户输入,然后将两个正弦波加在一起并将它们归一化,使它们再次具有统一幅度。我希望这将根据需要改变阶段。但是,我需要直观地检查结果以验证行为是否符合我的预期。

可能有比这更好的方法来改变相位。或者,也许我猜错了,我计划的操作不起作用(担心我可能会扭曲正弦波)。如果您能想到一个更好的方法,请提出一个更好的方法!

[注意:相位是正弦波系统对象的不可调属性。如果相位是一个可调属性,那么直接改变系统对象的相位(通过调整系统对象)将是一个明显的解决方案。]

  1. 视觉反馈 我尝试使用 dsp.TimeScope(我在 MATLAB 2019a 上,所以没有更新的 Timescope),但是当用户更改相位设置时,找不到获取正弦波实时更新的方法。尽管将帧设置为每 50 毫秒更新一次,但当我停止脚本运行时,我只能在 dsp.TimeScope 中看到更新的正弦波。

我想过使用实时脚本和绘图函数而不是 dsp.TimeScope。这样做可能有效吗?有没有更好的方法来解决这个问题?

任何关于第 (1) 或 (2) 部分的提示将不胜感激!我认为这应该是一段简单的编程,并怀疑有一种优雅的方式可以做到这一点。但是,我完全不确定最好的方法是什么。

标签: matlabaudiosignal-processingphase

解决方案


推荐阅读