傅里叶变换是我们最早开始接触的时频域变换方法,虽然经常使用,知道怎么用纸笔计算,但是还从来没有在电脑中模拟过,正好现在开始学习数字信号处理,借着这个机会再学习如何在电脑上模拟傅里叶变换。

以下大部分内容来自Digital Signal Processing Using Matlab和数字信号处理教程 程佩青

此次选择的软件平台为Matlab。

由于Matlab无法处理无限长序列,所以需要处理的信号必须是有限长的。

连续时间傅里叶变换

傅里叶变换的公式为:

为了在计算机中模拟傅里叶变换,我们将积分变为求和的方式,上下限也从正无穷到负无穷变为一段长度M,dt需要尽可能小

在Matlab中,函数的自变量因变量的集合都是使用矩阵来存储的,从矩阵的角度来看傅里叶变换的公式如下:

角频率向量定义为

时间向量定义为

因此矩阵指数可写为

整个傅里叶变换可写为

Xa = xa * exp(-1j*t'*W) * Dt;

具体实现

其实下面这个例子是Digital Signal Processing Using Matlab中的,来自P64页,不过想到都看到这里了还要读者翻书不太好,就一起放上来了。

定义

先进行数学上的分析,

MATLAB实现如下:

% Analog Signal

Dt = 0.00005;

t = -0.005:Dt:0.005;

xa = exp(-1000*abs(t));

% Continuous-time Fourier Transform

Wmax = 2*pi*2000;

K = 500;

k = 0:1:K;

W = k*Wmax/K;

Xa = xa * exp(-1j*t'*W) * Dt;

Xa = abs(Xa);

W = [-fliplr(W), W(2:501)];

Xa = [fliplr(Xa), Xa(2:501)];

subplot(2,1,1);

plot(t*1000,xa);

xlabel('t in msec.');

ylabel('xa(t)');

title('Analog Signal');

subplot(2,1,2);

plot(W/(2*pi*1000),Xa*1000);

xlabel('Frequency in KHz'); ylabel('Xa(jW)*1000');

title('Continuous-time Fourier Transform');

运行效果如下:

如果想确认变换的正确性,可以在运行完上面这个脚本后,在命令行输入

plot(W/(2*pi*1000),(0.002./(1+(W./1000).^2))*1000);

xlabel('Frequency in KHz'); ylabel('Xa(jW)*1000');

运行效果如下:

这时会发现,根据上面推导的变换公式直接plot出的图形和变换后得到的图形是一样的,这样可以确定变换的正确性。

存在问题

目前存在的问题是,对于复函数的变换结果不正确。我想了很多天都找不出问题所在,只能暂时放弃,等以后有机会再研究。

离散时间傅里叶变换

下面是对上一个例子中的模拟输入信号做离散化,然后再进行离散傅里叶变换。

为了体现Nyquist定理,将使用两种不同的采样频率

使用Fs=5000sam/sec采样来获得x1(n)

使用Fs=1000sam/sec采样来获得x2(n)

% Analog Signal

Dt = 0.00005;

t = -0.005:Dt:0.005;

xa = exp(-1000*abs(t));

% Discrete-time Signal

Ts = 0.0002;

n = -25:1:25;

x = exp(-1000*abs(n*Ts));

% Discrete-time Fourier transform

K = 500;

k = 0:1:K;

w = pi*k/K;

X = x*exp(-j*n'*w); X = real(X);

w = [-fliplr(w), w(2:K+1)];

X = [fliplr(X), X(2:K+1)];

subplot(2,1,1);plot(t*1000,xa);

xlabel('t in msec.');

ylabel('x1(n)');

title('Discrete Signal');hold on;

stem(n*Ts*1000,real(x));gtext('Ts=0.2 msec');hold off;

subplot(2,1,2);plot(w/pi,X);

xlabel('Frequency in pi units');ylabel('X1(w)');

title('Discrete-time Fourier Transform');

Fs=5000sam/sec

xa(t)的频率为2KHz,因此它的Nyquist频率为4KHz,而它的采样频率为5KHz,所以是满足Nyquist采样定律的,此时不会发生混叠。

运行效果如下:

Fs=1000sam/sec

这里使用的采样频率为1KHz,不满足Nyquist条件,因此会发生混叠。观察一下就会发生,1KHz采样得到的序列的频域波形和前面的频域波形不同,这就是混叠导致的,而且过低的采样率采集的信号的变换的不可逆的。

运行效果如下:

matlab中离散化傅里叶变换,Matlab模拟傅里叶变换相关推荐

  1. matlab中插入希腊,matlab中希腊字母打法

    如何在matlab中输入希腊字母_数学_自然科学_专业资料.matlab数据可视化处理,绘图技巧 如何在 matlab 中输入希腊字母 matlab 中用转义符来输入希腊字母的方法 上标用 ..... ...

  2. matlab excel导入矩阵,如何将excel中数据导入到matlab中!Excel导入matlab生成矩阵

    如何将excel中数据导入matlab并存入数组中 使用Matlab中的Excel Link就可以了. 如果使用Excel 2003版本,操作如下: 1 打开Excel. 2 在菜单栏中选择→加载项→ ...

  3. matlab中特殊字符6,matlab中特殊字符

    matlab特殊字符_工学_高等教育_教育专区.本文说明了matlab中如何输入特殊字符,如希腊字母字符映射表 C:\\WINDOWS\\system32\\charmap.exe M 文件里是可以输 ...

  4. MATLAB中hough反变换,matlab中hough变换

    hough 变换提取直线(Matlab 实现) Hough 变换提取直线一.实验目标实现用 Hough 变换检测直线的算法二.实验内容 1.读入图像选取有较多直线及部分曲线以作对比的...... j= ...

  5. ssbdemod在matlab中的意义,matlab中modulate函数

    (7)利用 MATLAB 中的 demodulate 和 modem.qamdemod 函数生成解调器对 16QAM 信号的解调,并将十六进制信号转化成二进制比特流信息. (8)用得到比特流信息除以. ...

  6. matlab中并行条件,matlab中的并行方法

    // 文件转载自: http://blog.csdn.net/abcjennifer/article/details/17610705 /// 本文讲一下matlab中的并行方法与技巧,这里我们不涉及 ...

  7. matlab中step_使用MATLAB中bertool进行通信仿真

    MATLAB中的Communication System Toolbox中的bertool图像化工具bertool提供了极为方便的通信仿真环境以测试仿真模型的误比特率性能,并且可以很好地和理论值进行对 ...

  8. matlab中的图像,MATLAB中图像的基本操作

    MATLAB中图像的基本操作 1.读取.显示图片 MATLAB中提供了immread()与imshow()函数读取和显示图片.其中读取函数imread()原型: imread: A= imread(f ...

  9. quad8是matlab中调用那个,Matlab 数值积分

    MATLAB数值积分与微分 8.1 数值积分 8.1.1 数值积分基本原理 求解定积分的数值方法多种多样,如简单的梯形法.辛普生(Simpson)法.牛顿-柯特斯(Newton-Cotes)法等都是经 ...

  10. matlab中select,[转载]MATLAB阈值获取函数ddencmp、thselect、wbmpen和w

    crit(t) wdcbm的调用格式有以下两种: (1)[THR,NKEEP]=wdcbm(C,L,ALPHA); (2)[THR,NKEEP]=wdcbm(C,L,ALPHA,M); 函数wdcbm ...

最新文章

  1. Android小項目之---時間線程應用(附源碼)
  2. 5.Multil-task lasso(多任务lasso回归分析)
  3. Numpy学习-数组的索引
  4. 计算机在职英语,计算机在职研究生英语教学存在的不足
  5. Java反射,参数为数组
  6. bootstrap学习(五)代码
  7. python学习笔记4(对象/引用;多范式; 上下文管理器)
  8. eclipse调试debug时出现source not found
  9. Python+matplotlib设置y轴标签距离、位置、竖排
  10. 通过企业账号邀请开发者(不需要支付99刀,在真机上调试)
  11. matlab选择语句函数,Matlab基本语句和基本函数
  12. Redis系列(二)-Hredis客户端设计及开源
  13. 互联网系统应用架构基础分析
  14. 【CAD】天河云cad,剖面线/细线已经改变图层,颜色却不变的问题
  15. warning: Clone succeeded, but checkout failed.
  16. CF506C Mr. Kitayuta vs. Bamboos
  17. CTB6.0标注体系
  18. Jboss RichFaces + Skin的简单运用示例代码
  19. xnote1.5——WebShell
  20. Word无法打开该文件,因为文件格式与扩展名不匹配

热门文章

  1. 关于PHP 源码 加密的 一些 学习(黑刀)
  2. 试图执行系统不支持的操作,问题
  3. 上网行为管理软件-怎么查看电脑近期使用记录...
  4. 计算机主机结构讲解,电脑内部结构图和讲解
  5. 非IE内核浏览器支持Active X控件
  6. nvidia驱动缓存能清理吗?
  7. window驱动备份与安装
  8. applyTo、renderTo 区别
  9. 3g显卡测试软件,显卡测试平台说明及Heaven benchmark
  10. win10 计算机右键管理,win10系统右键菜单管理的步骤介绍