从零开始的工程师思想培训1
写这个系列博客的目的:
博主是个即将入学的研究生,所在的教研室没有什么具体的研究方向,做东西都是跟着项目走,临时去学习。导师自己有一套培训体系,自己经过一段时间的培训,觉得很有收获,但是时间一久就会忘记,因此,决定花时间写博客来记录下,便于日后回顾。阅读这个系列的培训体系,你将能够从一个没有任何经验的学生党,拥有一些工程师的思想,指导以后的学习方向。培训涉及音频、视频和通信三个方面,所提及的问题都是与大学本科相关专业教材内容联系紧密,能提高知识活化度。问题本身并不难,主要是培养工程师的思想。写此博客的另一个目的在于提高自己的技术文档写作水平。同时,事先要说的是,本人小白,分析问题可能有一些漏洞,但是愿意与大家一起进步。
首先是音频的时域培训:(你需要有cooledit、matlab(用于设计滤波器)软件及c语言入门编程能力)
我们首先来思考一个问题,一个最简单的正弦波的连续信号应该怎样表示:
y = AM * sin( wt + φ )
我们对这个信号进行抽样,设 信号频率为 f0, 采样频率为 fs , 所以采样后的信号为:
y = AM*sin( 2 * pi * f0 * n / fs + φ)
这里的问题是,我们如何使用c语言产生一个误差最小的无限长正弦信号,可以借助c的库函数,但是这里的问题是pi是一个无理数,当n无限增大的时候误差会累积,另一个问题是我们如何使n可以无限进行增加下去,这里n采用C语言的任何一种数据类型都无法做到无穷加下去,那么我们如何才能产生一个误差最小的无限长的信号呢?
这里我们要求是:
1、产生一个采用率为fs = 8000Hz , 信号频率f0 = 330Hz的无限长的正弦波信号
2、使 1 中的信号频率变为330.3Hz
3、产生一个采用率为fs = 8000Hz , 信号频率f0 = 330Hz的无限长的方波信号
4、产生一个采用率为fs = 8000Hz , 信号频率f0 = 330Hz的无限长的三角波信号
后三个问题为1的举一反三,主要是要求1如何做到,问题答案我将在不久的下一篇博客给出,并给出因此引出的下一个问题。(C产生的信号可以写到文本文件里面,使用cooledit查看频率,注意fft的分辨率,问题重点在于如何使误差最小!)