使用MATLAB进行傅里叶变换

1、定义

T=1;% 周期0-1
N=20;% 最大谐波
k=-N:N;% -20:20——-20表示a_(20)e^(j*20*w0*t)
N1=length(k);%N1=41
% ceil(N1/2)=21%即21是N1的中位数t=linspace(0,T,100);
Nt=length(t);
tt=linspace(-4*T,4*T,1024);
Ntt=length(tt);

2、原函数

w0=2*pi/T;
% 0-T
xt=(t>=T/4).* 1.0; 
fig10=figure(10);
fig10.Name='原函数';
plot(t,xt);
axis([t(1) t(Nt) min(xt)-0.05 max(xt)+0.05 ]);

3、原函数的周期延拓

N2=length(tt);
xx=zeros(1,N2);%size(a)=1*41,用于记录傅里叶级数的系数for n=1:N2for numT=-4:3if (T/4+numT*T)<tt(n) && tt(n)<(T+numT*T)xx(n)=1;breakendend
end
fig20=figure(20);
fig20.Name='原函数的周期延拓';
plot(tt,xx);
axis([tt(1) tt(Ntt) min(xx)-0.05 max(xx)+0.05 ]);
grid on

 

4、使用integral进行傅里叶变换

a=zeros(1,N1);%size(a)=1*41,用于记录傅里叶级数的系数for n=1:N1
%     a(n)=integral(@(x) signal0(x,k(n),T),0,T); %1a(n)=integral(@(x) signal0(x,k(n),T),0,T,'RelTol',0,'AbsTol',1e-12);% %解决《警告: 最小步长已快达到 x = 0.25。可能具有奇异性,或者容差可能对于此问题太小。 》% RelTol - 相对误差容限% AbsTol - 绝对误差容限
endA=abs(a); %计算傅里叶变换的幅值
fig30=figure(30);
fig30.Name='傅里叶分解图';
subplot(3,1,1);stem(k,A);ylabel("a(k)幅值");
axis([k(1) k(N1) min(A)-0.05 max(A)+0.05]);% axis([ x起点 x终点 y起点 y终点]);subplot(3,1,2); stem(k,real(a));ylabel('a(k)实部'); % real(F)
axis([k(1) k(N1) min(real(a))-0.05 max(real(a))+0.05 ]);subplot(3,1,3);stem(k,imag(a));ylabel('a(k)虚部');  % imag(F)
xlabel('k'); 
axis([k(1) k(N1) min(imag(a))-0.05 max(imag(a))+0.05 ]);

5、谐波分量

%基波分量
fundamental_component=a(ceil(N1/2))*exp(1i*0*w0*tt);
%一次谐波分量
% first_harmonic_component=a(ceil(N1/2)-1)*exp(-1i*1*w0*tt)+a(ceil(N1/2)+1)*exp(1i*1*w0*tt);
har=1;
first_harmonic_component=a(ceil(N1/2)-har)*exp(-1i*har*w0*tt)+a(ceil(N1/2)+har)*exp(1i*har*w0*tt);
%二次谐波分量
% second_harmonic_component=a(ceil(N/2)-2)*exp(-1i*2*w0*tt)+a(ceil(N/2)+2)*exp(1i*2*w0*tt);
har=2;
second_harmonic_component=a(ceil(N1/2)-har)*exp(-1i*har*w0*tt)+a(ceil(N1/2)+har)*exp(1i*har*w0*tt);
%三次谐波分量
har=3;
third_harmonic_component=a(ceil(N1/2)-har)*exp(-1i*har*w0*tt)+a(ceil(N1/2)+har)*exp(1i*har*w0*tt);fig40=figure(40);
fig40.Name='傅里叶分解图';
subplot(3,1,1);
plot(tt,fundamental_component);
ylabel('基波分量');
subplot(3,1,2); 
plot(tt,fundamental_component+first_harmonic_component+second_harmonic_component);
ylabel(sprintf('%d%s',2,'次谐波分量合成图'));
subplot(3,1,3);
plot(tt,fundamental_component+first_harmonic_component+second_harmonic_component+third_harmonic_component)
ylabel(sprintf('%d%s',3,'次谐波分量合成图'));

6、任意次谐波的傅里叶级数合成

xiebo=8;% 计算前xiebo次谐波分量的和
% tt=linspace(-4*T,4*T,1024);
fx=a(ceil(N1/2))*exp(1i*0*w0*tt);
for n=1:xiebofx=fx+a(ceil(N1/2)-n)*exp(-1i*n*w0*tt)+a(ceil(N1/2)+n)*exp(1i*n*w0*tt);% n=1——第20次谐波分量% a(1)*exp(1i*(1-20-1)*w0*tt)=a(1)*exp(1i*(-20)*w0*tt)% n=N1=41——第20次谐波分量% a(41)*exp(1i*(41-20-1)*w0*tt)=a(41)*exp(1i*(20)*w0*tt)
end
fig41=figure(41);
fig41.Name=sprintf('%d%s',xiebo,'次谐波分量合成图');
% f3=figure('Name','傅里叶合成图','IntegerHandle','on','Number',100)
plot(tt,fx)
grid on

7、20次谐波的傅里叶级数合成

% tt=linspace(-4*T,4*T,1024);
fx=0;
for n=1:N1fx=fx+a(n)*exp(1i*(n-N-1)*w0*tt);% n=1——第20次谐波分量% a(1)*exp(1i*(1-20-1)*w0*tt)=a(1)*exp(1i*(-20)*w0*tt)% n=N1=41——第20次谐波分量% a(41)*exp(1i*(41-20-1)*w0*tt)=a(41)*exp(1i*(20)*w0*tt)
end
fig42=figure(42);
fig42.Name='傅里叶合成图';
% f3=figure('Name','傅里叶合成图','IntegerHandle','on','Number',100)
plot(tt,fx)
grid on

8、局部函数——signal0

%程序signal0.m:定义求傅里叶级数的系数的被积函数: y=(1/T)*x(t).*exp(-j*(2*pi/T)*k*t)
function y=signal0(t,k,T) %T为信号周期,t为时间变量,k为k次谐波
x=(t>=T/4).* 1.0; 
% 定义占空比为25%的非对称周期方波for one period=T
% 对称周期三角形可定义:x=(abs(t)<=T/4). * (1-abs(t))
% 占空比为50%的对称周期方波可定义:x=(abs(t)<=T/4). *1.0y=(1/T).*x.*exp(-1i*k*(2*pi/T)*t);
end

傅里叶分析和滤波- MATLAB & Simulink- MathWorks 中国

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/129599.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Git知识整理(持续更新)

一、跨系统配置之CSLF和LF Windows系统中&#xff0c;从第n行到第n1行&#xff0c;用的是回车\r加换行\n&#xff0c;即Carriage Return和Line Feed。 Mac和Linux系统中&#xff0c;从第n行到第n1行&#xff0c;只用了换行\n&#xff0c;即Line Feed。 git有CRLF机制&#xf…

数学分析:含参变量的积分

同样很多收敛性的证明不是重点&#xff0c;但里面的知识还是需要适当掌握&#xff0c;知道中间的大致思考和解决路径即可。 本质还是极限的可交换性&#xff0c;求导可以换到积分里面去操作。 这里要注意变量的区别&#xff0c;首先积分的被积变量是x&#xff0c;但是函数的变量…

机器学习笔记(二)

过拟合 如下图左边,模型出现了过拟合现象 为了解决过拟合现象, 其中一个做法是多收集数据,如右图。 第二种做法是减少模型的特征数量,即x 第三种做法是正则化 正则化就是减少x前面的参数 w的数值, 不用消除x 正则化的梯度下降如下, 因为只是缩小了w的值,而 b的值保持不变 …

Transformer预测 | Pytorch实现基于Transformer 的锂电池寿命预测(CALCE数据集)

文章目录 效果一览文章概述模型描述程序设计参考资料效果一览 文章概述 Pytorch实现基于Transformer 的锂电池寿命预测,环境为pytorch 1.8.0,pandas 0.24.2 随着充放电次数的增加,锂电池的性能逐渐下降。电池的性能可以用容量来表示,故寿命预测 (RUL) 可以定义如下: SOH(t…

ASP.NET Core 开发 Web API

2. Web Api 的创建与Http类型的介绍 2.1 ASP.Net Core Web API项目的创建 1.创建ASP.NET Core Web API项目 从“文件”菜单中选择“新建”“项目”。 在搜索框中输入“Web API”。 选择“ASP.NET Core Web API”模板&#xff0c;然后选择“下一步”。 在“配置新项目”对话框中…

FreeRTOS自我救赎2之基本工程建立

System Core 1.System Core >SYS 2.System Core >RCC 3.System Core >NVIC Middleware Middleware >FREERTOS Clock configuration Project Manager 在编译生成的代码前需要找一个与芯片对应的启动文件&#xff0c;启动文件添加进来&#xff0c;编译就没问题了

git与github的交互(文件与文件夹的上传)

git与github的交互&#xff08;文件与文件夹的上传&#xff09; 准备&#xff1a;gitHub账号&#xff08;创建一个新项目&#xff09;与Git软件的安装 一&#xff1a;开启公钥SSH登录&#xff08;之前配置过就跳过&#xff09; 1.安装SSH 在本地新创建文件夹负责装载项目&a…

为SecureCRT配置密钥验证,实现免密登录远程Linux服务器

本实例以普通用户zhangsan远程连接Linux服务器为例。 一、生成密钥对 在Linux服务器上为普通用户zhangsan远程连接服务器制作密钥对&#xff0c;执行命令如下&#xff1a; [rootServer ~]# su - zhangsan #切换到zhangsan身份登录 [zhangsanServer ~]$ ssh-keygen #生成…

【LeetCode热题100】--230.二叉搜索树中第K小的元素

230.二叉搜索树中第K小的元素 给定一个二叉搜索树的根节点 root &#xff0c;和一个整数 k &#xff0c;请你设计一个算法查找其中第 k 个最小元素&#xff08;从 1 开始计数&#xff09;。 二叉搜索树的中序遍历是有序的&#xff0c;所有先得到其有序序列&#xff0c;然后在取…

以太网基础学习(一)——以太网概述

一、以太网概述 以太网(Ethernet)指的是由 Xerox公司创建并由Xerox、Intel和 DEC公司联合开发的基带局域网规范&#xff0c;通用的以太网标准于1980年9月30日出台&#xff0c;是当今现有局域网采用的最通用的通信协议标准&#xff08;是局域网的一种&#xff09;。 以太网是一种…

【LeetCode】剑指 Offer Ⅱ 第6章:栈(6道题) -- Java Version

题库链接&#xff1a;https://leetcode.cn/problem-list/e8X3pBZi/ 类型题目解决方案栈的应用剑指 Offer II 036. 后缀表达式模拟 栈 ⭐剑指 Offer II 037. 小行星碰撞分类讨论 栈 ⭐单调栈剑指 Offer II 038. 每日温度单调栈 ⭐剑指 Offer II 039. 直方图最大矩形面积单调栈…

leetCode 1143.最长公共子序列 动态规划 + 滚动数组

1143. 最长公共子序列 - 力扣&#xff08;LeetCode&#xff09; 给定两个字符串 text1 和 text2&#xff0c;返回这两个字符串的最长 公共子序列 的长度。如果不存在 公共子序列 &#xff0c;返回 0 。 一个字符串的 子序列 是指这样一个新的字符串&#xff1a;它是由原字符串…