老伙计,请登录,欢迎回家
您需要 登录 才可以下载或查看,没有帐号?注册
x
Matlab编程实现FFT变换及频谱分析的程序代码(喜欢进行电磁兼容仿真分析的朋友可以借用) 内容 1.用Matlab产生正弦波,矩形波,以及白噪声信号,并显示各自时域波形图 2.进行FFT变换,显示各自频谱图,其中采样率,频率、数据长度自选 3.做出上述三种信号的均方根图谱,功率图谱,以及对数均方根图谱 4.用IFFT傅立叶反变换恢复信号,并显示恢复的正弦信号时域波形图 源程序 %*************************************************************************% % FFT实践及频谱分析 % %*************************************************************************% %*************************************************************************% %***************1.正弦波****************% fs=100;%设定采样频率 N=128; n=0:N-1; t=n/fs; f0=10;%设定正弦信号频率 %生成正弦信号 x=sin(2*pi*f0*t); figure(1); subplot(231); plot(t,x);%作正弦信号的时域波形 xlabel('t'); ylabel('y'); title('正弦信号y=2*pi*10t时域波形'); grid; %进行FFT变换并做频谱图 y=fft(x,N);%进行fft变换 mag=abs(y);%求幅值 f=(0:length(y)-1)'*fs/length(y);%进行对应的频率转换 figure(1); subplot(232); plot(f,mag);%做频谱图 axis([0,100,0,80]); xlabel('频率(Hz)'); ylabel('幅值'); title('正弦信号y=2*pi*10t幅频谱图N=128'); grid; %求均方根谱 sq=abs(y); figure(1); subplot(233); plot(f,sq); xlabel('频率(Hz)'); ylabel('均方根谱'); title('正弦信号y=2*pi*10t均方根谱'); grid; %求功率谱 power=sq.^2; figure(1); subplot(234); plot(f,power); xlabel('频率(Hz)'); ylabel('功率谱'); title('正弦信号y=2*pi*10t功率谱'); grid; %求对数谱 ln=log(sq); figure(1); subplot(235); plot(f,ln); xlabel('频率(Hz)'); ylabel('对数谱'); title('正弦信号y=2*pi*10t对数谱'); grid; %用IFFT恢复原始信号 xifft=ifft(y); magx=real(xifft); ti=[0:length(xifft)-1]/fs; figure(1); subplot(236); plot(ti,magx); xlabel('t'); ylabel('y'); title('通过IFFT转换的正弦信号波形'); grid; %****************2.矩形波****************% fs=10;%设定采样频率 t=-5:0.1:5; x=rectpuls(t,2); x=x(1:99); figure(2); subplot(231); plot(t(1:99),x);%作矩形波的时域波形 xlabel('t'); ylabel('y'); title('矩形波时域波形'); grid; %进行FFT变换并做频谱图 y=fft(x);%进行fft变换 mag=abs(y);%求幅值 f=(0:length(y)-1)'*fs/length(y);%进行对应的频率转换 figure(2); subplot(232); plot(f,mag);%做频谱图 xlabel('频率(Hz)'); ylabel('幅值'); title('矩形波幅频谱图'); grid; %求均方根谱 sq=abs(y); figure(2); subplot(233); plot(f,sq); xlabel('频率(Hz)'); ylabel('均方根谱'); title('矩形波均方根谱'); grid; %求功率谱 power=sq.^2; figure(2); subplot(234); plot(f,power); xlabel('频率(Hz)'); ylabel('功率谱'); title('矩形波功率谱'); grid; %求对数谱 ln=log(sq); figure(2); subplot(235); plot(f,ln); xlabel('频率(Hz)'); ylabel('对数谱'); title('矩形波对数谱'); grid; %用IFFT恢复原始信号 xifft=ifft(y); magx=real(xifft); ti=[0:length(xifft)-1]/fs; figure(2); subplot(236); plot(ti,magx); xlabel('t'); ylabel('y'); title('通过IFFT转换的矩形波波形'); grid; %****************3.白噪声****************% fs=10;%设定采样频率 t=-5:0.1:5; x=zeros(1,100); x(50)=100000; figure(3); subplot(231); plot(t(1:100),x);%作白噪声的时域波形 xlabel('t'); ylabel('y'); title('白噪声时域波形'); grid; %进行FFT变换并做频谱图 y=fft(x);%进行fft变换 mag=abs(y);%求幅值 f=(0:length(y)-1)'*fs/length(y);%进行对应的频率转换 figure(3); subplot(232); plot(f,mag);%做频谱图 xlabel('频率(Hz)'); ylabel('幅值'); title('白噪声幅频谱图'); grid; %求均方根谱 sq=abs(y); figure(3); subplot(233); plot(f,sq); xlabel('频率(Hz)'); ylabel('均方根谱'); title('白噪声均方根谱'); grid; %求功率谱 power=sq.^2; figure(3); subplot(234); plot(f,power); xlabel('频率(Hz)'); ylabel('功率谱'); title('白噪声功率谱'); grid; %求对数谱 ln=log(sq); figure(3); subplot(235); plot(f,ln); xlabel('频率(Hz)'); ylabel('对数谱'); title('白噪声对数谱'); grid; %用IFFT恢复原始信号 xifft=ifft(y); magx=real(xifft); ti=[0:length(xifft)-1]/fs; figure(3); subplot(236); plot(ti,magx); xlabel('t'); ylabel('y'); title('通过IFFT转换的白噪声波形'); grid; |