MATLAB使用fft求取给定音频信号的频率

一段10s立体声音频,采样率位8000Hz,已知频率为1000Hz

 1 clc;
 2 clear;
 3 [data, Fs] = audioread('1khz_stereo_8000.wav');
 4 fs=Fs;
 5 N=4000;
 6 n=2*fs:2*fs+N-1;     %从第2s结束开始取样
 7 f=(n-2*fs)*fs/N;     %数字频率转换成模拟频率 本来应该是n/N * fs,但由于n是从第三个周期开始的
 8 temp=data(:,1);      %取单个声道样本
 9 x=temp(n);
10 y=fft(x,N);  
11 mag=abs(y);          %求得Fourier变换后的振幅
12 plot(f,mag); 
13 [max,pos] = max(mag);%找到幅值最高点,记录所在横坐标
14 freq = f(pos);       %幅值最高对应基频分量
15 disp(freq);
16 grid on;

频谱图为

 

posted @ 2017-08-28 18:57  疾风剑  阅读(2408)  评论(0编辑  收藏  举报