Matlab 30 Khz 仍然可以听到

标签 matlab audio signals

通过使用下面的 Matlab 代码,我创建了 30 Khz 信号并使用声音函数来听到创建的信号。但是,据我所知,我作为一个人,不应该听到任何超过20Khz的声音。我下面缺少的部分是什么?我不是人吗?

clear
Fs = 96000;
toneFreq1 = 30000;   
nSeconds = 2;
f1 = 10*cos( linspace (0, nSeconds*toneFreq1*2*pi, round(nSeconds*Fs) ) );
freqz( f1, length(f1) )
sound(f1, Fs); 

最佳答案

看来我错误地认为原因只是混叠。事实上,当你查看sound的源代码时,你会发现在52行:

% Make sure y is in the range +/- 1
y = max(-1,min(y,1));

这只会切断高于 1 和低于 -1 的信号。看来您对 sound 的输入值应该在 [-1,1] 区间内,即使文档中没有明确提及。如果您不传入值在此范围内的信号,将会发生削波。由采样引起的削波和混叠的混合将产生您所听到的低于 20khz 的频率。 因此,要使您的代码正常工作,只需删除 10*

旧部分 - 问题不仅仅是由别名引起的,因此以下内容是不够的:

您听到的是 aliasing : 只需绘制信号的前几个值

plot(f1(1:50))

您希望它看起来像正弦波。嗯,事实并非如此。

Not a sine

关于Matlab 30 Khz 仍然可以听到,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28466721/

相关文章:

matlab - 在 MATLAB 中正确使用 eval 或避免使用它

matlab - 如何在 Matlab 中以堆栈样式绘制多个 2D 图像?

android - Soundpool 频繁出现显着延迟并发出 "deep-buffer-playback"消息

java - 从终端发送命令到 Java swing 应用程序

python - 将 python/numpy "A.argmin(axis=-1)"转换为等效的 matlab 表达式

c - 任意函数的泰勒级数展开

javascript - 你能在不播放的情况下获得 webrtc 音频流的音量吗?

audio - XAudio2 语音池

c - 向进程组中除自身以外的所有进程发送信号

c++ - placement new 基于模板 sizeof()