在MATLAB中创建30kHz声波的问题

在MATLAB中创建30kHz声波的问题,matlab,Matlab,我想用MATLAB创建一个30kHz的声音(之后,我使用土方工程麦克风(M50)测试/分析由MATLAB存储在.WAV文件中的合成信号产生的音频回放(声音) 我使用下面的代码,但是否有错误,如果我想创建另一个50kHz波,我应该如何修改代码? Fs = 96200; toneFreq1 = 30000; nSeconds = 20; f1 = sin( linspace( 0, nSeconds*toneFreq1*2*pi, round( nS

我想用MATLAB创建一个30kHz的声音(之后,我使用土方工程麦克风(M50)测试/分析由MATLAB存储在
.WAV
文件中的合成信号产生的音频回放(声音)

我使用下面的代码,但是否有错误,如果我想创建另一个50kHz波,我应该如何修改代码?

Fs        = 96200;    
toneFreq1 = 30000; 
nSeconds  =    20;  
f1        = sin( linspace( 0, nSeconds*toneFreq1*2*pi, round( nSeconds * Fs ) ) );
sound( f1, Fs ) 
wavwrite( f1, Fs, 24, '30khz.wav' );

首先,大多数声卡无法使用Fs播放。通常,它们提供88200或96000赫兹,因此您应该选择其中之一

其次,由于无法创建高于一半采样率的频率。也就是说,当Fs=96000时,理论上可能的最高频率为48000 Hz,但是您需要使用
cos
而不是
sin

更新:您正在创建、播放、录制和分析声音。所以,你有各种各样的错误来源

我上面的两点纠正了你在创造声音方面的问题。下面的matlab程序清楚地表明,合成信号正是您想要创建的正弦波。所以,你最初的问题已经解决了:

clear
Fs = 96000;
toneFreq1 = 30000;   % change between 0 and Fs/2=48000
nSeconds = 20;
f1 = cos( linspace (0, nSeconds*toneFreq1*2*pi, round(nSeconds*Fs) ) );
freqz( f1, length(f1) )
因此,您修改的问题的新光谱图图像反映了由于回放、记录和/或分析而产生的其他问题

很难说,你面临什么问题。我可以给你一些提示:

1) 最可能的情况是,您的放大器和/或扬声器无法再现远高于20kHz的频率。你应该从8到12kHz的频率开始,然后你就能听到它们。如果你年龄超过,比如说40岁,你可能很难听到高于15kHz的频率。但即使你20岁了,你也听不到18到20kHz以上的频率(至少你需要巨大的放大才能听到)

2) 您的麦克风能够将这些高频转换为电信号,但您的麦克风放大器或声卡的带宽可能限制为22或24kHz

3) 将测量信号转换为频谱图的程序可能存在错误

4) 测量信号开始和结束时的分割也会在频谱中引入伪影


如果您需要进一步的帮助,您应该发布您的录音和分析代码。但我想,有了我的提示,你就能自己找到问题。尽管如此,告诉我们您的结果还是很有意思的。

“但它是否有错误”不是很好的描述-请详细解释什么不起作用以及您是如何测试它的。人耳听不到那个频率的声音,所以如果许多扬声器(特别是廉价的PC扬声器)不能播放如此高的频率,我也不会感到惊讶。首先我使用计算机通过matlab创建了一个30khz/40khz/50khz的wav。然后我通过计算机、放大器和扬声器播放wav,然后使用M50麦克风和录音机(从扬声器)录制声音。最后,我使用matlab程序将wav转换成数字。谢谢。你有多确定你的电脑扬声器能播放如此高的频率?另外,你还没有说是哪里出了问题,这是一个非常糟糕的问题。对Dan来说,我已经检查了我的PC扬声器参数,它可以讲高频(最大48khz)。当我播放matlab创建的30khz波形,并用录音机录制时,我使用一个程序将波形转换成一个图形(上图),但高频约为18khz?Fs=96000;toneFreq1=30000;n秒=20;f1=sin(linspace(0,nSecondstoneFreq1*2*pi,round(nSecondsFs));声音(f1,Fs)波形写入(f1,Fs,24,'30khz.wav');致:Hartmut Pfizinger,谢谢你的建议,我会尝试。致Hartmut Pfizinger,我尝试使用cos代替sin,FS=96000,但当我用matlab创建30khz WAV时(上图)显示为18Khz。@yang bin查看我的更新,非常感谢,我会尝试。