间接法加窗分析信号的功率谱

     

       本篇文章是博主在通信等领域学习时,用于个人学习、研究或者欣赏使用,并基于博主对通信等领域的一些理解而记录的学习摘录和笔记,若有不当和侵权之处,指出后将会立即改正,还望谅解。文章分类在   通信领域笔记

          通信领域笔记(3)---《间接法加窗分析信号的功率谱》

间接法加窗分析信号的功率谱

目录

1、设计要求

2、理论分析推导

 2.1间接法理论分析

 2.2窗函数理论分析

3、仿真及结果分析

3.1.1五种窗函数的时域频域比较

3.1.2五种窗函数进行截断的频谱泄露差异

3.1.3 五种窗函数计算功率谱


1、设计要求


2、理论分析推导

2.1间接法理论分析

        维纳辛钦定理指出,随机信号的相关函数与它的功率谱是一对傅里叶变换对。BT法就是基于这个原理。先由观测数据估计出自相关函数,然后求自相关函数的傅立叶变换,以此变换作为对功率谱的估计,也称为间接法。BT法要求信号长度N以外的信号为零,这也造成BT法的局限性。

  2.2窗函数理论分析

        当输入一个信号,我们需要截取它其中的一段来进行研究,就可以用加窗来实现,这里窗长就是截取长度。但因为之后我们会研究截取信号的频谱,需要对其进行傅里叶变换,而傅里叶变换又是作用于正负无穷的,所以要先对截取信号进行周期扩展。

        此时,若截取为整周期截取,周期扩展之后还是原信号,因此不会出现频谱泄露;若为非整周期截取,或信号根本就不是周期信号,截取信号不能表示整个信号,周期扩展之后信号的频谱会在每个周期相连的地方出现高次谐波,产生Gibbs现象,造成频谱泄露。

        这里可以延伸出一个如何选择窗函数来减小频谱泄露的问题。即要求窗函数频谱的主瓣尽量窄、旁瓣衰减尽量大。但二者不可兼得,因此要根据实际需求选择窗函数。主瓣越窄的窗函数的频率识别精度越高;旁瓣衰减越大的窗函数的幅度识别精度越高。

        每次FFT变换只能对有限长度的时域数据进行变换,因此,需要对时域信号进行信号截断。即使是周期信号,如果截断的时间长度不是周期的整数倍(周期截断),那么,截取后的信号将会存在泄漏。为了将这个泄漏误差减少到最小程度,我们需要使用加权函数,也叫窗函数。

        加窗主要是为了使时域信号似乎更好地满足FFT处理的周期性要求,减少泄漏。而窗函数的实质是,时域上与输入信号相乘,频域上,与输入信号做卷积。针对于常用的五种窗函数:矩形窗、汉明窗、汉宁窗、布莱克曼窗、凯撒窗进行分析和仿真。

         这种窗函数在时域上近似于一个扁长的椭圆,它在频域上使主瓣能量与旁瓣能量之比达到最大。与其他窗函数相比,凯撒窗的一个显著特点是它可以同时调整主瓣和旁瓣的宽度。例如,β增加时,相对旁瓣衰减降低,而主瓣宽度则会增加。


3、仿真及结果分析

3.1.1五种窗函数的时域频域比较

比较五种窗函数的旁瓣高度以及主瓣宽度。

 从频域图可以看出,旁瓣衰减程度从大到小排列依次为:

        布莱克曼窗 > 汉宁窗 > 汉明窗 > 矩形窗 > 凯撒窗

主瓣宽度从大到小排列依次为:

        矩形窗 > 凯撒窗 > 汉明窗 > 汉宁窗  > 布莱克曼窗

        主瓣宽度的增加会导致频谱的分辨率降低。因此,对于窗函数而言,频谱分辨率和旁瓣的衰减不可兼得。

3.1.2五种窗函数进行截断的频谱泄露差异

 

 3.1.3 五种窗函数计算功率谱

间接法加窗求解的窗函数功率谱图比较

       

 加入5dB、0dB、-5dB、-10dB高斯白噪声功率谱比较图:

                          

                          


补充信号功率谱分析

Welch法加窗求解的窗函数功率谱图比较

                           

 

 4、Matlab程序实现

%% 时间:2023.11.8%通过Matlab产生如下信号:x(n)=2cos(2pif1n)+2cos(2pif2n)+2cos(2pif3n)+v(n)
%其中f1=0.05、f2=0.40、f3=0.42,
% v(n)是实高斯白噪声(信噪比由5dB至-10dB,步进5dB),f1-f3均为归一化的频率。
%针对间接法,首先产生不同的窗函数;
%观察不同窗函数(矩形、布莱克曼、汉宁、汉明、凯撒等)的时域、频域情况,
%总结不同窗函数的优缺点;
%然后使用不同的窗函数进行处理观察功率谱变化情况,并分析产生结果的原因。clc;
clear;
close all;%% 信号的生成
N=200;%采样点数
Fs = 1000;  %采样频率
fc1 = 0.05*Fs; % 归一化载波频率转化为载波频率
fc2 = 0.40*Fs;
fc3 = 0.42*Fs;
n = 0:1/Fs:(N-1)/Fs;xn = 2*cos(2*pi*fc1*n) + 2*cos(2*pi*fc2*n) + 2*cos(2*pi*fc3*n);
xn = awgn(xn,5);  %加入高斯白噪声信号
nfft = N;%% 窗函数的时域频域分析
window1=zeros(1,N);
window2=zeros(1,N);
window3=zeros(1,N);
window4=zeros(1,N);
window5=zeros(1,N);
L = 3*N/4;
a1=transpose(hamming(L)); %汉明窗
a2=transpose(blackman(L)); %布莱克曼窗
a3=transpose(hann(L)); %汉宁窗
a4=transpose(kaiser(L)); %凯撒窗
a5=transpose(boxcar(L)); %矩形窗
for i=1:Lwindow1(i)=window1(i)+transpose(a1(i));window2(i)=window2(i)+transpose(a2(i));window3(i)=window3(i)+transpose(a3(i));window4(i)=window4(i)+transpose(a4(i));window5(i)=window5(i)+transpose(a5(i));
end%% 五种窗函数的时域频域比较wvt = wvtool(a1,a2,a3,a4,a5);legend(wvt.CurrentAxes,'汉明窗','布莱克曼窗','汉宁窗','凯撒窗','矩形窗');%% 窗函数采样点全选取
% L = N;
% window1=transpose(hamming(L)); %汉明窗
% window2=transpose(blackman(L)); %布莱克曼窗
% window3=transpose(hann(L)); %汉宁窗
% window4=transpose(kaiser(L)); %凯撒窗
% window5=transpose(boxcar(L)); %矩形窗%% 单个窗函数的时域频域分析
wvtool(boxcar(L));
wvtool(hamming(L));
wvtool(blackman(L));
wvtool(hann(L));
wvtool(kaiser(L));%% 间接求功率谱法
%间接法先由序列x(n)估计出自相关函数R(n),
%然后对R(n)进行傅里叶变换,便得到x(n)的功率谱估计%加窗后的信号
xn1=xn.*window1;
xn2=xn.*window2;
xn3=xn.*window3;
xn4=xn.*window4;
xn5=xn.*window5;%计算序列的自相关函数
%不加窗自相关函数的傅里叶变换
cxn = xcorr(xn);
CXk = fft(cxn,nfft);
Pxx = abs(CXk);
%汉明窗自相关函数的傅里叶变换
cxn1 = xcorr(xn1);
CXk1 = fft(cxn1,nfft);
Pxx1 = abs(CXk1);
%布莱克曼窗自相关函数的傅里叶变换
cxn2 = xcorr(xn2);
CXk2 = fft(cxn2,nfft);
Pxx2 = abs(CXk2);  
%汉宁窗自相关函数的傅里叶变换
cxn3 = xcorr(xn3);
CXk3 = fft(cxn3,nfft);
Pxx3 = abs(CXk3);  
%凯撒窗自相关函数的傅里叶变换
cxn4 = xcorr(xn4);
CXk4 = fft(cxn4,nfft);
Pxx4 = abs(CXk4);  
%矩形窗自相关函数的傅里叶变换
cxn5 = xcorr(xn5);
CXk5 = fft(cxn5,nfft);
Pxx5 = abs(CXk5);  index = 0:round(nfft/2-1);
f = index*Fs/N;
plot_Pxx = 10*log10(Pxx(index+1)); 
plot_Pxx1 = 10*log10(Pxx1(index+1)); 
plot_Pxx2 = 10*log10(Pxx2(index+1)); 
plot_Pxx3 = 10*log10(Pxx3(index+1)); 
plot_Pxx4 = 10*log10(Pxx4(index+1)); 
plot_Pxx5 = 10*log10(Pxx5(index+1)); %% 窗函数功率谱图比较
figure(7);
subplot(311);
plot(f,plot_Pxx);
title('原信号功率谱');
subplot(312);
plot(f,plot_Pxx5);
title('矩形窗功率谱');
subplot(313);
plot(f,plot_Pxx1);
title('汉明窗功率谱');figure(8);
subplot(311);
plot(f,plot_Pxx2);
title('布莱克曼窗功率谱');
subplot(312);
plot(f,plot_Pxx3);
title('汉宁窗功率谱');
subplot(313);
plot(f,plot_Pxx4);
title('凯撒窗功率谱');figure(9);
hold on
plot(f,plot_Pxx);
plot(f,plot_Pxx1);
plot(f,plot_Pxx2);
plot(f,plot_Pxx3);
plot(f,plot_Pxx4);
plot(f,plot_Pxx5);
title('五种窗功率谱比较');
legend('原信号','汉明窗','布莱克曼窗','汉宁窗','凯撒窗','矩形窗');
hold off

     文章若有不当和不正确之处,还望理解与指出。由于部分文字、图片等来源于互联网,无法核实真实出处,如涉及相关争议,请联系博主删除。如有错误、疑问和侵权,欢迎评论留言联系作者,或者关注VX公众号:Rain21321,联系作者。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/217497.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

力扣学习笔记——239. 滑动窗口最大值

力扣学习笔记——239. 滑动窗口最大值 题目描述 给你一个整数数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。 返回 滑动窗口中的最大值 。 示例 1: 输…

SSF-CNN:空谱融合的简易卷积超分网络

SSF-CNN: SPATIAL AND SPECTRAL FUSION WITH CNN FOR HYPERSPECTRAL IMAGE SUPER-RESOLUTION 文章目录 SSF-CNN: SPATIAL AND SPECTRAL FUSION WITH CNN FOR HYPERSPECTRAL IMAGE SUPER-RESOLUTION简介解决问题网络框架代码实现训练部分运行结果 简介 ​ 本文提出了一种利用空…

【web】Fastapi自动生成接口文档(Swagger、ReDoc )

简介 FastAPI是流行的Python web框架,适用于开发高吞吐量API和微服务(直接支持异步编程) FastAPI的优势之一:通过提供高级抽象和自动数据模型转换,简化请求数据的处理(用户不需要手动处理原始请求数据&am…

2024年天津天狮学院专升本护理学专业《内外科护理学》考试大纲

天津天狮学院2024年护理学专业高职升本入学考试《内外科护理学》考试大纲 一、考试性质 《内外科护理学》专业课程考试是天津天狮学院护理专业高职升本入学考试的必考科目之一,其性质是考核学生是否达到了升入本科继续学习的要求而进行的选拔性考试。《内外科护理学…

UWB实时定位系统源码,历史活动轨迹显示,视频联动,电子围栏

UWB实时定位系统源码,工厂企业人员安全定位,UWB源码 行业背景 工业企业多存在很多有毒有害、高危高压等生产环境,带电设备众多,容易发生安全事故;人员只能凭记忆遵守各项生产安全规范,如某些危险区域范围、…

C++入门第九篇---Stack和Queue模拟实现,优先级队列

前言: 我们已经掌握了string vector list三种最基本的数据容器模板,而对于数据结构的内容来说,其余的数据结构容器基本都是这三种容器的延申和扩展,在他们的基础上扩展出更多功能和用法,今天我们便来模拟实现一下C库中…

Word打印模板,打印效果更出众丨三叠云

Word打印模板 路径 表单设置 >> 打印设置 功能简介 新增「Word打印模板」(beta版)。 Word 打印模板是指,在 Word 文档的基础上插入表单中的字段代码,打印时即可根据 Word 文档的格式,对表单数据进行个性化打印。 Word 打印模板能…

rancher2.6 docker版本部署

1. 拉取镜像 docker pull rancher/rancher:v2.6.5 注: 上面命令中rancher的版本v2.6.5,仅仅是我因为我们环境中使用的k8s都是 1.20.1 到1.23.6 之间的版本。rancher支持的k8s版本,在github上查看:Release Release v2.6.5 ranche…

探索 Vue 中的 bus.$emit:实现组件通信的强大工具

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云…

中间件渗透测试-Server2131(解析+环境)

B-10:中间件渗透测试 需要环境的加qq 任务环境说明: 服务器场景:Server2131(关闭链接) 服务器场景操作系统:Linux Flag值格式:Flag{Xxxx123},括…

【MinIO】几个有用的方法

在windows总安装Minio 这是一篇不错的安装指南 进入网址 在Windows安装时,选择相应的exe文件下载,下载到本地后,使用如下的命令即可在前台启动: minio.exe server D:\your_path 或者将该路径写进环境变量的path中,…

5种主流API网关技术选型,yyds!

API网关是微服务项目的重要组成部分,今天来聊聊API网关的技术选型,有理论,有实战。 不 BB,上文章目录: 1 API网关基础 1.1 什么是API网关 API网关是一个服务器,是系统的唯一入口。 从面向对象设计的角度…