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)。高频信号是在扬声器中产生的,还是由麦克风产生的噪声?谢谢。
答案 0 :(得分:1)
我认为你的问题是使用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