关于用MATLAB设计确定信号的频谱分析和滤波
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于用MATLAB设计确定信号的频谱分析和滤波相关的知识,希望对你有一定的参考价值。
刚学的MATLAB,自己还不会设计程序,希望懂的大虾帮忙下。(也可QQ联系)具体的步骤要求如下,如果所给程序符合,,还会给予附加分数。
(1)确定信号的频谱分析
用MATLAB生成信号x(t)=e-t并进行FFT分析,显示|X(k)|和Ф(k),并显示信号的离散幅频图和相频图。假设频率分辨率要求F<=4Hz,信号的最高频率fh限制为60Hz。
(2)正弦信号生成与抽样
对任意两个不同频率的正弦信号进行叠加,生成信号取样作出时域波形图并存入文件。 [思考]取样周期如何确定?取多少点?
(3)信号叠加
生成方波和三角波信号,叠加两个信号,作出时域波形图及频谱特性图。
(4)设计数字滤波器并画出频率响应
根据方波和三角波信号的频谱特点得到性能指标,由性能指标设计两个数字滤波器。在MATLAB中,可以利用函数fir1设计FIR滤波器,利用函数butte、cheby1和ellip设计IIR滤波器;最后,利用MATLAB中的函数freqz画出各滤波器的频率响应。
(5)用滤波器对信号进行滤波
用自己设计的滤波器对(3)中叠加的信号进行滤波。在MATLAB中,FIR滤波器利用函数fftfilt对信号进行滤波,IIR滤波器利用函数filter对信号进行滤波。
(6)分析得到信号的频谱
对滤波后的信号进行fft快速傅里叶变换,得到信号的频谱特性,与原始信号进行比较,并画出信号的时域波形和频谱。
各位老大就是要用MATLAB啊 张专家能不能把例子的连接发出来噢
t = 0:0.001:0.6;
x = sin(2*pi*50*t)+sin(2*pi*120*t);
y = x + 2*randn(size(t));
plot(1000*t(1:50),y(1:50))
title('Signal Corrupted with Zero-Mean Random Noise')
xlabel('time (milliseconds)')
Y = fft(y,512);
Pyy = Y.* conj(Y) / 512;
f = 1000*(0:256)/512;
plot(f,Pyy(1:257))
title('Frequency content of y')
xlabel('frequency (Hz)')
用matlab设计一个滤波器
数字滤波器设计及在语音信号分析中的应用。
步骤:
1、语音信号采集
录制一段课程设计学生的语音信号并保存为文件,要求长度不小于10秒,并对录制的信号进行采样;录制时可以使用Windows自带的录音机,或者使用其它专业的录音软件,录制时需要配备录音硬件(如麦克风),为便于比较,需要在安静、干扰小的环境下录音。
2、语音信号分析
使用MATLAB绘出采样后的语音信号的时域波形和频谱图。根据频谱图求出其带宽,并说明语音信号的采样频率不能低于多少赫兹。
3、含噪语音信号合成
在MATLAB软件平台下,给原始的语音信号叠加上噪声,噪声类型分为如下几种:(1)白噪声;(2)单频噪色(正弦干扰);(3)多频噪声(多正弦干扰);(4)其它干扰,可设置为低频、高频、带限噪声,或Chirp干扰、冲激干扰。绘出叠加噪声后的语音信号时域和频谱图,在视觉上与原始语音信号图形对比,也可通过Windows播放软件从听觉上进行对比,分析并体会含噪语音信号频谱和时域波形的改变。
4、数字滤波器设计及滤波,完成以下题目中的一个
给定滤波器的规一化性能指标(参考指标,实际中依据每个同学所叠加噪声情况而定)例如:通带截止频率wp=0.25*pi, 阻通带截止频率ws=0.3*pi; 通带最大衰减Rp=1 dB; 阻带最小衰减Rs=15 dB,每个题目至少设计出5个用不同方法的不同类型滤波器。
题目(1):采用窗函数法与等波纹法分别设计各型FIR滤波器(低通、高通、带通、带阻中的至少3种类型)来对叠加噪声前后的语音信号进行滤波处理,绘出滤波器的频域响应,绘出滤波后信号的时域波形和频谱,并对滤波前后的信号进行对比,分析信号的变化;在相同的性能指标下比较各方法的滤波效果,并从理论上进行分析(或解释)。
题目(2):采用双线性变换法与脉冲响应不变法,分别利用不同的原型低通滤波器(Butterworth型与切比雪夫I型)来设计各型IIR滤波器(低通、高通、带通、带阻中的至少3种类型),绘出滤波器的频域响应;并用这些数字滤波器对含噪语音信号分别进行滤波处理,比较不同方法下设计出来的数字滤波器的滤波效果,并从理论上进行分析(或解释)。
5、回放语音信号
对滤波后的语音信号进行回放,感觉滤波前后语音信号的变化。
6、设计一个语音信号分析与处理系统界面(选作)
利用MATLAB的界面设计功能,设计一个MATLAB环境下的人机交互界面,完成上述滤波器的设计及滤波过程,要求能够接收输入的设计参数,查看设计结果及滤波结果。我的邮箱是471147021@QQ.com 哪位高手知道这方面的问题,给我点提示嘛,或者将答案发到我的邮箱里,谢谢了!!!
绝对正确的代码:程序1:
fs=22050; %语音信号采样频率为22050
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'); 参考技术A 太多了,其实网上这方面现成的程序很多,大概如下:
1:使用wavrecord函数
2:使用awgn等函数
3:使用fdatool可以设计滤波器
5:wavplay
6: guide
以上是关于关于用MATLAB设计确定信号的频谱分析和滤波的主要内容,如果未能解决你的问题,请参考以下文章