求助啊 用matlab 读取一个音乐,然后再把这段音乐的低频给去除掉 该怎么编程啊
1个回答
展开全部
我没对声音处理过不知道有没有特殊的啊,我觉得过程应该是这样
[y,fs,nbits]= wavread(‘wavFile1’);这个wavefile1就是你的声音文件了,如‘a.wav'
y就是音频信号;
fs是采样频率,比如说16000就是每秒16000次;
nbit是采样精度,比如说16就是指16位精度的采样;
然后你去低频,再设计一个高通滤波器,高通滤波器很容易设计的啦。
要注意的是滤波器有FIR和IIR,前者是线性相位,后者是非线性相位。
如果非实时处理信号那就加上filtfilt函数就行了。
下面是一个基于Kaiser窗的高通滤波器设计:
function y=gaotong(signal) ;signal是信号
wp=2*1.5/360; 这个是之前的设计程序了,有些地方你自己要改掉;1.5是阻带,360是采样频率,自己改。比如,我要去掉100HZ的,你就可以选 98——100,这里的1.5用98代替,下面的3就用100代替
ws=2*3/360; 3是通带
fpts = [wp ws]; 后面的不用大改。
mag = [0 1];
dev = [0.01 0.1];
[N,Wn,beta,ftype] = kaiserord(fpts,mag,dev);
kw = kaiser(N+1,beta);
b = fir1(N,Wn,'high',kaiser(N+1,beta));
[h,omega] = freqz(b,1,512);
figure;
plot(omega/pi,20*log10(abs(h)));grid;
xlabel('\omega/\pi'); ylabel('Gain, dB');
title('FIR高通滤波器')
y=filtfilt(b,1,signal);
end
%%%%%%%%%%%%%%%%%%%%%
如果不用FIR,可以用一个IIR的滤波器
IIR滤波器又有几种,比如椭圆滤波器,切比雪夫型滤波器,贝塞尔滤波器等,其实在matlab上只是函数调用不同而已
%设计低通滤波器
%%%%%%%%%%
%巴特沃斯低通滤波器
f_N=16000; %采样率
%设计要求指标
f_p=2400;%通带截止频率
f_s=5000;%阻带截止频率
R_p=3;%通带最大衰减
R_s=25;%阻带最大衰减
Ws=f_s/(f_N/2);
Wp=f_p/(f_N/2); %计算归一化角频率
[n, Wn]=buttord(Wp,Ws,R_p,R_s); %计算阶数和截止频率
[b,a]=butter(n, Wn); %计算
freqz(b,a, 1000, 8000) %作出H(z)的幅频相频图, freqz(b,a, 计算点数, 采样率)
subplot(2,1,1); axis([0 4000 -30 3])
y=filtfilt(b,a,signal);这里是滤波了
[y,fs,nbits]= wavread(‘wavFile1’);这个wavefile1就是你的声音文件了,如‘a.wav'
y就是音频信号;
fs是采样频率,比如说16000就是每秒16000次;
nbit是采样精度,比如说16就是指16位精度的采样;
然后你去低频,再设计一个高通滤波器,高通滤波器很容易设计的啦。
要注意的是滤波器有FIR和IIR,前者是线性相位,后者是非线性相位。
如果非实时处理信号那就加上filtfilt函数就行了。
下面是一个基于Kaiser窗的高通滤波器设计:
function y=gaotong(signal) ;signal是信号
wp=2*1.5/360; 这个是之前的设计程序了,有些地方你自己要改掉;1.5是阻带,360是采样频率,自己改。比如,我要去掉100HZ的,你就可以选 98——100,这里的1.5用98代替,下面的3就用100代替
ws=2*3/360; 3是通带
fpts = [wp ws]; 后面的不用大改。
mag = [0 1];
dev = [0.01 0.1];
[N,Wn,beta,ftype] = kaiserord(fpts,mag,dev);
kw = kaiser(N+1,beta);
b = fir1(N,Wn,'high',kaiser(N+1,beta));
[h,omega] = freqz(b,1,512);
figure;
plot(omega/pi,20*log10(abs(h)));grid;
xlabel('\omega/\pi'); ylabel('Gain, dB');
title('FIR高通滤波器')
y=filtfilt(b,1,signal);
end
%%%%%%%%%%%%%%%%%%%%%
如果不用FIR,可以用一个IIR的滤波器
IIR滤波器又有几种,比如椭圆滤波器,切比雪夫型滤波器,贝塞尔滤波器等,其实在matlab上只是函数调用不同而已
%设计低通滤波器
%%%%%%%%%%
%巴特沃斯低通滤波器
f_N=16000; %采样率
%设计要求指标
f_p=2400;%通带截止频率
f_s=5000;%阻带截止频率
R_p=3;%通带最大衰减
R_s=25;%阻带最大衰减
Ws=f_s/(f_N/2);
Wp=f_p/(f_N/2); %计算归一化角频率
[n, Wn]=buttord(Wp,Ws,R_p,R_s); %计算阶数和截止频率
[b,a]=butter(n, Wn); %计算
freqz(b,a, 1000, 8000) %作出H(z)的幅频相频图, freqz(b,a, 计算点数, 采样率)
subplot(2,1,1); axis([0 4000 -30 3])
y=filtfilt(b,a,signal);这里是滤波了
追问
太感谢啦
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询