作者:桂。

时间:2017-12-02  23:29:48

链接:http://www.cnblogs.com/xingshansi/p/7956491.html


一、相位提取

以正弦信号为例,x = sin(2pi*f*t+pi),希望提取phi:

思路1:通过Hilbert变化解决

思路2:借助FFT,利用插值思想,估计Phi;

思路3:借助全相FFT(apFFT, all phase FFT)实现。

思路三可提取信号相位,这一点FFT做不到,而相位信息通常可判断相位调制类型,可用于情报的脉内检测。

全相FFT思路:

  • 选定N点窗,如hanning
  • 窗函数自相关,并归一化
  • 对2N-1序列x(n)加窗,
  • 将2N-1个点,每间隔N点相加
  • FFT实现

二、仿真验证

clc;clear all;close all;

fs = 1e9;
fo = 200e6;
t = 0:1/fs:1023/fs;
tao = 0.3/3e8*sind(45);
SNR = 20;
ch1 = awgn(sin(2*pi*t*fo),SNR) ;
ch2 = awgn(sin(2*pi*t*fo + 2*pi*tao*fo),SNR);
% ch1 = sin(2*pi*t*fo) ;
% ch2 = sin(2*pi*t*fo + 0.5);
pha = angle(hilbert(ch2))-angle(hilbert(ch1));
figure()
subplot 211
plot(t*fs,pha);
subplot 212
plot(t(1:512)*fs,abs(fft(ch1(1:512))),'r--');hold on;
%FFT提取相位
pha1 = angle(fft(ch1(1:512)).*fft(ch2(1:512)));
figure()
subplot 211
plot(t(1:512)*fs,pha1);
subplot 212
plot(t(1:512)*fs,abs(fft(ch1(1:512))),'r--');hold on;
%apFFT提取相位
win = hanning(512)';
win1 = conv(win,win);
win1 = win1/sum(win1);
y1 = ch1(1:1023).*win1;
y2 = ch2(1:1023).*win1;
out1 = [0,y1(1:511)]+y1(512:1023);
out2 = [0,y2(1:511)]+y2(512:1023);
pha2 = angle(fft(out1).*conj(fft(out2)));
figure()
subplot 211
plot(t(1:512)*fs,pha2);
subplot 212
plot(t(1:512)*fs,abs(fft(ch1(1:512))),'r--');hold on;
[~,pos] = max(abs(fft(ch1(1:512))));
[pha2(pos) mean(pha) ;-pi+ 2*pi*tao*fo 2*pi*tao*fo]
theta_est = asind((pha2(pos))/2/pi/fo/0.3*3e8)+90;
abs(theta_est-45)

另外,频谱细化,可借助zoom-FFT:

fs = 2048;
T = 100;
t = 0:1/fs:T;
x = 30 * cos(2*pi*110.*t) + 30 * cos(2*pi*111.45.*t) + 25*cos(2*pi*112.3*t) + 48*cos(2*pi*113.8.*t)+50*cos(2*pi*114.5.*t);
[f, y] = zfft(x, 109, 115, fs);
plot(f, y); function [f, y] = zfft(x, fi, fa, fs)
% x为采集的数据
% fi为分析的起始频率
% fa为分析的截止频率
% fs为采集数据的采样频率
% f为输出的频率序列
% y为输出的幅值序列(实数) f0 = (fi + fa) / 2; %中心频率
N = length(x); %数据长度 r = 0:N-1;
b = 2*pi*f0.*r ./ fs;
x1 = x .* exp(-1j .* b); %移频 bw = fa - fi; B = fir1(32, bw / fs); %滤波 截止频率为0.5bw
x2 = filter(B, 1, x1); c = x2(1:floor(fs/bw):N); %重新采样
N1 = length(c);
f = linspace(fi, fa, N1);
y = abs(fft(c)) ./ N1 * 2;
y = circshift(y, [0, floor(N1/2)]); %将负半轴的幅值移过来
end

  

参考:Digital Receiver-based Electronic Intelligence System Configuration for the Detection and Identification of Intrapulse Modulated Radar Signals

全相FFT的更多相关文章

  1. 中国VR公司的详尽名单

    中国VR公司的详尽名单   <VR圈深度投资报告一:2014年以来所有VR/AR融资事件> 特征一.投资机构观望居多 尽管VR在媒体和二级市场炒得很热,但大多风险投资机构却慎于出手,以观望 ...

  2. BUGKUctf-web-writeup

    ---恢复内容开始--- 找到了个ctf平台.里面的web挺多的.终于将web题目写的差不多了. Web 签到题 加群就可以了 Web2 直接F12就看到了 文件上传测试 Burp抓包 文件名改成 1 ...

  3. 爬虫笔记之刷小怪练级:yymp3爬虫(音乐类爬虫)

    一.目标 爬取http://www.yymp3.com网站歌曲相关信息,包括歌曲名字.作者相关信息.歌曲的音频数据.歌曲的歌词数据. 二.分析 2.1 歌曲信息.歌曲音频数据下载地址的获取 随便打开一 ...

  4. NATS源代码之logger目录

    nats的logger目录文件如下 log.go syslog.go syslog_windows.go 基于golang语言的logger包实现日志功能. Golang的log包短小精悍,可以非常轻 ...

  5. IntelliJ IDEA 基本配置入门

    前言:今天下载安装IntelliJ IDEA.随手创建了一个项目,运行Build提示错误. 与大多数用于开发JAVA的IDE类似,不做不论什么配置.编译是不会成功的.因此我尝试对IDEA的配置进行了一 ...

  6. ORB-SLAM2:一种开源的VSLAM方案(译文)

    摘要: ORB-SLAM2是基于单目,双目和RGB-D相机的一套完整的SLAM方案.它能够实现地图重用,回环检测和重新定位的功能.无论是在室内的小型手持设备,还是到工厂环境的无人机和城市里驾驶的汽车, ...

  7. JAVA语 言 的 特 点

    Java到 底 是 一 种 什 么 样 的 语 言 呢? Java是 一 种 简 单 的 面 象 对 象 的 分 布 式 的 解 释 的 健 壮 的 安 全 的 结 构 中 立 的 可 移 植 的 性 ...

  8. JSP———数据交互【1】

    JSP的内置对象 不用声明就可以在JSP页面中使用 request对象 内置对象 request 封装了用户提交的信息,主要用于处理客户端请求 <FORM action="tom.js ...

  9. 利用pandas、Ipython来简化数据分析过程

    最近小爬我为了提升数据分析这块儿的技能,学习了pandas库作者Wes Mckinney的数据分析经典书籍<利用Python进行数据分析>,受益良多!里面涉及到Python语言基础.还有编 ...

随机推荐

  1. infobright系列一:源码安装infobright

    1:下载infobright http://www.infobright.org/downloads/ice/infobright-4.0.7-0-src-ice.tar.gz 2:查看环境 rpm ...

  2. cache-control 缓存

    1.服务端设置 2. 3.所以一般设置css/js等静态文件加一个md5码. 4.优先级问题 如果服务器端同时设置了Etag和Expires 时,Etag原理同样,即与Last-Modified/Et ...

  3. spiral-matrix-ii &i 生成顺时针序列

    I: Given a matrix of m x n elements (m rows, n columns), return all elements of the matrix in spiral ...

  4. MySQL中 PK NN UQ BIN UN ZF AI 的意思

    PK   Belongs to primary key作为主键 NN   Not Null非空 UQ  Unique index不能重复 BIN  Is binary column存放二进制数据的列 ...

  5. 【JMeter】初识JMeter(1)

    一.JMeter介绍 JMeter是一款开源桌面应用软件,可以用来模拟用户负载来完成性能测试工作.JMeter的功能在版本升级的过程中已经十分强大,现在多数互联网公司都在使用JMeter来完成产品或者 ...

  6. poj 2632 Crashing Robots(模拟)

    链接:poj 2632 题意:在n*m的房间有num个机器,它们的坐标和方向已知,现给定一些指令及机器k运行的次数, L代表机器方向向左旋转90°,R代表机器方向向右旋转90°,F表示前进,每次前进一 ...

  7. js template实现方法

    <script type="text/html" id="template"> <li class="list-item" ...

  8. JSONObject.parseObject(jsonStr);和JSONObject.fromObject(jsonStr);

    虽然都是返回JSONObject,但是 JSONObject.parseObject(jsonStr);这个方法需要导入import com.alibaba.fastjson.JSONObject; ...

  9. 关于Ubantu下使用cshell的问题解决

    在一个新创建的目录下使用cshell,直接在/etc/passwd 下对应的用户后 bash改为csh; 之后运行发现报错,后来查找发现/bin下没有csh执行脚本,之后安装csh;; 参考了http ...

  10. IT软件外包行业深入分析:现状、前途、趋势、待遇 什么是软件外包 外包公司是怎么工作的 软件外包公司的面试 软件外包公司需要什么样的人

    目录: [0] - 为什么要对大学生谈软件外包? [1] - 什么是软件外包? [2] - 软件为什么要外包? [3] - 为什么要承接软件外包 [4] - 做软件外包有前途吗? [5] - 外包公司 ...