MATLAB的一些应用--最近用的比较多
MATLAB的一些应用--最近用的比较多
1、MATLAB分析信号的频谱
快速Fourier变换(FFT)是离散傅里叶变换的快速算法,他是根据离散傅里叶变换的奇、偶、虚、实等特性,对离散傅里叶变换的算法进行改进获得的。
针对几个个简单例子介绍一下:
(1、)假设数据采集频率为1000Hz,一个信号包含频率为50Hz、振幅为0.7的正弦波和频率为120Hz、振幅为1的正弦波,噪声为零平均值的随机噪声
用FFT方法分析其频谱方法Matlab程序如下:
clear
Fs = ; % 采样频率
T = /Fs; % 采样时间
L = ; % 信号长度
t = (:L-)*T; % 时间向量
x = 0.7*sin(*pi**t) + sin(*pi**t);
y = x + *randn(size(t)); % 加噪声正弦信号
figure()
plot(Fs*t(:),y(:))
title('零平均值噪音信号');
xlabel('time (milliseconds)')
NFFT = ^nextpow2(L); % Next power of from length of y
Y = fft(y,NFFT)/L;
f = Fs/*linspace(,,NFFT/);
figure()
plot(f,*abs(Y(:NFFT/)))
title('y(t)单边振幅频谱')
xlabel('Frequency (Hz)')
ylabel('|Y(f)|')
结果如下:


(2)产生余弦信号以作频谱分析:余弦信号y=cos(2π*f*t);信号频率为f=10Hz;时宽:1s 采样率为fs=100Hz;
MATLAB程序:
clear all;
f=;
fs=;
T=;
n=round(T*fs);%采样点个数
t=linspace(,T,n);
y=cos(*pi*f/fs*[:n-]);
figure()
plot(t,y);
title('余弦信号时域');
xlabel('t/s');
ylabel('幅度');
%用fft函数对产生的余弦信号作频谱分析:
%注意:该步骤得到的是0~fs内的频谱。
fft_y=fft(y);
f=linspace(,fs,n);
figure()
plot(f,abs(fft_y));
title('余弦信号频谱(fft)');
xlabel('f/Hz');
ylabel('幅度');
% 用fftshift函数得到-fs/~fs/2内的频谱:
fftshift_y=fftshift(fft_y);
f=linspace(-fs/,fs/,n);
figure()
plot(f,abs(fftshift_y));
title('余弦信号频谱FFTshift');
xlabel('f/Hz');
ylabel('幅度');
结果:

可以看到10Hz处有峰值,90Hz的峰值是-10Hz的峰值向右频谱搬移fs=100Hz得到的。

由于实信号频谱幅度关于原点对称,可以看到10Hz与-10Hz处的两个峰值。
2、MATLAB中几种采样方法及实现
X(t)的时域信号
syms x;
>> f=sym('cos(2/3*pi*x)');
>> ezplot(f,[0,40]);

采样信号及频域波形
w=-pi:0.01*pi:pi;
n=:;
x=cos(/*pi*n);
X=x*exp(-j*n'*w);
subplot();
stem(n,x,'filled');
xlabel('n');
title('x[n]');
subplot();
plot(w/pi,X);

过采样:
w=-pi:0.01*pi:pi;
n=:;
x=cos(/*pi*n);
X=x*exp(-j*n'*w);
subplot();
stem(n,x,'filled');
xlabel('n');
title('x[n]');
subplot();
plot(w/pi,abs(X));
xlabel('\Omega/\pi');
title('Magnitude of X');
subplot();
plot(w/pi,angle(X));
xlabel('\Omega/\pi');
title('Phase of X');

临界采样:
w=-pi:0.01*pi:pi;
n=:1.5:;
x=cos(/*pi*n);
X=x*exp(-j*n'*w);
subplot();
stem(n,x,'filled');
xlabel('n');
title('x[n]');
subplot();
plot(w/pi,abs(X));
xlabel('\Omega/\pi');
title('Magnitude of X');
subplot();
plot(w/pi,angle(X));
xlabel('\Omega/\pi');
title('Phase of X');

欠采样:
w=-pi:0.01*pi:pi;
n=::;
x=cos(/*pi*n);
X=x*exp(-j*n'*w);
subplot();
stem(n,x,'filled');
xlabel('n');
title('x[n]');
subplot();
plot(w/pi,abs(X));
xlabel('\Omega/\pi');
title('Magnitude of X');
subplot();
plot(w/pi,angle(X));
xlabel('\Omega/\pi');
title('Phase of X');

信号重构--临界采样
n=-:;
t=-:0.005:;
wc=;
Ts=pi/wc;
ws=*pi/Ts;
m=n*Ts;
f=sinc(m/pi);
ft=f*Ts*wc*sinc((wc/pi)*(ones(length(m),)*t-m'*ones(1,length(t))))./pi;
t1=-*pi:Ts:*pi;
f1=sinc(t1/pi);
subplot();
stem(t1,f1,'filled');
xlabel('kTs');
ylabel('kTs');
title('临界采样信号');
subplot();
plot(t,ft);
title('临界采样信号重构信号');
xlabel('t');
ylabel('f(t)');
subplot();
plot(t,ft-sinc(t/pi));
title('重构信号与原信号误差');
xlabel('t');

信号重构--欠采样
n=-:;
t=-:0.005:;
wc=0.5;
Ts=pi/wc;
ws=*pi/Ts;
m=n*Ts;
f=sinc(m/pi);
ft=f*Ts*wc*sinc((wc/pi)*(ones(length(m),)*t-m'*ones(1,length(t))))./pi;
t1=-*pi:Ts:*pi;
f1=sinc(t1/pi);
subplot();
stem(t1,f1,'filled');
xlabel('kTs');
ylabel('kTs');
title('欠采样信号');
subplot();
plot(t,ft);
xlabel('t');
ylabel('f(t)');
title('欠采样信号重构信号');
subplot();
plot(t,ft-sinc(t/pi));
title('重构信号与原信号误差');
xlabel('t');

信号重构--过采样
n=-:;
t=-:0.005:;
wc=;
Ts=pi/wc;
ws=*pi/Ts;
m=n*Ts;
f=sinc(m/pi);
ft=f*Ts*wc*sinc((wc/pi)*(ones(length(m),)*t-m'*ones(1,length(t))))./pi;
t1=-*pi:Ts:*pi;
f1=sinc(t1/pi);
subplot();
stem(t1,f1,'filled');
xlabel('kTs');
ylabel('kTs');
title('过采样信号');
subplot();
plot(t,ft);
xlabel('t');
ylabel('f(t)');
title('过采样信号重构信号');
subplot();
plot(t,ft-sinc(t/pi));
title('重构信号与原信号误差');
xlabel('t');

MATLAB的一些应用--最近用的比较多的更多相关文章
- Matlab 绘制三维立体图(以地质异常体为例)
前言:在地球物理勘探,流体空间分布等多种场景中,定位空间点P(x,y,x)的物理属性值Q,并绘制三维空间分布图,对我们洞察空间场景有十分重要的意义. 1. 三维立体图的基本要件: 全空间网格化 网格节 ...
- Matlab slice方法和包络法绘制三维立体图
前言:在地球物理勘探,流体空间分布等多种场景中,定位空间点P(x,y,x)的物理属性值Q,并绘制三维空间分布图,对我们洞察空间场景有十分重要的意义. 1. 三维立体图的基本要件: 全空间网格化 网格节 ...
- Matlab 高斯_拉普拉斯滤波器处理医学图像
前言:本程序是我去年实现论文算法时所做.主要功能为标记切割肝脏区域.时间有点久,很多细节已经模糊加上代码做了很多注释,因此在博客中不再详述. NOTE: 程序分几大段功能模块,仔细阅读,对解决医学图像 ...
- MATLAB中绘制质点轨迹动图并保存成GIF
工作需要在MATLAB中绘制质点轨迹并保存成GIF以便展示. 绘制质点轨迹动图可用comet和comet3命令,使用例子如下: t = 0:.01:2*pi;x = cos(2*t).*(cos(t) ...
- linux下配置matlab运行环境(MCR)
在安装好的matlab下有MCR(MatlabCompilerRuntime)在matlab2011/toolbox/compiler/deploy/glnxa64下找到MCRInstaller.zi ...
- EMD分析 Matlab 精华总结 附开源工具箱(全)
前言: 本贴写于2016年12与15日,UK.最近在学习EMD(Empirical Mode Decomposition)和HHT(Hilbert-Huang Transform)多分辨信号处理,FQ ...
- Atitit MATLAB 图像处理 经典书籍attilax总结
Atitit MATLAB 图像处理 经典书籍attilax总结 1.1. MATLAB数字图像处理1 1.2. <MATLAB实用教程(第二版)>((美)穆尔 著)[简介_书评_在线阅读 ...
- Atitit MATLAB 图像处理attilax总结
Atitit MATLAB 图像处理attilax总结 1.1. 下载 Matlab7.0官方下载_Matlab2012 v7.0 官方简体中文版-办公软件-系统大全.html1 1.2. Matla ...
- Atitit java c# php c++ js跨语言调用matlab实现边缘检测等功能attilax总结
Atitit java c# php c++ js跨语言调用matlab实现边缘检测等功能attilax总结 1.1. 边缘检测的基本方法Canny最常用了1 1.2. 编写matlab边缘检测代码, ...
- 使用MATLAB对图像处理的几种方法(下)
试验报告 一.试验原理: 图像点处理是图像处理系列的基础,主要用于让我们熟悉Matlab图像处理的编程环境.灰度线性变换和灰度拉伸是对像素灰度值的变换操作,直方图是对像素灰度值的统计,直方图均衡是对 ...
随机推荐
- 使用GoogleCode作SVN服务器的一些问题及解决办法
1.首先最主要的一个问题,就是注册GoogleCode和安装SVN工具. 网上教程很多,不一一赘述.http://www.th7.cn/Program/net/201305/136059.shtml ...
- 字符数组(char)和字符串(string)的转换
#include<iostream>#include<string>using namespace std;void main(){ string LyuS = "W ...
- 分布式集群Session原理及实现共享
1.什么是Session/Cookie? 用户使用网站的服务,基本上需要浏览器与Web服务器的多次交互.HTTP协议本身是无状态的,当用户的第一次访问请求结束后,后端服务器就无法知道下一次来访问的还是 ...
- react-native navigation的学习与使用
在很久之前,RN中文网说推荐用react-navigation替代navigator作为新的导航库,从RN 0.43版本开始,官方就已经停止维护Navigator了,所以强烈建议大家迁移到新的reac ...
- Ubuntu系统Anaconda下载安装与切换源教程【转】
本文转载自:https://blog.csdn.net/qq_36268036/article/details/81517893 1. 下载安装: 这里选用国内清华大学的Tuna开源软件镜像站作为演示 ...
- [TJOI2010]打扫房间
题目描述 学校新建了一批宿舍,值日生小A要把所有的空房间都打扫一遍.这些宿舍的布局很奇怪,整个建筑物里所有的房间组成一个N * M的矩阵,每个房间的东南西北四面墙上都有一个门通向隔壁房间.另外有些房间 ...
- 用户iis可以用外网ip访问,用内网访问报错404
如下,没有添加内网ip绑定
- 关于setTimeout()你所不知道的地方,详解setTimeout()
关于setTimeout()你所不知道的地方,详解setTimeout() 前言:看了这篇文章,1.注意setTimeout引用的是全部变量还是局部变量了,当直接调用外部函数方法时,实际上函数内部的变 ...
- ES使用中遇到的多种坑,以及解决方案
1.查询不到导致404报错 在使用get或者search进行查询获取文档的时候,如果没有结果会抛出404的异常. 我们当然不希望抛出异常,这时候就要使用ignore这个参数来忽略报错,ignore可以 ...
- 详解Django自定义过滤器
django过滤器的本质是函数,但函数太多了,为了显示自己的与众不同,设计者们想了个名字过滤器... django有一些内置的过滤器,但和新手赛车不多(把字母转成小写,求数组长度,从数组中取一个随机值 ...