Fs =44100;
toneFreq1 = 8000;
nSeconds = 25;
f1 = sin(linspace(0, nSeconds*toneFreq1*2*pi, round(nSeconds*Fs)));
toneFreq2 = 8100;
nSeconds = 25;
f2 = sin(linspace(0, nSeconds*toneFreq2*2*pi, round(nSeconds*Fs)));
....

toneFreq80 = 15900;
nSeconds = 25;
f80 = sin(linspace(0, nSeconds*toneFreq80*2*pi, round(nSeconds*Fs)));
toneFreq81 = 16000;
nSeconds = 25;
f81 = sin(linspace(0, nSeconds*toneFreq81*2*pi, round(nSeconds*Fs)));


f_12345678910...= [f1+f2+f3+f4+f5+f6+f7+f8+f9+f10...f81]/81;


f_z=[f_12345678910...];
sound(f_z,Fs)
wavwrite(f_z, Fs, 24, '8_16zKHz.wav');

我创建了一个波形文件(使用Matlab包含从8khz到16khz的频率)。然后,我播放波浪,并使用M50麦克风(扬声器上方6厘米)和录音机录制声音(来自扬声器)。最后,我使用matlab程序将声音转换为数字。在此图中,您可以看到8-16khz平台(我想要的),但也可以看到一些高频分量(箭头)。我不知道为什么会产生高频(> 16khz)。扬声器中是否正在产生高频信号,还是麦克风会产生噪声?谢谢。

最佳答案

我认为您的问题是使用linspace。从表面上看,它似乎应该可以工作,但是您如何调用它有些不舒服。我认为您的方法最终无法获得完全正确的采样率。

而且,我对Matlab以普遍认可的格式导出24位WAV的能力几乎没有经验。我认为您应该首先尝试16位,因为这对我来说非常可靠。

因此,作为尝试,我将以这种方式重新编写您的代码:

%define my parameters
toneFreqs = [8000:100:16000];
fs = 44100;
nSeconds = 25;

%create my data
t_sec = ([1:(nSeconds*fs)]-1)/fs; %here is the time for each sample
t_sec = t_sec(:);                 %make a column instead of a row
myWav = zeros(size(t_sec));       %pre-allocate the output
for Ifreq = 1:length(toneFreqs)   %loop over each frequency
    myWav = myWav + sin(2*pi*toneFreqs(Ifreq)*t_sec);
end

%save to WAV file
myWav = myWav./max(abs(myWav));    %normalize amplitude to 1.0
wavwrite(myWav,fs,16,'myWav.wav'); %save as 16 bit

10-04 13:31