傅里叶快速变换(FFT)中音频信号的频谱分析

今天在matlab上画了一下钢琴最高音la的频谱,结果如下图,我想问一下为什么这个频谱是一个对称的呢?并且我们知道这个音的频率是4185.5Hz,那在这个图上怎么看出来呢?

关于对称是由于傅里叶变换的性质决定的。至于每个峰值所对应的实际频率需要转换一下。
FFT应用举例

例1:x=0.5*sin(2*pi*15*t)+2*sin(2*pi*40*t)。采样频率fs=100Hz,分别绘制N=128、1024点幅频图。

clf;
fs=100;N=128;
%采样频率和数据点数
n=0:N-1;t=n/fs; %时间序列
x=0.5*sin(2*pi*15*t)+2*sin(2*pi*40*t);
%信号
y=fft(x,N); %对信号进行快速Fourier变换
mag=abs(y);
%求得Fourier变换后的振幅
f=n*fs/N; %频率序列
subplot(2,2,1),plot(f,mag);
%绘出随频率变化的振幅
xlabel('频率/Hz');
ylabel('振幅');title('N=128');grid
on;
subplot(2,2,2),plot(f(1:N/2),mag(1:N/2));
%绘出Nyquist频率之前随频率变化的振幅
xlabel('频率/Hz');
ylabel('振幅');title('N=128');grid
on;
%对信号采样数据为1024点的处理
fs=100;N=1024;n=0:N-1;t=n/fs;
x=0.5*sin(2*pi*15*t)+2*sin(2*pi*40*t);
%信号
y=fft(x,N); %对信号进行快速Fourier变换
mag=abs(y);
%求取Fourier变换的振幅
f=n*fs/N;
subplot(2,2,3),plot(f,mag);
%绘出随频率变化的振幅
xlabel('频率/Hz');
ylabel('振幅');title('N=1024');grid
on;
subplot(2,2,4)
plot(f(1:N/2),mag(1:N/2));
%绘出Nyquist频率之前随频率变化的振幅
xlabel('频率/Hz');
ylabel('振幅');title('N=1024');grid
on;
根据这个例子套用一下就可以了追问

这个转换具体怎么做呢?我用fft的时候已经加了shift了也需要转化吗?

追答

把你的程序贴出来,帮你看看

追问

[y,fs,bits]=wavread('C:\\Users\\pro\\Desktop\\tsy\\10.wav'); %读取音频信息
Y1=fft(y,4096); %进行傅立叶变换
Y2=fftshift(Y1)
plot(abs(Y2)); %('声音信号的频谱');
p=sprintf('fs 值为:%d.\',fs);
title(p);

追答

abs(Y1)是用来求振幅的。要求振幅和频率的关系还要再做一步,全部代码如下:

[y,fs,bits]=wavread('C:\\Users\\pro\\Desktop\\tsy\\10.wav'); %读取音频信息
N=2^12;
Fs=2^10;
Y = fft(y,N); %做FFT变换
Ayy = (abs(Y)); %取模
plot(Ayy(1:N)); %显示原始的FFT模值结果
title('FFT 模值');
figure;
Ayy=Ayy/(N/2); %换算成实际的幅度
Ayy(1)=Ayy(1)/2;
F=([1:N]-1)*Fs/N; %换算成实际的频率值
plot(F(1:N/2),Ayy(1:N/2)); %显示换算后的FFT模值结果
xlabel('频率');
ylabel('振幅');
title('振幅-频率曲线图');

追问

非常感谢,我才刚开始学matlab,有很多问题都还不太懂“我这还有一个问题,你方便的话明天我能私信问一下你吗?

温馨提示:答案为网友推荐,仅供参考
相似回答