精华内容
下载资源
问答
  • 六度空间理论的意义
    千次阅读
    2021-11-19 21:11:22

    一、实验题目

    六度空间理论是一个数学领域的猜想,又称为六度分割理论 (Six Degrees of Separation)。六度空间理论是20世纪60年代由美国的心理学家米格兰姆(Stanley Milgram) 提出的,理论指出:你和任何一个陌生人之间所间隔的人不会超过6个,也就是说,最多通过6个中间人你就能够认识任何一个陌生人。

    1.案例分析

    六度空间理论的数学模型属于图结构,我们把六度空间理论中的人际关系网络图抽象成一个不带权值的无向图G, 用图G 中的一个顶点表示一个人,两个人 ”认识” 与否,用代表这两个人的顶点之间是否有一条边来表示。这样六度空间理论问题便可描述为:在图 G 中任意两个顶点之间都存在一条路径长度不超过7的路径。 在实际验证过程中,可以通过测试满足要求的数据达到一定的百分比(比如 99.5%) 来进行验证。 这样我们便把待验证六度空间理论问题描述为:在图G 中,任意一个顶点到其余 99.5%以上的顶点都存在一条路径长度不超过 7 的路径。比较简单的一种验证方案是:利用广度优先搜索方法, 对任意一个顶点,

    更多相关内容
  • 机械臂建模分析:https://blog.csdn.net/Kalenee/article/details/81990130MoveIt规划下的关节空间运动分析:http://www.guyuehome.com/752一、简介在ROS平台下使用MoveIt进行机械臂控制时,默认调用...

    机械臂建模分析:https://blog.csdn.net/Kalenee/article/details/81990130

    MoveIt规划下的关节空间运动分析:http://www.guyuehome.com/752

    一、简介

    在ROS平台下使用MoveIt进行机械臂控制时,默认调用AddTimeParameterization模块完成轨迹的运动规划,输出结果为各关节在对应时间帧下的关节位置与角速度,并没有机械臂末端的运动信息,为此需要通过rosbag完成运动规划的记录并结合Matlab完成操作空间的运动分析。

    二、雅可比矩阵

    2.1 数学意义

    数学上雅可比矩阵(Jacobian matrix)是一个多元函数的偏导矩阵。设有六个拥有六个变量函数如下:

    2ed5853a2b149a8cf29ffff4f5632fa3.png

    对六个函数微分后得:

    7cbcaf9fd770ff2c18991cd7bb62ad76.png

    9de9e7825347428bf68cfe356bd96c8c.png

    对于六轴机器人,其雅可比矩阵J(q)是

    65d4889ecb0aa9755c26ac6c1b26b01c.gif阶矩阵,其中前3行代表对末端线速度V的传递比,后3行代表末端角速度W的传递比,同时矩阵每一列代表对应的关节速度对于末端速度和角速度的传递比, 其中

    ba456fbdfe83e118ae0851df7bf3450f.gif为对应关节n的单位关节速度,

    b3e02b39a62c0ad463660620e87d7d6f.gif

    2829190d4ef4b70c770caca758e58ed4.gif分别为对应关节n的单位关节速度对末端线速度和角速度的影响。

    d7a878af9cc53e7fcaa1b63c5fbc045b.gif

    三、操作实现

    3.1 记录轨迹

    在工作空间下创建bag文件,将记录轨迹的.bag文件及脚本放置在该目录下。

    (1)编写节点利用rosbag记录轨迹

    rosbag api官方教程:http://wiki.ros.org/rosbag/Code%20API

    #include

    #include

    #include

    #include

    #include

    #include

    #include

    ros::Subscriber write_sub, motion_sub;

    int nums;

    bool writeJudge;

    rosbag::Bag writeRobot, writePos, writeVel;

    void data_process(trajectory_msgs::JointTrajectory getData) {

    writeRobot.write("/moveit/JointTrajectory", ros::Time::now(), getData);

    for (int j_num = 0; j_num < 6; j_num++) {

    std_msgs::Float64MultiArray pos_data, vel_data;

    for (int i = 0; i < getData.points.size(); i++) {

    pos_data.data.push_back(getData.points[i].positions[j_num]);

    vel_data.data.push_back(getData.points[i].velocities[j_num]);

    }

    writePos.write("pos" + std::to_string(j_num), ros::Time::now(), pos_data);

    writeVel.write("val" + std::to_string(j_num), ros::Time::now(), vel_data);

    }

    }

    void write_callback(const std_msgs::Bool::ConstPtr &data) {

    if (data->data) {

    writeJudge = true;

    std::string robotFileName = "bag/motion";

    robotFileName += std::to_string(nums);

    robotFileName += ".bag";

    writeRobot.open(robotFileName, rosbag::bagmode::Write);

    std::string posFileName = "bag/motion_pos";

    posFileName += std::to_string(nums);

    posFileName += ".bag";

    writePos.open(posFileName, rosbag::bagmode::Write);

    std::string velFileName = "bag/motion_vel";

    velFileName += std::to_string(nums);

    velFileName += ".bag";

    writeVel.open(velFileName, rosbag::bagmode::Write);

    } else {

    writeJudge = false;

    writeRobot.close();

    writePos.close();

    writeVel.close();

    nums++;

    }

    }

    void motion_callback(const trajectory_msgs::JointTrajectory::ConstPtr &data) {

    if (writeJudge) {

    std::cout << "write" << std::endl;

    data_process(*data);

    }

    }

    int main(int argc, char **argv) {

    ros::init(argc, argv, "record");

    ros::NodeHandle nh;

    nums = 1;

    writeJudge = false;

    write_sub =

    nh.subscribe<:bool>("/robot/bagWirte", 1, write_callback);

    motion_sub = nh.subscribe<:jointtrajectory>(

    "/moveit/JointTrajectory", 10, motion_callback);

    ros::spin();

    }

    (2)使用脚本将.bag文件转为.csv文件

    创建脚本bagtocsv.sh

    #! /bin/bash

    echo "Enter bag name"

    read bagname

    for topic in `rostopic list -b $bagname.bag`;

    do rostopic echo -p -b $bagname.bag $topic >$bagname-${topic//\//_}.csv;

    echo "finish"

    done

    cd到该目录下,用bash命令执行,根据提示输入.bag文件的名字。

    3.2 轨迹处理

    Matlab程序

    clear;

    %% 前期准备

    %启动工具箱

    startup_rvc;

    %角度转换

    du=pi/180; %度

    radian=180/pi; %弧度

    %关节长度,单位m

    L1=0.40;L2=0.39;L3=0.17;L4=0.20;L5=0.08;

    %% 建立数学模型

    % DH法建立模型,关节角,连杆偏移,连杆长度,连杆扭转角,关节类型(0转动,1移动)

    L(1) = Link( 'd',L1 , 'a',0 , 'alpha',-pi/2, 'offset',0 );

    L(2) = Link( 'd',0 , 'a',-L2, 'alpha',0 , 'offset',pi/2 );

    L(3) = Link( 'd',0 , 'a',0 , 'alpha',pi/2 , 'offset',0 );

    L(4) = Link( 'd',L3+L4 , 'a',0 , 'alpha',-pi/2, 'offset',0 );

    L(5) = Link( 'd',0 , 'a',0 , 'alpha',pi/2 , 'offset',0 );

    L(6) = Link( 'd',L5 , 'a',0 , 'alpha',-pi/2, 'offset',0 );

    plotopt = {'noraise', 'nowrist', 'nojaxes', 'delay',0};

    tool_char=[1 0 0 0;

    0 1 0 0;

    0 0 1 0;

    0 0 0 1];

    six_link=SerialLink(L,'name','six link','tool',tool_char);

    %% 显示机械臂

    figure('name','机器臂')

    hold on

    six_link.plot([0 0 0 0 0 0], plotopt{:});

    hold off

    %% 计算雅可比矩阵

    syms theta1 theta2 theta3 theta4 theta5 theta6;

    j_trans = six_link.jacob0([theta1 theta2 theta3 theta4 theta5 theta6],'trans');

    save('JacobData','j_trans');

    %% 读取关节运动参数

    %获取关节角度

    j1 = csvread('robotMotion_pos-pos0.csv');

    j2 = csvread('robotMotion_pos-pos1.csv');

    j3 = csvread('robotMotion_pos-pos2.csv');

    j4 = csvread('robotMotion_pos-pos3.csv');

    j5 = csvread('robotMotion_pos-pos4.csv');

    j6 = csvread('robotMotion_pos-pos5.csv');

    %获取角速度

    j_v = zeros(6,length(j1));

    j_v(1,:) = csvread('robotMotion_vel-val0.csv');

    j_v(2,:) = csvread('robotMotion_vel-val1.csv');

    j_v(3,:) = csvread('robotMotion_vel-val2.csv');

    j_v(4,:) = csvread('robotMotion_vel-val3.csv');

    j_v(5,:) = csvread('robotMotion_vel-val4.csv');

    j_v(6,:) = csvread('robotMotion_vel-val5.csv');

    %% 计算末端运动参数

    eff_p = zeros(3,length(j1));

    eff_v = zeros(3,length(j1));

    for i=1:1:length(j1)

    theta1 = j1(i);

    theta2 = j2(i);

    theta3 = j3(i);

    theta4 = j4(i);

    theta5 = j5(i);

    theta6 = j6(i);

    % 计算末端位置

    eff_p(:,i) = six_link.fkine([theta1 theta2 theta3 theta4 theta5 theta6]).t;

    % 计算末端速度

    eff_v(:,i) = double(subs(j_trans))*j_v(:,i);

    end

    %% 画图

    time = csvread('robotMotion_time.csv');

    hold on;

    figure('name','关节空间运动分析')

    subplot(2,1,1);

    plot(time,j1,time,j2,time,j3,time,j4,time,j5,time,j6);

    subplot(2,1,2);

    plot(time,j_v(1,:),time,j_v(2,:),time,j_v(3,:),time,j_v(4,:),time,j_v(5,:),time,j_v(6,:));

    hold off;

    hold on;

    figure('name','工作空间运动分析')

    subplot(2,1,1);

    plot(time,eff_p(1,:),time,eff_p(2,:),time,eff_p(3,:));

    subplot(2,1,2);

    plot(time,eff_v(1,:),time,eff_v(2,:),time,eff_v(3,:));

    hold off;

    3.3 结果

    21794d7ab05dd9e70845e4ddb3459ac5.png

    关节空间运动分析

    7589ec60eb7c76e367015673a480f4c6.png

    工作空间运动分析

    参考:

    《机器人技术基础》

    展开全文
  • 傅里叶变换的意义和理解(通俗易懂)

    千次阅读 多人点赞 2021-02-21 16:53:01
    先举一个公式上并非很恰当,但意义上再贴切不过的例子: 在你的理解中,一段音乐是什么呢? 这是我们对音乐最普遍的理解,一个随着时间变化的震动。但我相信对于乐器小能手们来说,音乐更直观的理解是这样的: 好的...

    傅里叶分析不仅仅是一个数学工具,更是一种可以彻底颠覆一个人以前世界观的思维模式。但不幸的是,傅里叶分析的公式看起来太复杂了,所以很多大一新生上来就懵圈并从此对它深恶痛绝。老实说,这么有意思的东西居然成了大学里的杀手课程,不得不归咎于编教材的人实在是太严肃了。(您把教材写得好玩一点会死吗?会死吗?)所以我一直想写一个有意思的文章来解释傅里叶分析,有可能的话高中生都能看懂的那种。所以,不管读到这里的您从事何种工作,我保证您都能看懂,并且一定将体会到通过傅里叶分析看到世界另一个样子时的快感。至于对于已经有一定基础的朋友,也希望不要看到会的地方就急忙往后翻,仔细读一定会有新的发现。

    ————以上是定场诗————

    下面进入正题:

    抱歉,还是要啰嗦一句:其实学习本来就不是易事,我写这篇文章的初衷也是希望大家学习起来更加轻松,充满乐趣。但是千万!千万不要把这篇文章收藏起来,或是存下地址,心里想着:以后有时间再看。这样的例子太多了,也许几年后你都没有再打开这个页面。无论如何,耐下心,读下去。这篇文章要比读课本要轻松、开心得多……

    p.s.本文无论是cos还是sin,都统一用“正弦波”(Sine Wave)一词来代表简谐波。

    一、什么是频域

    从我们出生,我们看到的世界都以时间贯穿,股票的走势、人的身高、汽车的轨迹都会随着时间发生改变。这种以时间作为参照来观察动态世界的方法我们称其为时域分析。而我们也想当然的认为,世间万物都在随着时间不停的改变,并且永远不会静止下来。但如果我告诉你,用另一种方法来观察世界的话,你会发现世界是永恒不变的,你会不会觉得我疯了?我没有疯,这个静止的世界就叫做频域。

    先举一个公式上并非很恰当,但意义上再贴切不过的例子:

    在你的理解中,一段音乐是什么呢?

    这是我们对音乐最普遍的理解,一个随着时间变化的震动。但我相信对于乐器小能手们来说,音乐更直观的理解是这样的:

    好的!下课,同学们再见。

    是的,其实这一段写到这里已经可以结束了。上图是音乐在时域的样子,而下图则是音乐在频域的样子。所以频域这一概念对大家都从不陌生,只是从来没意识到而已。

    现在我们可以回过头来重新看看一开始那句痴人说梦般的话:世界是永恒的。

    将以上两图简化:

    时域:

    频域:

    在时域,我们观察到钢琴的琴弦一会上一会下的摆动,就如同一支股票的走势;而在频域,只有那一个永恒的音符。

    所以

    你眼中看似落叶纷飞变化无常的世界,实际只是躺在上帝怀中一份早已谱好的乐章。

    抱歉,这不是一句鸡汤文,而是黑板上确凿的公式:傅里叶同学告诉我们,任何周期函数,都可以看作是不同振幅,不同相位正弦波的叠加。在第一个例子里我们可以理解为,利用对不同琴键不同力度,不同时间点的敲击,可以组合出任何一首乐曲。

    而贯穿时域与频域的方法之一,就是传中说的傅里叶分析。傅里叶分析可分为傅里叶级数(Fourier Serie)和傅里叶变换(Fourier Transformation),我们从简单的开始谈起。

    二、傅里叶级数(Fourier Series)的频谱

    还是举个栗子并且有图有真相才好理解。

    如果我说我能用前面说的正弦曲线波叠加出一个带90度角的矩形波来,你会相信吗?你不会,就像当年的我一样。但是看看下图:

    第一幅图是一个郁闷的正弦波cos(x)

    第二幅图是2个卖萌的正弦波的叠加cos(x)+a.cos(3x)

    第三幅图是4个发春的正弦波的叠加

    第四幅图是10个便秘的正弦波的叠加

    随着正弦波数量逐渐的增长,他们最终会叠加成一个标准的矩形,大家从中体会到了什么道理?

    (只要努力,弯的都能掰直!)

    随着叠加的递增,所有正弦波中上升的部分逐渐让原本缓慢增加的曲线不断变陡,而所有正弦波中下降的部分又抵消了上升到最高处时继续上升的部分使其变为水平线。一个矩形就这么叠加而成了。但是要多少个正弦波叠加起来才能形成一个标准90度角的矩形波呢?不幸的告诉大家,答案是无穷多个。(上帝:我能让你们猜着我?)

    不仅仅是矩形,你能想到的任何波形都是可以如此方法用正弦波叠加起来的。这是没
    有接触过傅里叶分析的人在直觉上的第一个难点,但是一旦接受了这样的设定,游戏就开始有意思起来了。

    还是上图的正弦波累加成矩形波,我们换一个角度来看看:

    在这几幅图中,最前面黑色的线就是所有正弦波叠加而成的总和,也就是越来越接近矩形波的那个图形。而后面依不同颜色排列而成的正弦波就是组合为矩形波的各个分量。这些正弦波按照频率从低到高从前向后排列开来,而每一个波的振幅都是不同的。一定有细心的读者发现了,每两个正弦波之间都还有一条直线,那并不是分割线,而是振幅为0的正弦波!也就是说,为了组成特殊的曲线,有些正弦波成分是不需要的。

    这里,不同频率的正弦波我们成为频率分量。

    好了,关键的地方来了!!

    如果我们把第一个频率最低的频率分量看作“1”,我们就有了构建频域的最基本单元。

    对于我们最常见的有理数轴,数字“1”就是有理数轴的基本单元。

    时域的基本单元就是“1秒”,如果我们将一个角频率为的正弦波cos(t)看作基础,那么频域的基本单元就是

    有了“1”,还要有“0”才能构成世界,那么频域的“0”是什么呢?cos(0t)就是一个周期无限长的正弦波,也就是一条直线!所以在频域,0频率也被称为直流分量,在傅里叶级数的叠加中,它仅仅影响全部波形相对于数轴整体向上或是向下而不改变波的形状。

    接下来,让我们回到初中,回忆一下已经死去的八戒,啊不,已经死去的老师是怎么定义正弦波的吧。

    正弦波就是一个圆周运动在一条直线上的投影。所以频域的基本单元也可以理解为一个始终在旋转的圆

    知乎不能传动态图真是太让人惋惜了……

    想看动图的同学请戳这里:

    File:Fourier series square wave circles animation.gif

    以及这里:

    File:Fourier series sawtooth wave circles animation.gif

    点出去的朋友不要被wiki拐跑了,wiki写的哪有这里的文章这么没节操是不是。

    介绍完了频域的基本组成单元,我们就可以看一看一个矩形波,在频域里的另一个模样了:

    这是什么奇怪的东西?

    这就是矩形波在频域的样子,是不是完全认不出来了?教科书一般就给到这里然后留给了读者无穷的遐想,以及无穷的吐槽,其实教科书只要补一张图就足够了:频域图像,也就是俗称的频谱,就是——


     

    再清楚一点:

    可以发现,在频谱中,偶数项的振幅都是0,也就对应了图中的彩色直线。振幅为0的正弦波。

    动图请戳:

    File:Fourier series and transform.gif

    老实说,在我学傅里叶变换时,维基的这个图还没有出现,那时我就想到了这种表达方法,而且,后面还会加入维基没有表示出来的另一个谱——相位谱。

    但是在讲相位谱之前,我们先回顾一下刚刚的这个例子究竟意味着什么。记得前面说过的那句“世界是静止的”吗?估计好多人对这句话都已经吐槽半天了。想象一下,世界上每一个看似混乱的表象,实际都是一条时间轴上不规则的曲线,但实际这些曲线都是由这些无穷无尽的正弦波组成。我们看似不规律的事情反而是规律的正弦波在时域上的投影,而正弦波又是一个旋转的圆在直线上的投影。那么你的脑海中会产生一个什么画面呢?

    我们眼中的世界就像皮影戏的大幕布,幕布的后面有无数的齿轮,大齿轮带动小齿轮,小齿轮再带动更小的。在最外面的小齿轮上有一个小人——那就是我们自己。我们只看到这个小人毫无规律的在幕布前表演,却无法预测他下一步会去哪。而幕布后面的齿轮却永远一直那样不停的旋转,永不停歇。这样说来有些宿命论的感觉。说实话,这种对人生的描绘是我一个朋友在我们都是高中生的时候感叹的,当时想想似懂非懂,直到有一天我学到了傅里叶级数……

    三、傅里叶级数(Fourier Series)的相位谱

    上一章的关键词是:从侧面看。这一章的关键词是:从下面看。

    在这一章最开始,我想先回答很多人的一个问题:傅里叶分析究竟是干什么用的?这段相对比较枯燥,已经知道了的同学可以直接跳到下一个分割线。

    先说一个最直接的用途。无论听广播还是看电视,我们一定对一个词不陌生——频道。频道频道,就是频率的通道,不同的频道就是将不同的频率作为一个通道来进行信息传输。下面大家尝试一件事:

    先在纸上画一个sin(x),不一定标准,意思差不多就行。不是很难吧。

    好,接下去画一个sin(3x)+sin(5x)的图形。

    别说标准不标准了,曲线什么时候上升什么时候下降你都不一定画的对吧?

    好,画不出来不要紧,我把sin(3x)+sin(5x)的曲线给你,但是前提是你不知道这个曲线的方程式,现在需要你把sin(5x)给我从图里拿出去,看看剩下的是什么。这基本是不可能做到的。

    但是在频域呢?则简单的很,无非就是几条竖线而已。

    所以很多在时域看似不可能做到的数学操作,在频域相反很容易。这就是需要傅里叶变换的地方。尤其是从某条曲线中去除一些特定的频率成分,这在工程上称为滤波,是信号处理最重要的概念之一,只有在频域才能轻松的做到。

    再说一个更重要,但是稍微复杂一点的用途——求解微分方程。(这段有点难度,看不懂的可以直接跳过这段)微分方程的重要性不用我过多介绍了。各行各业都用的到。但是求解微分方程却是一件相当麻烦的事情。因为除了要计算加减乘除,还要计算微分积分。而傅里叶变换则可以让微分和积分在频域中变为乘法和除法,大学数学瞬间变小学算术有没有。

    傅里叶分析当然还有其他更重要的用途,我们随着讲随着提。

    ————————————————————————————————————

    下面我们继续说相位谱:

    通过时域到频域的变换,我们得到了一个从侧面看的频谱,但是这个频谱并没有包含时域中全部的信息。因为频谱只代表每一个对应的正弦波的振幅是多少,而没有提到相位。基础的正弦波A.sin(wt+θ)中,振幅,频率,相位缺一不可,不同相位决定了波的位置,所以对于频域分析,仅仅有频谱(振幅谱)是不够的,我们还需要一个相位谱。那么这个相位谱在哪呢?我们看下图,这次为了避免图片太混论,我们用7个波叠加的图。

    鉴于正弦波是周期的,我们需要设定一个用来标记正弦波位置的东西。在图中就是那些小红点。小红点是距离频率轴最近的波峰,而这个波峰所处的位置离频率轴有多远呢?为了看的更清楚,我们将红色的点投影到下平面,投影点我们用粉色点来表示。当然,这些粉色的点只标注了波峰距离频率轴的距离,并不是相位。

    这里需要纠正一个概念:时间差并不是相位差。如果将全部周期看作2Pi或者360度的话,相位差则是时间差在一个周期中所占的比例。我们将时间差除周期再乘2Pi,就得到了相位差。

    在完整的立体图中,我们将投影得到的时间差依次除以所在频率的周期,就得到了最下面的相位谱。所以,频谱是从侧面看,相位谱是从下面看。下次偷看女生裙底被发现的话,可以告诉她:“对不起,我只是想看看你的相位谱。”

    注意到,相位谱中的相位除了0,就是Pi。因为cos(t+Pi)=-cos(t),所以实际上相位为Pi的波只是上下翻转了而已。对于周期方波的傅里叶级数,这样的相位谱已经是很简单的了。另外值得注意的是,由于cos(t+2Pi)=cos(t),所以相位差是周期的,pi和3pi,5pi,7pi都是相同的相位。人为定义相位谱的值域为(-pi,pi],所以图中的相位差均为Pi。

    最后来一张大集合:

    四、傅里叶变换(Fourier Transformation)

    相信通过前面三章,大家对频域以及傅里叶级数都有了一个全新的认识。但是文章在一开始关于钢琴琴谱的例子我曾说过,这个栗子是一个公式错误,但是概念典型的例子。所谓的公式错误在哪里呢?

    傅里叶级数的本质是将一个周期的信号分解成无限多分开的(离散的)正弦波,但是宇宙似乎并不是周期的。曾经在学数字信号处理的时候写过一首打油诗:

    往昔连续非周期,

    回忆周期不连续,

    任你ZT、DFT,

    还原不回去。

    (请无视我渣一样的文学水平……)

    在这个世界上,有的事情一期一会,永不再来,并且时间始终不曾停息地将那些刻骨铭心的往昔连续的标记在时间点上。但是这些事情往往又成为了我们格外宝贵的回忆,在我们大脑里隔一段时间就会周期性的蹦出来一下,可惜这些回忆都是零散的片段,往往只有最幸福的回忆,而平淡的回忆则逐渐被我们忘却。因为,往昔是一个连续的非周期信号,而回忆是一个周期离散信号。

    是否有一种数学工具将连续非周期信号变换为周期离散信号呢?抱歉,真没有。

    比如傅里叶级数,在时域是一个周期且连续的函数,而在频域是一个非周期离散的函数。这句话比较绕嘴,实在看着费事可以干脆回忆第一章的图片。

    而在我们接下去要讲的傅里叶变换,则是将一个时域非周期的连续信号,转换为一个在频域非周期的连续信号。

    算了,还是上一张图方便大家理解吧:

    或者我们也可以换一个角度理解:傅里叶变换实际上是对一个周期无限大的函数进行傅里叶变换。

    所以说,钢琴谱其实并非一个连续的频谱,而是很多在时间上离散的频率,但是这样的一个贴切的比喻真的是很难找出第二个来了。

    因此在傅里叶变换在频域上就从离散谱变成了连续谱。那么连续谱是什么样子呢?

    你见过大海么?

    为了方便大家对比,我们这次从另一个角度来看频谱,还是傅里叶级数中用到最多的那幅图,我们从频率较高的方向看。

    以上是离散谱,那么连续谱是什么样子呢?

    尽情的发挥你的想象,想象这些离散的正弦波离得越来越近,逐渐变得连续……

    直到变得像波涛起伏的大海:

    很抱歉,为了能让这些波浪更清晰的看到,我没有选用正确的计算参数,而是选择了一些让图片更美观的参数,不然这图看起来就像屎一样了。

    不过通过这样两幅图去比较,大家应该可以理解如何从离散谱变成了连续谱的了吧?原来离散谱的叠加,变成了连续谱的累积。所以在计算上也从求和符号变成了积分符号。

    不过,这个故事还没有讲完,接下去,我保证让你看到一幅比上图更美丽壮观的图片,但是这里需要介绍到一个数学工具才能然故事继续,这个工具就是——

    五、宇宙耍帅第一公式:欧拉公式

    虚数i这个概念大家在高中就接触过,但那时我们只知道它是-1的平方根,可是它真正的意义是什么呢?

    这里有一条数轴,在数轴上有一个红色的线段,它的长度是1。当它乘以3的时候,它的长度发生了变化,变成了蓝色的线段,而当它乘以-1的时候,就变成了绿色的线段,或者说线段在数轴上围绕原点旋转了180度。

    我们知道乘-1其实就是乘了两次 i使线段旋转了180度,那么乘一次 i 呢——答案很简单——旋转了90度。

    同时,我们获得了一个垂直的虚数轴。实数轴与虚数轴共同构成了一个复数的平面,也称复平面。这样我们就了解到,乘虚数i的一个功能——旋转。

    现在,就有请宇宙第一耍帅公式欧拉公式隆重登场——

    这个公式在数学领域的意义要远大于傅里叶分析,但是乘它为宇宙第一耍帅公式是因为它的特殊形式——当x等于Pi的时候。

    经常有理工科的学生为了跟妹子表现自己的学术功底,用这个公式来给妹子解释数学之美:”石榴姐你看,这个公式里既有自然底数e,自然数1和0,虚数i还有圆周率pi,它是这么简洁,这么美丽啊!“但是姑娘们心里往往只有一句话:”臭屌丝……“

    这个公式关键的作用,是将正弦波统一成了简单的指数形式。我们来看看图像上的涵义:

    欧拉公式所描绘的,是一个随着时间变化,在复平面上做圆周运动的点,随着时间的改变,在时间轴上就成了一条螺旋线。如果只看它的实数部分,也就是螺旋线在左侧的投影,就是一个最基础的余弦函数。而右侧的投影则是一个正弦函数。

    关于复数更深的理解,大家可以参考:

    复数的物理意义是什么?

    这里不需要讲的太复杂,足够让大家理解后面的内容就可以了。

    六、指数形式的傅里叶变换

    有了欧拉公式的帮助,我们便知道:正弦波的叠加,也可以理解为螺旋线的叠加在实数空间的投影。而螺旋线的叠加如果用一个形象的栗子来理解是什么呢?

    光波

    高中时我们就学过,自然光是由不同颜色的光叠加而成的,而最著名的实验就是牛顿师傅的三棱镜实验:

    所以其实我们在很早就接触到了光的频谱,只是并没有了解频谱更重要的意义。

    但不同的是,傅里叶变换出来的频谱不仅仅是可见光这样频率范围有限的叠加,而是频率从0到无穷所有频率的组合。

    这里,我们可以用两种方法来理解正弦波:

    第一种前面已经讲过了,就是螺旋线在实轴的投影。

    另一种需要借助欧拉公式的另一种形式去理解:

    将以上两式相加再除2,得到:

    这个式子可以怎么理解呢?

    我们刚才讲过,e^(it)可以理解为一条逆时针旋转的螺旋线,那么e^(-it)则可以理解为一条顺时针旋转的螺旋线。而cos(t)则是这两条旋转方向不同的螺旋线叠加的一半,因为这两条螺旋线的虚数部分相互抵消掉了!

    举个例子的话,就是极化方向不同的两束光波,磁场抵消,电场加倍。

    这里,逆时针旋转的我们称为正频率,而顺时针旋转的我们称为负频率(注意不是复频率)。

    好了,刚才我们已经看到了大海——连续的傅里叶变换频谱,现在想一想,连续的螺旋线会是什么样子:

    想象一下再往下翻:

    |

    |

    |

    |

    |

    |

    |

    |

    |

    是不是很漂亮?

    你猜猜,这个图形在时域是什么样子?

    哈哈,是不是觉得被狠狠扇了一个耳光。数学就是这么一个把简单的问题搞得很复杂的东西。

    顺便说一句,那个像大海螺一样的图,为了方便观看,我仅仅展示了其中正频率的部分,负频率的部分没有显示出来。

    如果你认真去看,海螺图上的每一条螺旋线都是可以清楚的看到的,每一条螺旋线都有着不同的振幅(旋转半径),频率(旋转周期)以及相位。而将所有螺旋线连成平面,就是这幅海螺图了。

    好了,讲到这里,相信大家对傅里叶变换以及傅里叶级数都有了一个形象的理解了,我们最后用一张图来总结一下:

    原文链接:https://zhuanlan.zhihu.com/p/19763358

    作 者:韩 昊

    知 乎:Heinrich

    微 博:@花生油工人

    知乎专栏:与时间无关的故事

    展开全文
  • 机器学习()统计学习理论

    千次阅读 2018-03-09 21:19:01
    统计学习理论意义 统计学习理论提供了机器学习的一个理论基础。通过理论推导,从本质上说明了机器学习为什么会出现过拟合现象,以及过拟合与模型选择、训练数据之间有什么关系。 数学推导 设训练集S={(xi,yi)...

    统计学习理论的意义

    统计学习理论提供了机器学习的一个理论基础。通过理论推导,从本质上说明了机器学习为什么会出现过拟合现象,以及过拟合与模型选择、训练数据之间有什么关系。

    数学推导

    设训练集 S={(xi,yi)}mi=1 S = { ( x i , y i ) } i = 1 m ,所有的 (xi,yi) ( x i , y i ) 独立同分布(Independent and identical distribution),则我们可以定义分类器 hθ h θ 测试误差(这里指的是在训练集上的误差)为(Empirical Risk):

    ε^(hθ)=1mi=1mI(hθ(xi)yi) ε ^ ( h θ ) = 1 m ∑ i = 1 m I ( h θ ( x i ) ≠ y i )

    其中,函数 I(x) I ( x ) 是一个示性函数,这个误差的定义非常好理解。
    接着我们定义分类器 hθ h θ 的增广误差为(Generalization Risk)
    ε(hθ) =P(x,y)(h(x)y)=hθ(x,y)yp(x,y)dxdy ε ( h θ ) = P ( x , y ) ( h ( x ) ≠ y )   = ∫ h θ ( x , y ) ≠ y p ( x , y ) d x d y

    这里的增广误差是指在真实世界中出现的各种情况的误差的平均。显然,测试误差并不能反映真实情况。那么,测试误差与真实的误差之间有多大的差距呢?前人的研究得到这样的一个结论
    P(|ε(hθε^(hθ))|>δ)2e2δ2m P ( | ε ( h θ − ε ^ ( h θ ) ) | > δ ) ≤ 2 e − 2 δ 2 m

    也就是说,真实误差与测试误差之间相差大于 δ δ 的概率小于 2e2δ2m 2 e − 2 δ 2 m 。上式右边与训练样本数m是相关的。训练样本越多,测试误差与真实误差之间的差距大于某个值的概率会越小。下面我们来证明上式,先看一个引理。

    引理:设 z1,z2,...,zm z 1 , z 2 , . . . , z m m m 个独立随机变量,满足P(zi=1)=ϕ,P(zi=0)=1ϕ  (i=1~m)
    定义:

    ϕ^=1mi=1mzi ϕ ^ = 1 m ∑ i = 1 m z i

    则有
    P(|ϕ^ϕ|>δ)2e2δ2m P ( | ϕ ^ − ϕ | > δ ) ≤ 2 e − 2 δ 2 m

    上式叫做Hoeffiding不等式,Hoeffding不等式是关于一组随机变量均值的概率不等式。证明如下。
    证明:定义
    zi=I(hθ(xi)yi) z i = I ( h θ ( x i ) ≠ y i )

    P(zi=1)=ε(hθ) P ( z i = 1 ) = ε ( h θ )


    ε^(hθ)=1mi=1mzi ε ^ ( h θ ) = 1 m ∑ i = 1 m z i

    所以
    P(|ϕ^ϕ|>δ)2e2δ2m P ( | ϕ ^ − ϕ | > δ ) ≤ 2 e − 2 δ 2 m


    假设对一个分类器h来说, hθ h θ 只有有限个取值,设取值个数为 K K 。设H={hθ}θ=1K,则

    P(hθϵH,|ε(hθ)ε(hθ)^|>δ)2Ke2δ2m P ( ∃ h θ ϵ H , | ε ( h θ ) − ε ( h θ ) ^ | > δ ) ≤ 2 K e − 2 δ 2 m

    P(hθϵH,|ε(hθ)ε(hθ)^|<δ)12Ke2δ2m P ( ∃ h θ ϵ H , | ε ( h θ ) − ε ( h θ ) ^ | < δ ) ≤ 1 − 2 K e − 2 δ 2 m

    2Ke2r2m=δ 2 K e − 2 r 2 m = δ ,则有
    r=1mlog(2Kg) r = 1 m log ⁡ ( 2 K g )

    P(hθϵH,|ε(hθ)ε(hθ)^|<1mlog(2Kg))1δ P ( ∃ h θ ϵ H , | ε ( h θ ) − ε ( h θ ) ^ | < 1 m log ⁡ ( 2 K g ) ) ≤ 1 − δ

    定理:
    假设 θ^=argminθ ε^(hθ) θ ^ = a r g m i n θ   ε ^ ( h θ ) , θ=argminθ ε(hθ) θ ∗ = a r g m i n θ   ε ( h θ ) ,则有

    P(|ε(hθ^)ε(hθ)|2r)>1δ P ( | ε ( h θ ^ ) − ε ( h θ ∗ ) | ≤ 2 r ) > 1 − δ

    P(|ε(hθ^)ε(hθ)|1mlog(2Kg))12δ P ( | ε ( h θ ^ ) − ε ( h θ ∗ ) | ≤ 1 m log ⁡ ( 2 K g ) ) ≥ 1 − 2 δ

    这样,我们就可以得到结论:
    - 复杂的模型K大,但是 ε(hθ) ε ( h θ ∗ ) ε(hθ^) ε ( h θ ^ ) 变小
    - 训练样本数m越多越好

    补充:
    这里写图片描述

    VC维(Vapnik-Chervonenkis维)

    衡量 θ θ 取无限值的分类器负责度
    对m个样本任意的标(标签总数 2m 2 m 个),都有一个 θ θ 能把他们分开。满足上述条件的最大的m,叫做 hθ h θ 的VC维(d=m)。

    例子
    线性分类器的VC维是 d+1 d + 1 ,假设样本对是 (x,y) ( x , y ) ,则d是x的维度。

    定理:若假设空间H的VC维为d,则有:

    P(|ε(hθ)ε(hθ)^) 8dlog2med+8log4δm>1δ P ( | ε ( h θ ) − ε ( h θ ) ^ ) ≤ 8 d log ⁡ 2 m e d + 8 log ⁡ 4 δ m   > 1 − δ

    展开全文
  • 一文带你看懂~混沌理论

    千次阅读 多人点赞 2019-10-28 23:07:00
    混沌理论 相信大家听过这样一个实验:量子薛定谔的猫。 实验是这样的:在一个普通盒子里有一只小花猫,以及少量放射性物质。之后,有50%的概率放射性物质将会衰变并释放出毒气杀死这只小花猫,同时有50%的概率放射...
  • 顺序存储结构的主要优点是节省存储空间,因为分配给数据的存储单元全用存放结点的数据(不考虑c/c++语言中数组需指定大小的情况),结点之间的逻辑关系没有占用额外的存储空间。采用这种方法时,可实现对结点的随机...
  • 情绪计算——“情绪空间”表达

    千次阅读 2020-11-12 15:05:02
    常见的情绪表示可以用高兴、中性、伤心、惊讶等离散化形式,亦可以用Valence(警觉)、Arousal(唤醒)和Dominance(受支配程度)等连续维度表示不同的情绪。
  • 测试理论面试题

    千次阅读 2019-11-06 09:13:26
    1 说一下你们的测试流程 没有做过项目的直接介绍下v模型(老师上课肯定有讲过),有经验的直接从接到项目/单子后讲自己如何一步步实施测试的。 例如你可以回答这样的流程: 1.软件开发完成以后,就会把需求规格...
  • 关于六度分割理论的一点认识

    千次阅读 2014-02-21 22:07:06
    六度分割理论(Six Degrees of Separation)也称六度空间理论或者小世界理论。 六度分割理论的灵感来自1927年匈牙利作家的枷锁。“六度分离”理论的最初假设是由匈牙利作家考林西(Frigyes Karinthy)在小说《枷锁...
  • 色彩空间的圆锥模型相当复杂,但确能把色调、亮度和色饱和的变化情形表现得很清楚。在HSI色彩空间可以大大简化图像分析 和处理的工作量。HSI色彩空间和RGB色彩空间只是同一物理量的不同表示法,因而它们之间存在着...
  • 超硬核!数据结构学霸笔记,考试面试吹牛就靠它

    万次阅读 多人点赞 2021-03-26 11:11:21
    那二就彻底改变了这些东西,引用作为函数参数,传入的实参就是变量,而不是数值,真正意义上的“变量传递”。 2、数组和指针: 这一块讲得比较简单,就是基本知识。 主要内容: 1、函数传数组就是传了个指针,这个...
  • 色彩搭配色rgb 第一部分:不要使用RGB,除非您是色彩理论方面的专家。 (Part I. Don’t use RGB Unless you’re an expert in color theory.) Pop Quiz: Without cheating, describe what color this hex code is ...
  • 图像计算与数字医学国际研讨会(ISICDM)自2017年创办以来,一直是医工交叉的前沿阵地,围绕图像计算和数字医学中的一些重要的理论、算法与应用问题进行学术讨论,旨在促进电子信息(包括计算机、自动化与生物医学...
  • 章关系数据理论6.1问题的提出 1、关系数据库逻辑设计 (1)针对具体问题,如何构造一个适合于它的数据模式 (2)数据库逻辑设计的工具──关系数据库的规范化理论 2、关系模式由五部分组成,是一个五元组:R...
  • 软件测试基础知识 + 面试理论(超详细)

    万次阅读 多人点赞 2021-02-25 10:47:13
    三、软件测试工程师的工作内容四、常见的软件生命周期模型五、软件开发的几个阶段、软件bug的五个要素七、软件测试的分类八、什么是测试用例九、测试用例几大要素【面试理论知识】1、你的测试职业发展是什么?...
  • [转]信息安全相关理论题()

    千次阅读 2019-02-18 16:03:21
    对以下URL的说明正确的是:http://192.168.1.77/show.asp?id=52;...A、试图通过操作系统cmd.exe来添加帐户 B、试图通过该URL实施SQL注入攻击 C、试图调用xp_cmdshell存储过程执行系统命令 D、试图增加tes...
  • 章 内生安全与可靠性技术 网络空间最大的安全威胁是**基于目标对象内生安全问题的不确定攻击* 网络空间最大的防御难题是在缺乏先验知识条件下能否可靠应对基于未知的未知因素的不确定攻击 最大的...
  • 物流前沿理论与方法1

    千次阅读 2021-12-21 10:39:20
    数据交换方式:1、负载调制 2、反向散射调制 射频识别技术发展进程 RFID技术理论 单芯片电子标签、多电子标签识读、无线可读可写、适应高速移动物体的RFID。 射频识别技术——特点 适用性:1、RFID技术依靠电磁波,...
  • 牛逼!Java 从入门到精通,超全汇总版

    万次阅读 多人点赞 2021-05-06 19:40:33
    本书从大设计原则入手,警示我们在日常开发过程中需要注意代码的编写原则。同时,本书列举了大量生动形象的例子,在遇到相关业务场景时可以把代码写得非常漂亮。原则既是规范,也是日常开发过程中要遵守的约定;...
  • 混沌性时间序列的分析方法:EEMD+相空间重构

    千次阅读 多人点赞 2019-10-30 22:55:05
    上一篇文章中,我们理解了混沌理论的发展、定义以及特点。接下来,要结合我的研究方向,在机械振动时间序列信号的基础上,做出故障的诊断和预判。 由于篇幅的限制,本文以轴承信号为例,着重讨论混沌性的判定方法。...
  • 大学物理第十二章复习笔记:气体动理论

    千次阅读 多人点赞 2020-08-22 16:33:01
    第十二章:气体动理论 大学物理第十二章:气体动理论一级目录二级目录三级目录一、分子运动的基本概念1.气体的状态参量(1)压强P(2)体积V(3)温度T2.平衡态和平衡过程(1)平衡态(2)平衡过程3.理想气体的状态...
  • 六边形架构设计理论

    千次阅读 2020-09-18 20:06:58
    六边形的并没有实质意义,只是为了留足够的空间放置端口和适配器,一般端口数不会超过4个。适配器可以分为2类,“主”、“从”适配器,也可称为“驱动者”和“被驱动者”。   ③ 自动测试   在六边形架构中,...
  • JDK1.7版本的get put   在JDK1.7版本中,ConcurrentHashMap的数据结构是由一个Segment数组和多个HashEntry组成,如下图所示:   Segment数组的意义就是将一个大的table分割成多个小的table来进行加锁,也就是...
  • ansys个应力的物理意义

    万次阅读 2015-07-06 20:38:39
     S1,S2,S3,即分别在三个强度理论下的三个主应力。  SINT:stress intensity(应力强度),是由第三强度理论得到的当量应力,其值为第一主应力减去第三主应力。  SEVQ:Von Mises是一种屈服准则,屈服...
  • 算法理论基础

    千次阅读 2019-03-14 13:32:37
     特征工程就是将原始数据空间变换到新的特征空间,在新的特征空间,模型可以更好的学习数据中的规律。首先根据学习的目标和业务的逻辑,从数据库中抽取特征,常用的统计特征有 计数特征 (浏览次数、下单次数等)、...
  • 章 电磁新理论

    千次阅读 2015-04-16 17:15:09
    章 电磁新理论   声明    本人自称:三空道士。可看作是社会底层的无业游民,也无不妥。虽修行于俗世,甘于过平淡艰苦的隐居生活,但从不放弃对宇宙真理的探索。因学艺不精、情关难过,在我的博客文章会充满...
  • 云计算基础(纯理论)

    千次阅读 2020-09-05 11:25:16
    云计算 软件(程序)是什么? 软件必须包含输入/输出语句和计算语句,没有包含输入/输出语句的软件没有任何用途。 实时输入/输出和批量输入/输出 - 实时输入/输出是指CPU执行输入/输出步骤时,即刻完成输入/输出动作...
  • 【二】网络空间安全综述

    千次阅读 2021-07-21 17:28:58
    本文从网络空间的概念,网络空间安全学科,密码学,网络安全,信息系统安全和信息内容安全这个方面进行介绍。 目录 第一章:概念 1.1 网络空间的概念 1.2 网络空间安全的概念 第二章:网络空间安全学科 ...
  • 数据库原理概论理论知识点总结

    万次阅读 多人点赞 2020-03-22 10:27:59
    数据库系统的特点:数据结构化,数据的共享性高、冗余低易于扩充,数据独立性高,数据由数据库管理系统统一管理和控制。 ※数据库系统的核心是数据库管理系统,数据库系统的核心和基础才应该是数据模型。 1.2...
  • FFmpeg学习之 一 (音视频理论知识)

    千次阅读 2019-07-19 18:41:11
    FFmpeg学习之 一 (音视频理论知识)1. 音视频理论知识 1. 音视频理论知识

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 27,835
精华内容 11,134
关键字:

六度空间理论的意义