Matlab 如何修改频谱尖峰

Matlab 如何修改频谱尖峰,matlab,Matlab,我创建了一个.wav文件,其中包含8khz到16khz的频率分量。之后,我用录音机(从扬声器)录制声音。最后,我使用一个MATLAB程序将声音转换成一个图形 在这个图中,您可以看到一个8-16khz的平台(这是我想要的),但也可以看到一些尖峰(箭头所指)。我不知道为什么会产生尖峰。它们是在我的代码中生成的吗?我编写的代码如下所示。多谢各位 Fs =44100; *sample frequence toneFreq1 = 8000; %frequence nSeconds = 25;

我创建了一个
.wav
文件,其中包含8khz到16khz的频率分量。之后,我用录音机(从扬声器)录制声音。最后,我使用一个MATLAB程序将声音转换成一个图形

在这个图中,您可以看到一个8-16khz的平台(这是我想要的),但也可以看到一些尖峰(箭头所指)。我不知道为什么会产生尖峰。它们是在我的代码中生成的吗?我编写的代码如下所示。多谢各位

Fs =44100;     *sample frequence
toneFreq1 = 8000; %frequence
nSeconds = 25;  %time
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');

.... 亲爱的上帝。你是说你的脚本有81个不同名称的变量包含信号信息吗?难道你不能至少循环并累积结果吗?那代码是无法维护的!在任何情况下,严肃地说,你只是简单地把一堆正弦信号加在一起,所以你所注意到的那些“尖峰”可能只是不同正弦信号在基频倍数下的副产品。考虑一下添加<代码> Sin(t)< /C>和<代码> Sin(2t)。在某些时间点,振幅匹配,它们将相加,使振幅加倍。此外,我不明白为什么要将
wav
文件写入文件,然后使用录音程序录制声音,然后绘制波形。创建工作区后,您的工作区中已经有了该信号。你就不能自己画出来吗?在你经历了一系列有损的步骤之后,决定它的情节有什么意义?(即,使用WAV压缩保存文件,然后记录其输出…还使用进一步压缩)很难说,但此代码可能与您的
f_12345678910…
tones=8000:100:16000;M=arrayfun(@(k)sin(linspace(0,n秒*tones(k)*2*pi,n秒*Fs)),1:长度(tones),'UniformOutput',false);F=总和(单位:M.)@David-我同意你的看法。音调频率似乎每增加100次。这是我也会采用的方法。@David,rayryeng:谢谢你的建议。我是Matlab的新手。我的老师让我创建一个8-16khz的波。我对代码不太了解(比如arrayfun)。因此,我只能创建单一频率(例如8,9,…16khz),并通过上面的代码将它们组合起来。为什么我要用录音程序来录制声音和绘制波形,因为我想得到一个可以从录音机中获得的波(24位192khz)。