用matlab编程设计一个巴特沃斯滤波器,对声音进行去噪

用matlab编程设计一个巴特沃斯滤波器,对声音进行去噪,第1张

fs=44100;

[x,fs,bits]=wavread('ding11wav');

%sound(x)

t=0:(size(x)-1);

x2=rand(1,length(x))'; %产生一与x长度一致的随机信号

y=x+x2;

%加入正弦噪声

t=0:(n-1);

Au=003;

d=[Ausin(2pi500t)]';

y=x+d;

wp=025pi;

ws=03pi;

wdelta=ws-wp;

N=ceil(66pi/wdelta); %取整

wn=(02+03)pi/2;

b=fir1(N,wn/pi,hamming(N+1)); %选择窗函数,并归一化截止频率

figure(1)

freqz(b,1,512)

f2=filter(bz,az,y)

figure(2)

subplot(2,1,1)

plot(t,y)

title('滤波前的时域波形');

subplot(2,1,2)

plot(t,f2);

title('滤波后的时域波形');

sound(f2); %播放滤波后的语音信号

F0=fft(f1,1024);

f=fs(0:511)/1024;

figure(3)

y2=fft(y,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');

你这LPF函数是别人写的吧,里面还有一个新的F2T()函数不知道是什么,不是MATLAB自带的,也是别人写的,你没拿过来吧。

不管了,你按我给的写,直接全复制到一个文件里,运行就行了。

close all;

clear all;

dt=0001;

fm=1;

fc=10;

T=5;

t=0:dt:T;

mt=sqrt(2)cos(2pifmt);

s_dsb=mtcos(2pifct);

B=2fm;

figure(1);

subplot(311);

plot(t,s_dsb);

hold on;

plot(t,mt,'r--');

title('DSB调制信号');

xlabel('t');

f_dsb=fft(s_dsb);

temp=f_dsb;

temp([50:4953])=0;

s_ssb=ifft(temp);

subplot(312);

plot(t,s_ssb);

hold on;

plot(t,mt,'r--');

title('SSB调制信号(下边带)');

xlabel('t');

temp=f_dsb;

temp([1:49])=0;

temp([4953:end])=0;

s_ssb=ifft(temp);

subplot(313);

plot(t,s_ssb);

hold on;

plot(t,mt,'r--');

title('SSB调制信号(上边带)');

xlabel('t');

%

用切比雪夫最佳一致逼近设计线性相位FIR带通滤波器

%信号为05hz,

09hz,

11hz和15hz的正统信号叠加组成

%通带为[09,11]

%频谱分辨率与信号实际长度N成正比

clear

all;

f1=05;f2=09;f3=11;f4=15;t=0:1203;N=length(t);fs=10;M=512;

x1=sin(2pi(f1/fs)t)+sin(2pi(f2/fs)t)+sin(2pi(f3/fs)t)+sin(2pi(f4/fs)t);

figure(1);

subplot(211);plot(t,x1);title('原信号');

y=fft(x1);

f=(0:1/N:1/2-1/N)fs;

subplot(212);plot(f,abs(y(1:N/2)));grid;xlabel('hz');%处理前频谱

wc1=2f2/fs;wc2=2f3/fs;wc3=2f4/fs;%归一化角频率,用于下面的f1

f1=[0

wc1-005

wc1

wc2

wc2+005

1];

A=[0

0

1

1

0

0];%设置带通或带阻,1为带通,0为带阻

weigh=[1

1

1

];%设置通带和阻带的权重

b=remez(60,f1,A,weigh);%传函分子

h1=freqz(b,1,M);%幅频特性

figure(2)

f=(0:1/M:1-1/M)fs/2;

subplot(211);plot(f,abs(h1));grid;title('带通');

x2=filter(b,1,x1);

S1=fft(x2);

f=(0:1/N:1/2-1/N)fs;

subplot(212);plot(f,abs(S1(1:N/2)));grid;xlabel('hz');%处理后频谱

完整的程序

%写上标题

%设计低通滤波器:

[N,Wc]=buttord()

%估算得到Butterworth低通滤波器的最小阶数N和3dB截止频率Wc

[a,b]=butter(N,Wc); %设计Butterworth低通滤波器

[h,f]=freqz(); %求数字低通滤波器的频率响应

figure(2); % 打开窗口2

subplot(221); %图形显示分割窗口

plot(f,abs(h)); %绘制Butterworth低通滤波器的幅频响应图

title(巴氏低通滤波器'');

grid; %绘制带网格的图像

sf=filter(a,b,s); %叠加函数S经过低通滤波器以后的新函数

subplot(222);

plot(t,sf); %绘制叠加函数S经过低通滤波器以后的时域图形

xlabel('时间 (seconds)');

ylabel('时间按幅度');

SF=fft(sf,256); %对叠加函数S经过低通滤波器以后的新函数进行256点的基—2快速傅立叶变换

w= %新信号角频率

subplot(223);

plot()); %绘制叠加函数S经过低通滤波器以后的频谱图

title('低通滤波后的频谱图');

%设计高通滤波器

[N,Wc]=buttord()

%估算得到Butterworth高通滤波器的最小阶数N和3dB截止频率Wc

[a,b]=butter(N,Wc,'high'); %设计Butterworth高通滤波器

[h,f]=freqz(); %求数字高通滤波器的频率响应

figure(3);

subplot(221);

plot()); %绘制Butterworth高通滤波器的幅频响应图

title('巴氏高通滤波器');

grid; %绘制带网格的图像

sf=filter(); %叠加函数S经过高通滤波器以后的新函数

subplot(222);

plot(t,sf); ;%绘制叠加函数S经过高通滤波器以后的时域图形

xlabel('Time(seconds)');

ylabel('Time waveform');

w; %新信号角频率

subplot(223);

plot()); %绘制叠加函数S经过高通滤波器以后的频谱图

title('高通滤波后的频谱图');

%设计带通滤波器

[N,Wc]=buttord([)

%估算得到Butterworth带通滤波器的最小阶数N和3dB截止频率Wc

[a,b]=butter(N,Wc); %设计Butterworth带通滤波器

[h,f]=freqz(); %求数字带通滤波器的频率响应

figure(4);

subplot(221);

plot(f,abs(h)); %绘制Butterworth带通滤波器的幅频响应图

title('butter bandpass filter');

grid; %绘制带网格的图像

sf=filter(a,b,s); %叠加函数S经过带通滤波器以后的新函数

subplot(222);

plot(t,sf); %绘制叠加函数S经过带通滤波器以后的时域图形

xlabel('Time(seconds)');

ylabel('Time waveform');

SF=fft(); %对叠加函数S经过带通滤波器以后的新函数进行256点的基—2快速傅立叶变换

w=( %新信号角频率

subplot(223);

plot(')); %绘制叠加函数S经过带通滤波器以后的频谱图

title('带通滤波后的频谱图');

MATLAB数值滤波处理方法有:

首先关于fspecial函数的定义,fspecial函数用于建立预定义的滤波算子。

其语法格式为:  

h = fspecial(type)  

h = fspecial(type,para)

其中type指定算子的类型,para指定相应的参数;

函数type的类型有:

1、'average'averaging filter为均值滤波,参数为hsize代表模板尺寸,默认值为[3,3]。

函数格式:H = fspecial('average',hsize)

2、 'disk'circular averaging filter为圆形区域均值滤波,参数为radius代表区域半径,默认值为5。

函数格式:H = fspecial('disk',radius)

3、'gaussian'Gaussian lowpass filter为高斯低通滤波,有两个参数,hsize表示模板尺寸,默认值为[3 3],sigma为滤波器的标准值,单位为像素,默认值为05。

函数格式:H = fspecial('gaussian',hsize,sigma)

4、'laplacian' filter approximating the 2-D Laplacian operatorlaplacian filter为拉普拉斯算子,参数alpha用于控制算子形状,取值范围为[0,1],默认值为02

函数格式:H = fspecial('laplacian',alpha)

5、'log'Laplacian of Gaussian filter为拉普拉斯高斯算子,有两个参数,hsize表示模板尺寸,默认值为[3 3],sigma为滤波器的标准差,单位为像素,默认值为05。

函数格式:H = fspecial('log',hsize,sigma)

6、'motion'motion filter运动模糊算子,有两个参数,表示摄像物体逆时针方向以theta角度运动了len个像素,len的默认值为9,theta的默认值为0。

函数格式:H = fspecial('motion',len,theta)

7、'prewitt'Prewitt horizontal edge-emphasizing filter用于边缘增强,大小为[3 3],无参数。

函数格式:H = fspecial('prewitt')

8、'sobel'Sobel horizontal edge-emphasizing filter用于边缘提取,无参数

函数格式:H = fspecial('sobel')the filter H: H'9、'unsharp'unsharp contrast enhancement filter为对比度增强滤波器。参数alpha用于控制滤波器的形状,范围为[0,1],默认值为02函数格式:H = fspecial('unsharp',alpha)

以上就是关于用matlab编程设计一个巴特沃斯滤波器,对声音进行去噪全部的内容,包括:用matlab编程设计一个巴特沃斯滤波器,对声音进行去噪、急求用MATLAB编写用滤波法实现SSB调制的程序(提示:使用LPF函数实现滤波)、求设计一个带通滤波器到matlab程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9321069.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-27
下一篇 2023-04-27

发表评论

登录后才能评论

评论列表(0条)

保存