窗函数设计法及滤波器设计法(对语音信号的数据滤波和处理)
由于是大二被同学带着做的所以不是很熟悉,像请大神仔细的解说一下,用来复试的问答。
首先:fft是傅里叶变换的函数吗?为什么在y1=fft()之后还要 y2=fftshift(y1);对频谱图进行平移?
fs =22050;
Nbits =16;
[x,fs,nbits]=wavread('C:\Users\biziheng\Documents\Tencent Files\569402295\FileRecv\kesou.wav'); %读声音文件
n=length(x);
t=0:1/fs:(length(x)-1)/fs; %求出语音信号的长度
y1=fft(x,n) %傅里叶变换 y2=fftshift(y1); %对频谱图进行平移 f=0:fs/n:fs*(n-1)/n; %得出频点 subplot(2,1,1);
plot(t/2,x) %做原始语音信号的时域图形
title('原始信号时域波形图');
subplot(2,1,2);
plot(f,abs(y2));
title('原始信号频谱图');
clear;
dt=1/44100;
fs=44100;
[f1,fs,nbits]=wavread('C:\Users\biziheng\Documents\Tencent Files\569402295\FileRecv\kesou.wav');
figure(1);
subplot(1,1,1);
N=length(f1);
t=0:1/fs:(N-1)/fs;
plot(t,f1);
title('信息信号的时域波形');
fy1=fft(f1);
w1=0:fs/(N-1):fs;
figure(2);
subplot(1,1,1);
plot(w1,abs(fy1));
title('信息信号的频谱'); //画完了
f2=cos(22000*pi*t);
figure(3);
subplot(1,1,1);
fy2 = fft(f2);
N2=length(f2);
w2=fs/N*[0:N-1];
plot(w2,abs(abs(fy2)));
title('载波信号的频谱');
f1=f1(:,1);
f3=f1'.*f2;
figure(4);
subplot(1,1,1);
fy3 = fft(f3);
plot(w1,abs(abs(fy3)));
title('已调信号的频谱');
sound(f3,fs,nbits);
f4=f3.*f2;
figure(5);
subplot(1,1,1);
fy4=fft(f4);
plot(w1,abs(abs(fy4)));
title('解调信号的频谱');
sound(f4,fs,nbits);
fp1=0;
fs1=5000;
As1=100;
wp1=2*pi*fp1/fs;
ws1=2*pi*fs1/fs;
BF1=ws1-wp1;
wc1=(wp1+ws1)/2;
M1=ceil((As1-7.95)/(2.286*BF1))+1;
N1=M1+1;
beta1=0.1102*(As1-8.7);
Window=(kaiser(N1,beta1));
b1=fir1(M1,wc1/pi,Window);
figure(6);
subplot(1,1,1);
freqz(b1,1,512);
title('FIR低通滤波器的频率响应');
f4_low = filter(b1,1, f4);
plot(t,f4_low);
title('滤波后的解调信号时域波形');
sound(f4_low,fs,nbits);
f5=fft(f4_low);
figure(7);
subplot(1,1,1);
plot(w1,abs(f5));
title('滤波后的解调信号频谱');
快放:
[x,fs,nbits]=wavread('C:\Users\biziheng\Documents\Tencent Files\569402295\FileRecv\kesou.wav')
M=2*fs;
wavplay(x,M);
慢放:
[x,fs,nbits]=wavread('C:\Users\biziheng\Documents\Tencent Files\569402295\FileRecv\kesou.wav')
M=0.2*fs;
wavplay(x,M);
[x1,Fs,bits]=wavread('C:\Users\biziheng\Documents\Tencent Files\569402295\FileRecv\kesou.wav');
[y,fs]=wavread('C:\Users\biziheng\Documents\Tencent Files\569402295\FileRecv\kesou.wav');
sound(y,1*fs)%回放语音信号并控制快慢
n=length(y);%选取变换的点数
y_p=fft(y,n);%对n点进行傅里叶变换到频域
f=fs*(0:n/2-1)/n;%对应点的频率
figure(1)
subplot(2,1,1);
plot(y);%语音信号的时域波形图
title('原始语音信号采样后时域波形');
xlabel('时间轴')
ylabel('幅值?A')
subplot(2,1,2);
plot(f,abs(y_p(1:n/2)));%语音信号的频谱图?
axis([0 20000 0 600]);
title('原始语音信号采样后频谱图');
xlabel('频率Hz');
ylabel('频率幅值');
%高通滤波器的创建
fp=1500;
fst=2800;
%归一化频率
wp=2*pi*fp/fs;
ws=2*pi*fst/fs;
Rp=1;%通带最大衰减系数
Rs=53;%阻带最大衰减系数
Ts=1/fs;%采样周期
m=4096;%采样点数
wp=2/Ts*tan(wp/2);%模拟通带截止频率
ws=2/Ts*tan(ws/2);%模拟阻带截止频率
[N,Wn]=buttord(wp,ws,Rp,Rs,'s');%选择模拟巴特沃斯低通滤波器的最小阶数
[z,p,k]=buttap(N);%创建巴特沃斯模拟低通滤波器
[Bp,Ap]=zp2tf(z,p,k);
[b,a]=lp2hp(Bp,Ap,Wn);
%用双线性变换法得到数字低通滤波器系数
[bz,az]=bilinear(b,a,fs);
figure(2);
freqz(bz,az,m);
title('双线性变换法得到的IIR高通滤波器');
%对音频信号进行低通滤波并输出滤波后的音频
f2=filter(bz,az,y);
figure(3)
subplot(2,1,1);
plot(y);
title('FIR低通滤波器滤波前的时域波形');
subplot(2,1,2);
plot(f2);
title('FIR低通滤波器滤波后的时域波形');
sound(f2,1*fs)
%滤波频谱的前后对比
figure(4)
subplot(2,1,1);
plot(f,abs(y_p(1:n/2)));
title('FIR低通滤波器滤波前的频谱')
xlabel('频率/Hz');
ylabel('幅值');
subplot(2,1,2)
F2=plot(f,abs(f2(1:n/2)));
title('FIR低通滤波器滤波后的频谱')
xlabel('频率/Hz');
ylabel('幅值');
[y,fs]=wavread('C:\Users\biziheng\Documents\Tencent Files\569402295\FileRecv\kesou.wav’);
sound(y,1*fs)%回放语音信号
n=length(y);%选取变换的点数
y_p=fft(y,n);%对n点进行傅里叶变换到频域
f=fs*(0:n/2-1)/n;%对应点的频率
figure(1)
subplot(2,1,1);
plot(y);%语音信号的时域波形图
title('原始语音信号采样后时域波形');
xlabel('时间轴')
ylabel('幅值A')
subplot(2,1,2);
plot(f,abs(y_p(1:n/2)));%语音信号的频谱图?
axis([0 20000 0 600]);
title('原始语音信号采样后频谱图');
xlabel('频率Hz');
ylabel('频率幅值');
%低通滤波器器的创建
wp=2*pi*1200/fs;
ws=2*pi*1800/fs;
Rp=1;
Rs=53;
wdelta=ws-wp;
N=ceil(8*pi/wdelta);%取整
wn=(wp+ws)/2;
[b,a]=fir1(N,wn/pi,hamming(N+1));%选择窗函数,并归一化截止频率
figure(2)
freqz(b,a,512);
title('FIR低通滤波器');
%对音频信号进行低通滤波并输出滤波后的音频
f2=filter(b,a,y);
figure(3)
subplot(2,1,1);
plot(y);
title('FIR低通滤波器滤波前的时域波形');
subplot(2,1,2);
plot(f2);
title('FIR低通滤波器滤波后的时域波形');
sound(f2,1*fs)
%滤波频谱的前后对比
figure(4)
subplot(2,1,1);
plot(f,abs(y_p(1:n/2)));
title('FIR低通滤波器滤波前的频谱')
xlabel('频率/Hz');
ylabel('幅值');
subplot(2,1,2)
F2=plot(f,abs(f2(1:n/2)));
title('FIR低通滤波器滤波后的频谱')
xlabel('频率/Hz');
ylabel('幅值');
最后,我知道有标示但是希望还是再仔细说一下,谢谢。并且如果对于这个matlab复试的老师可能会问什么呢