【问题标题】:Playing a varying frequency in Hertz in matlab?在matlab中以赫兹播放不同的频率?
【发布时间】:2014-04-20 01:56:18
【问题描述】:

我有一些 matlab 代码可以在 5 秒内产生声音的频率(以赫兹为单位)。代码每秒输出 100 个样本,我想播放 5 秒的块来看看这听起来像什么,但我遇到了采样率和声音/soundsc 命令的问题。

我的频率在振荡(数据here),如果有人能帮我将这些数据转换成某种实时近似值,我将不胜感激。

【问题讨论】:

  • 如果您想播放频率为 300 Hz 左右的声音,您希望采样率高于您提到的每秒 100 个样本。您想生成频率变化的正弦曲线吗?
  • 我可以做到这一点;所以我应该在两者之间输出更多的点吗?这不是问题,因为生成公式几乎只是修改后的 Sin 波,但请让我知道我应该生产多少来模拟这个!

标签: matlab audio


【解决方案1】:

这样的事情可能会有所帮助

Fs=2000; %sample rate, Hz
t=0:1/Fs:5; %time vector
F=298+sin(2*pi*t);  %put your own F here

S=sin(2*pi*F.*t);  %here is the sound vector

%visual check
figure(1);
plot(t,S)
figure(2);
plot(t,F)

%listen
wavplay(S,Fs)

这类似于 FM 调制,但有所不同。如果你有一个不同采样率的折叠向量,你可以用命令转换它

F=interp1(told,Fold,t);  %told and Fold are F at a different sample rate 
%check it
plot(told,Fold,t,F)

【讨论】:

  • 优秀的答案,非常感谢 - wavplay 正是我想要的!
【解决方案2】:

首先,根据奈奎斯特-香农采样定理,您的采样率应至少是最大频率的两倍。

接下来,你需要生成一个正弦曲线:

Signal = sin(2*pi*Phi);

其中Phi 是与所需频率模式相对应的相位,它只是频率的积分(您可以通过数值或解析方式进行计算)。

【讨论】:

  • 谢谢你 - 我应该记得香农采样,它应该敲响警钟!
猜你喜欢
  • 2013-06-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-15
相关资源
最近更新 更多