logo资料库

应用matlab对信号进行频谱分析和滤波.doc

第1页 / 共8页
第2页 / 共8页
第3页 / 共8页
第4页 / 共8页
第5页 / 共8页
第6页 / 共8页
第7页 / 共8页
第8页 / 共8页
资料共8页,全文预览结束
数字信号处理设计报告 课题名称 应用 MATLAB 对信号进行频谱分析及滤波 姓 学 名 号 毛路生 B08040827 院、系 电气工程与自动化 专 业 自动化 指导教师 宋丽君 1
应用 MATLAB 对信号进行频谱分析及滤波 一、 设计目的 用 MATLAB 语言进行编程,绘出所求波形,并且运用 FFT 求对连续信号进行分 析。 二、设计要求 1、用 Matlab 产生正弦波,矩形波,并显示各自的时域波形图; 2、进行 FFT 变换,显示各自频谱图,其中采样率、频率、数据长度自选,要 求注明; 3、绘制三种信号的均方根图谱; 4、用 IFFT 回复信号,并显示恢复的正弦信号时域波形图。 三、系统原理 用 FFT 对信号作频谱分析是学习数字信号处理的重要内容。经常需要进行频 谱分析的信号是模拟信号和时域离散信号。频谱分辨率直接和 FFT 的变换区间 N 有关,因为 FFT 能够实现频率分辨率是 2π/N。 x(n)是一个长度为 M 的有限长序列,则 x(n)的 N 点离散傅立叶变换为: 1 N  nx ( n  0 kn ) NW NW  j 2 N  e ,k=0,1,...,N-1 X(k)=DFT[x(n)]= 逆变换:x(n) =IDFT[X(k)]= 1 X N  1  nN  0 )(  NWk kn ,k=0,1,...,N-1 但 FFT 是一种比 DFT 更加快速的一种算法,提高了 DFT 的运算速率,为数字信号 处理技术应用于各种信号处理创造了条件,大大提高了数字信号处理技术的发 展。本实验就是采用 FFT,IFFT 对信号进行谱分析。 四、程序设计 fs=input('please input the fs:');%设定采样频率 N=input('please input the N:');%设定数据长度 t=0:0.001:1; f=100;%设定正弦信号频率 %生成正弦信号 2
x=sin(2*pi*f*t); figure(1); subplot(211); plot(t,x);%作正弦信号的时域波形 axis([0,0.1,-1,1]); title('正弦信号时域波形'); z=square(50*t); subplot(212) plot(t,z) axis([0,1,-2,2]); title('方波信号时域波形');grid; %进行FFT变换并做频谱图 y=fft(x,N);%进行fft变换 mag=abs(y);%求幅值 f=(0:N-1)*fs/N;%横坐标频率的表达式为f=(0:M-1)*Fs/M; figure(2); subplot(211); plot(f,mag);%做频谱图 axis([0,1000,0,200]); title('正弦信号幅频谱图'); y1=fft(z,N);%进行fft变换 mag=abs(y1);%求幅值 f=(0:N-1)*fs/N;%横坐标频率的表达式为f=(0:M-1)*Fs/M; subplot(212); plot(f,mag);%做频谱图 axis([0,1000,0,200]); title('方波信号幅频谱图');grid; %求功率谱 sq=abs(y); power=sq.^2; figure(3) subplot(211); plot(f,power); title('正弦信号功率谱');grid; sq1=abs(y1); power1=sq1.^2; subplot(212); plot(f,power1); 3
title('方波信号功率谱');grid; %用IFFT恢复原始信号 xifft=ifft(y); magx=real(xifft); ti=[0:length(xifft)-1]/fs; figure(4); subplot(211); plot(ti,magx); axis([0,0.1,-1,1]); title('通过IFFT转换的正弦信号波形'); zifft=ifft(y1); magz=real(zifft); ti1=[0:length(zifft)-1]/fs; subplot(212); plot(ti1,magz); title('通过IFFT转换的方波信号波形');grid; 五、仿真结果及分析 1 0.5 0 -0.5 -1 0 2 1 0 -1 -2 0 正 弦 信 号 时 域 波 形 0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.1 方 波 信 号 时 域 波 形 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1 由图可以看出正弦波周期 T=0.01,采样点 N=1024.程序为: t=0:0.001:1;f=100;%设定正弦信号频率 4
x=sin(2*pi*f*t);figure(1); subplot(211); plot(t,x);%作正弦信号的时域波形 axis([0,0.1,-1,1]); title('正弦信号时域波形'); z=square(50*t); subplot(212) plot(t,z) axis([0,1,-2,2]); title('方波信号时域波形');grid; 200 150 100 50 0 0 200 150 100 50 0 0 正 弦 信 号 幅 频 谱 图 100 200 300 400 500 600 700 800 900 1000 方 波 信 号 幅 频 谱 图 100 200 300 400 500 600 700 800 900 1000 2、对正弦波、方波信号进行FFT变换程序: y=fft(x,N);%进行fft变换 mag=abs(y);%求幅值 f=(0:N-1)*fs/N;%横坐标频率的表达式为f=(0:M-1)*Fs/M; figure(2); subplot(211); plot(f,mag);%做频谱图 axis([0,1000,0,200]); title('正弦信号幅频谱图'); y1=fft(z,N);%进行fft变换 5
mag=abs(y1);%求幅值 f=(0:N-1)*fs/N;%横坐标频率的表达式为f=(0:M-1)*Fs/M; subplot(212); plot(f,mag);%做频谱图 axis([0,1000,0,200]); title('方波信号幅频谱图');grid; x 104 正 弦 信 号 功 率 谱 15 10 5 0 0 50 100 150 200 250 300 350 400 450 500 x 105 方 波 信 号 功 率 谱 0 50 100 150 200 250 300 350 400 450 500 4 3 2 1 0 正弦信号、方波信号功率谱程序: sq=abs(y); power=sq.^2; figure(3) subplot(211); plot(f,power); title('正弦信号功率谱');grid; sq1=abs(y1); power1=sq1.^2; subplot(212); plot(f,power1); title('方波信号功率谱');grid; 6
1 0.5 0 -0.5 -1 0 2 1 0 -1 -2 0 通 过 IFFT转 换 的 正 弦 信 号 波 形 0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.1 通 过 IFFT转 换 的 方 波 信 号 波 形 0.5 1 1.5 2 2.5 对两个信号进行恢复程序: xifft=ifft(y); magx=real(xifft); ti=[0:length(xifft)-1]/fs; figure(4); subplot(211); plot(ti,magx); axis([0,0.1,-1,1]); title('通过IFFT转换的正弦信号波形'); zifft=ifft(y1); magz=real(zifft); ti1=[0:length(zifft)-1]/fs; subplot(212); plot(ti1,magz); title('通过IFFT转换的方波信号波形');grid; 当采样频率小于2fc或N小于M时恢复信号就会出现失真,频谱会发生馄叠。 7
六、设计总结: 通过对本次应用 MATLAB 语言对信号进行频谱分析及滤波设计,使更加系统 的理解了 FFT,IFFT 功能,对采样频谱分析及恢复功能掌握有了进一步提高,如 果序列 x(n)主值序列长度为 M,最高频率为 fc 只有当频率采样点 N≥M,采样频 率 fs≥2fc 时,才有 x(n)=IDFT[X(k)]=x(n)可有频域采样 X(k)恢复原序列 x(n), 否则产生时域混叠失真现象。 8
分享到:
收藏