声音信号抽取和内插的MATLAB程序
%%%l为抽取倍数,m为内插倍数,mp3为音频信号,
%%%此程序实现音频信号的内插和抽取,并画出处理前后的信号时域、频域图像function myhomework(mp3,l,m)
[pyr,fs]=audioread(mp3);
pyr=pyr(:,1);
a=fs %%%输出采样频率
n=length(pyr);
%%%画原信号时域图像%%%
t=n/fs;
x=0:1/fs:(t-1/fs);
subplot(2,2,1);
plot(x,pyr);
xlabel('时间/秒');ylabel('幅度');title('原始信号时域图像');
%%%原信号频谱图%%%
halflenth=floor(n/2);
f=fs*(0:halflenth)/n;
y=abs(fft(pyr,n));
subplot(2,2,2);
plot(f,y(1:halflenth+1));
xlabel('频率/HZ');ylabel('幅度');title('原信号频域图像');
%%%l倍抽取后频谱图%%%%
pyr_l=1:floor(n/l); %%%%pyr_l为l倍抽取后的信号
pyr_l(1:floor(n/l))=pyr(l.*(1:floor(n/l)));
audiowrite('三倍抽取l.wav',pyr_l,fs); %%%%将抽取后的信号写入音乐文件
n_l=length(pyr_l);
halflenth=floor(n_l/2);
f_l=fs*(0:halflenth)/n_l;
y_l=abs(fft(pyr_l,n_l)); %%%%傅里叶变换
subplot(2,2,3);
plot(f_l,y_l(1:halflenth+1));
xlabel('频率/HZ');ylabel('幅度');title('三倍信号频域图像');
%%%三倍内插后信号频谱%%%
pyr_30=1:m*n; %%%%%pyr_30为m倍内插后的信号i=1;
while i<=m*n
if mod(i,m)==0
pyr_30(i)=pyr(i/m);
else
pyr_30(i)=0;
end