仍然可以听到Matlab 30 Khz

时间:2015-02-11 23:39:28

标签: 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); 

1 个答案:

答案 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))

你会希望这看起来像一个正弦波。嗯,它没有。

Not a sine