通过使用如下的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);
答案 0 :(得分:4)
假设原因只是别名,我似乎错了。事实上,当您查看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))
你会希望这看起来像一个正弦波。嗯,它没有。