Matlab 30 Khz 仍然可以听到

Matlab 30 Khz still be heard

通过使用下面的 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))

您可能希望它看起来像正弦波。好吧,事实并非如此。