[fn, pn] = uigetfile('*.wav','请选择音频文件'); [x, fs] = audioread(strcat(pn, fn)); % x=xx(:,1); len=size(x,1); xf = fft(x); f1=[0:len-1] * fs / len; xff = fftshift(xf); h1 = floor(len / 2); f2 =[-h1:h1-1] * fs /len; xsync = ifft(xf); figure subplot(2,2,1); plot(x); title('original audio'); subplot(2,2,2); plot(xsync); title('synthesize audio'); subplot(2,2,3); plot(f1, abs(xf));%abs用于取模 title('fft coef of audio') subplot(2,2,4);plot(f2,abs (xff)); title('fftshift coef of audio')%中心点移位
时间: 2024-03-05 08:47:53 浏览: 273
这段MATLAB代码的功能是读取一个.wav格式的音频文件(通过uigetfile函数让用户选择文件),并进行快速傅里叶变换(FFT)和傅里叶变换后的频谱绘制。
具体步骤如下:
1. 通过uigetfile函数弹出文件选择窗口,让用户选择.wav格式的音频文件。
```matlab
[fn, pn] = uigetfile('*.wav','请选择音频文件');
```
2. 读取所选音频文件,并获取采样率。
```matlab
[x, fs] = audioread(strcat(pn, fn));
```
3. 对音频信号进行FFT变换,并获取频率坐标f1。
```matlab
len = size(x, 1);
xf = fft(x);
f1 = [0:len-1] * fs / len;
```
4. 对FFT变换后的信号进行FFTshift操作,获取中心点移位后的频率坐标f2。
```matlab
xff = fftshift(xf);
h1 = floor(len / 2);
f2 = [-h1:h1-1] * fs / len;
```
5. 对原始音频信号、FFT变换后的信号、FFTshift后的信号进行绘图。
```matlab
xsync = ifft(xf); % 逆变换得到合成音频信号
subplot(2,2,1); plot(x); title('original audio');
subplot(2,2,2); plot(xsync); title('synthesize audio');
subplot(2,2,3); plot(f1, abs(xf)); title('fft coef of audio');
subplot(2,2,4); plot(f2, abs(xff)); title('fftshift coef of audio');
```
绘图部分会将原始音频信号、合成音频信号、FFT变换系数、FFTshift后的变换系数分别绘制到4个子图上,以便直观地观察音频信号的特性和频谱分布情况。
阅读全文