绝对正确的代码:程序1:
x1=wavread('Windows Critical Stop.wav')%读取语音信号的数据,赋给变量x1
sound(x1,22050) %播放语音信号
y1=fft(x1,1024) %对信号做1024点FFT变换
f=fs*(0:511)/1024
figure(1)
plot(x1) %做原始语音信号的时域图形
title('原始语音信号')
xlabel('time n')
ylabel('fuzhi n')
figure(2)
freqz(x1) %绘制原始语音信号的频率响应图
title('频率响应图')
figure(3)
subplot(2,1,1)
plot(abs(y1(1:512))) %做原始语音信号的FFT频谱图
title('原始语音信号FFT频谱')
subplot(2,1,2)
plot(f,abs(y1(1:512)))
title('原始语音信号频谱')
xlabel('Hz')
ylabel('fuzhi')
程序2:
fs=22050 %语音信号采样频率为22050
x1=wavread('Windows Critical Stop.wav')%读取语音信号的数据,赋给变量x1
t=0:1/22050:(size(x1)-1)/22050
y1=fft(x1,1024) %对信号做1024点FFT变换
f=fs*(0:511)/1024
x2=randn(1,length(x1)) %产生一与x长度一致的随机信号
sound(x2,22050)
figure(1)
plot(x2) %做原始语音信号的时域图形
title('高斯随机噪声')
xlabel('time n')
ylabel('fuzhi n')
randn('state',0)
m=randn(size(x1))
x2=0.1*m+x1
sound(x2,22050)%播放加噪毁激声后的语音信号
y2=fft(x2,1024)
figure(2)
plot(t,x2)
title('加噪后的语音信号')
xlabel('time n')
ylabel('fuzhi n')
figure(3)
subplot(2,1,1)
plot(f,abs(y2(1:512)))
title('原始语音信号频谱')
xlabel('Hz')
ylabel('fuzhi')
subplot(2,1,2)
plot(f,abs(y2(1:512)))
title('加噪后的语音信号频谱')
xlabel('Hz')
ylabel('fuzhi')
根据以上代码,你可以修改下面有错误的代码
程序3:双线性变换法设计Butterworth滤波器
fs=22050
x1=wavread('h:\课程设计2\shuzi.wav')
t=0:1/22050:(size(x1)-1)/22050
Au=0.03
d=[Au*cos(2*pi*5000*t)]'
x2=x1+d
wp=0.25*pi
ws=0.3*pi
Rp=1
Rs=15
Fs=22050
Ts=1/Fs
wp1=2/Ts*tan(wp/2)%将模拟指标转换成数字指标
ws1=2/Ts*tan(ws/2)
[N,Wn]=buttord(wp1,ws1,Rp,Rs,'s') %选择滤波器的最小阶数
[Z,P,K]=buttap(N) %创建butterworth模拟滤波器
[Bap,Aap]=zp2tf(Z,P,K)
[b,a]=lp2lp(Bap,Aap,Wn)
[bz,az]=bilinear(b,a,Fs) %用双线性变换法纤高袜实现模拟滤波器到数字滤波器的转换
[H,W]=freqz(bz,az)%绘制频率响应曲线
figure(1)
plot(W*Fs/(2*pi),abs(H))
grid
xlabel('频率/Hz')
ylabel('频率响应幅度')
title('Butterworth')
f1=filter(bz,az,x2)
figure(2)
subplot(2,1,1)
plot(t,x2) %画出滤波前的时域图
title('滤波前的时域波形')
subplot(2,1,2)
plot(t,f1)%画出滤波后的时域图
title('滤波后的时域波形')
sound(f1,22050) %播放滤波后的信号
F0=fft(f1,1024)
f=fs*(0:511)/1024
figure(3)
y2=fft(x2,1024)
subplot(2,1,1)
plot(f,abs(y2(1:512)))%画出滤波前的频谱图
title('滤波前的频谱')
xlabel('Hz')
ylabel('fuzhi')
subplot(2,1,2)
F1=plot(f,abs(F0(1:512))) %画出滤波后的频谱图
title('滤波后的频谱')
xlabel('Hz')
ylabel('fuzhi')
程序4:窗函数法设计滤波器:
fs=22050
x1=wavread('h:\课程设计2\shuzi.wav')
t=0:1/22050:(size(x1)-1)/22050
Au=0.03
d=[Au*cos(2*pi*5000*t)]'
x2=x1+d
wp=0.25*pi
ws=0.3*pi
wdelta=ws-wp
N=ceil(6.6*pi/wdelta) %取整
wn=(0.2+0.3)*pi/2
b=fir1(N,wn/pi,hamming(N+1)) %选择窗函数,并归一化截止频率
figure(1)
freqz(b,1,512)
f2=filter(bz,az,x2)
figure(2)
subplot(2,1,1)
plot(t,x2)
title('滤波前的时域波形')
subplot(2,1,2)
plot(t,f2)
title('滤波后的时域波形')
sound(f2,22050) %播放滤波后的语音信号
F0=fft(f2,1024)
f=fs*(0:511)/1024
figure(3)
y2=fft(x2,1024)
subplot(2,1,1)
plot(f,abs(y2(1:512)))
title('滤波前的频谱')
xlabel('Hz')
ylabel('fuzhi')
subplot(2,1,2)
F2=plot(f,abs(F0(1:512)))
title('滤波后的频谱')
xlabel('Hz')
ylabel('fuzhi')
这个应该是设计的FIR滤李旁波器,但是原理需要蠢扰旦根据你的论文了,可能是论文提出的什么方法,这是我的理解:首先是生成一个信号,采样率1000hz,采样点数1000点;
wp和ws为滤波器参数,具体是低通等类型需要根据下面的分析;
Aw为窗口宽度,这里取奇数;
后面是设计hanning窗,窗幅度根据他提供的公式了,根据hanning窗设计滤波器,应该是低通了;
然后绘制出来设计的滤波器幅频和相频相应;
然后滤波;
会后绘制出来滤波前后波形,这里将250hz滤掉了。
你那个程序标点你复制过来的时带扰候出问题了应该,下面的是可以运行的:
N=1000
Fs=1000
n=0:N-1
t=n/Fs
x=sin(2*pi*50*t)+sin(2*pi*250*t)
wp=0.5*pi
ws=0.66*pi
wdelta=ws-wp
A=ceil(8*pi/wdelta)
if rem(A,2)==0
A=A+1
end
Aw=A
wc=(wp+ws)/2
a=0:A-1
alpha=(A-1)/2
m=a-alpha+0.00001
hd=sin(wc*m)/(pi*m)
win=hanning(Aw)
h=hd*win
b=h
freqz(b,1,512)
yfft=fftfilt(b,x,256)
n1=81:241
t1=t(n1)
x1=x(n1)
y1=yfft(n1)
subplot(221)
plot(t1,x1)
title('Original Signal')
subplot(222)
plot(t1,y1)
title('Signal after the filter')
另外你问的,end的问题,end这里和if配对的,这是语法内容。
你可以看看这个,这是我以前的实验资料,可以参考,经典的做法:
http://bbs.21eic.com/IndivGroup_Index.asp?GroupID=5&GroupBoardid=3
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)