【Matlab5】傅里叶分析



2013年09月16日    Author:Guofei

文章归类: Matlab    文章编号: 11003

版权声明:本文作者是郭飞。转载随意,但需要标明原文链接,并通知本人
原文链接:https://www.guofei.site/2013/09/16/matlab5.html


3.8 傅里叶分析

fft一维傅里叶变换
fft2二维傅里叶变换
fftn  N维傅立叶变换

逆变换:
ifft
ifft2
iffn


abs幅值
angle相位角
unwrap增减2*pi使相位角差不超过pi

傅里叶变换(连续情况用符号计算)
F=fourier(f)
F=fourier(f,v)%F(v)
F=fourier(f,u,v)%F(v),f(u)

案例:

syms x k
f=cos(x)
f1=fourier(f)
f2=int(f.*exp(k.*t))

一套傅里叶代码:

%fft傅里叶样板
%%
%生成数据
clear
close all
t=0:0.01:200;
y=cos(50*2*pi*t)+0.5*cos(30*2*pi*t)+0.5*cos(70*2*pi*t);

%%
%傅里叶分析
nf=500;%采样点
fy=fft(y,nf);
mfy=abs(fy);


mfy=mfy/nf;ft=100*[1:nf]/nf;%100是采样频率  nf是傅里叶的采样点

%%
%画图:频域、相位角
subplot(2,2,1)
plot(t,y)
subplot(2,2,2)
plot(ft,mfy)%幅值
subplot(2,2,3)
afy=angle(fy);
uafy=unwrap(afy);%相位角
plot(ft,afy,'r*',ft,afy,'r')

subplot(2,2,4)
plot(ft,uafy,'go',ft,uafy,'g')

一套小波分析的代码:

%小波分析
%%
%生成信号,并展示
clear;clc;close all;
f1=5;f2=10;%频率1,2
fs=2*(f1+f2);
Ts=1/fs;%采样间隔
N=12%采样点数
n=1:N
y=sin(2*pi*f1*n*Ts)+sin(2*pi*f2*n*Ts);
figure(1)
subplot(2,1,1)
plot(y)
title('两个正弦信号')
subplot(2,1,2)
stem(abs(fft(y)))
title('两信号频谱')

%%
%定义滤波器
h=wfilters('db6','l');%低通
g=wfilters('db6','h');%高通
h=[h,zeros(1,N-length(h))];
g=[g,zeros(1,N-length(g))];%补零
figure(2)
subplot(2,1,1)
stem(abs(fft(h)))
title('低通滤波器')
subplot(2,1,2)
stem(abs(fft(g)))
title('高通滤波器')

%%
%Mallet分解算法
figure(3)
sig1=ifft(fft(y).*fft(h));%低通(低频分量)
sig2=ifft(fft(y).*fft(g));%高通(高频分量)
subplot(2,2,1)
plot(real(sig1));
title('分解信号1')
subplot(2,2,3)
plot(real(sig2))
title('分解信号2')
subplot(2,2,2)
stem(abs(fft(sig1)))
title('分解信号1频谱')
subplot(2,2,4)
stem(abs(fft(sig2)))
title('分解信号2频谱')
%%
%Mallet重构算法
sig1=dyaddown(sig1);%2抽取
sig2=dyaddown(sig2);%2抽取
sig1=dyadup(sig1);%2插值
sig2=dyadup(sig2);%2插值
sig1=sig1(1,[1:N]);%去掉最后一个0
sig2=sig2(1,[1:N]);%去掉最后一个0
hr=h(end:-1:1);%重构低通
gr=g(end:-1:1)%重构高通
hr=circshift(hr',1)';%位置调整圆周右移一格
gr=circshift(gr',1)';%位置调整圆周右移一格
sig1=ifft(fft(hr).*fft(sig1));%低频
sig2=ifft(fft(gr).*fft(sig2));%高频
sig=sig1+sig2;%源信号

figure(4)
subplot(2,2,1)
plot(real(sig1))
title('重构低频信号')
subplot(2,2,3)
plot(real(sig2))
title('重构高频信号')
subplot(2,2,2)
stem(abs(fft(sig1)));
title('重构低频信号频谱')
subplot(2,2,4)
stem(abs(fft(sig1)));
title('重构高频信号频谱')
figure(5)
plot(real(sig),'r')
hold on
plot(y)
legend('重构信号','原始信号')
title('重构信号与原始信号比较')

书推荐

  1. 【强烈推荐】matlab与数学试验 国防工业出版社 全面介绍了matlab的各种应用,值得注意的是:数值积分试验,微分方程试验,随机模拟实验,加密方法试验,分形模拟试验,遗传算法试验
  2. 傅里叶变换及其应用 布雷斯威尔 西安交通大学出版社 好书!包含拉普拉斯变换,扩散方程,成像技术等,值得看!!
  3. 数理统计及其在数学建模中的实践(done)
  4. matlab入门到精通:符号计算,电路模拟,simulink
  5. 精通matlab,计算篇(插值,傅立叶分析,偏微分方程),计算实例
  6. 数理统计与数据分析
  7. matlab实用指南(上下)电子工业出版社 书比较薄,比较深

您的支持将鼓励我继续创作!