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))
您可能希望它看起来像正弦波。好吧,事实并非如此。
通过使用下面的 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))
您可能希望它看起来像正弦波。好吧,事实并非如此。