首页 > 其他分享 >采样信号和傅里叶变换

采样信号和傅里叶变换

时间:2024-12-04 15:21:44浏览次数:3  
标签:采样 real Plot 变换 sampleCount result ys 傅里叶 Math

假设如下采样信号

int sampleCount = 10000;
var time = new double[sampleCount];
var xs = new double[sampleCount];
var ys_real = new double[sampleCount];
var ys_img = new double[sampleCount];

//10KHz采样,生成实部数据 和 X轴数据
for(int i=0;i< sampleCount; i++) 
{
	time[i] = i;
	var x= ((double)i) / ((double)sampleCount);
	xs[i] = x;
	ys_real[i] =
		0.5 * Math.Sin(2 * Math.PI * 10 * x ) //叠加10Hz信号
		+ 0.2 * Math.Sin(2 * Math.PI * 80 * x + Math.PI / 4) //叠加80Hz信号
		+ 0.05 * Math.Sin(2 * Math.PI * 200 * x + Math.PI / 6)//叠加200Hz信号
		+ 0.07 * Math.Sin(2 * Math.PI * 400 * x + Math.PI / 8)//叠加400Hz信号
		+ 10;////叠加直流分量
}
//绘制10K个点
_timePlot.Plot.Clear();
_timePlot.Plot.Add.ScatterLine(xs.ToArray(), ys_real.ToArray()); 
_timePlot.Plot.Axes.AutoScale();
_timePlot.Refresh();

//傅里叶向前变换FFT default选型需要导入2的N次方数据 这里选Matlab不需要2的幂数

Fourier.Forward(ys_real, ys_img, MathNet.Numerics.IntegralTransforms.FourierOptions.Matlab);

var result = new double[ys_real.Length];

for (int i = 0; i < result.Count(); i++)
{
	var temp = new Complex32((float)ys_real[i], (float)ys_img[i]);
	result[i] = temp.Magnitude;//复数的模


	//归一化
	//0HZ的直流分量 =振幅/采样点数N 
	if (i == 0) { result[i] = result[i] / sampleCount; }
	else
	{
		//其他==振幅/采样点数N/2
		result[i] = result[i] / (sampleCount / 2);
	}

}
//Scottplot绘制FFT波形
_fftPlot.Plot.Clear();
_fftPlot.Plot.Add.ScatterLine(time.Take(sampleCount/2).ToArray(), result.Take(sampleCount/2).ToArray());
_fftPlot.Plot.Axes.AutoScale();
_fftPlot.Refresh();


频率和整幅都可以匹配

//去除高频部分大于70的频率信号
for (int i = 0; i < ys_real.Length; i++)
{
	if (i > 70)
	{
		ys_real[i] = 0;
		ys_img[i] = 0;
	}
}
//反傅里叶变化
Fourier.Inverse(ys_real, ys_img, FourierOptions.Matlab);
//绘制过滤过的波形 图上黄色波形
_timePlot.Plot.Add.ScatterLine(xs.ToArray(), ys_real.ToArray());
_timePlot.Plot.Axes.AutoScale();
_timePlot.Refresh();

只剩下0.5 * Math.Sin(2 * Math.PI * 10 * x )+ 10;的时域信号

//TIME->FFT-- > FILTER(noise) - IFFT - TIME

用途:

  1. 计算信号的频域信号分析特征
  2. 对信号进行预处理,剔除高频毛刺部分

标签:采样,real,Plot,变换,sampleCount,result,ys,傅里叶,Math
From: https://www.cnblogs.com/yyan1987/p/18586037

相关文章

  • 【计算机视觉】图像的几何变换
    最常见的几何变换有仿射变换和单应性变换两种,最常用的仿射变换有缩放、翻转、旋转、平移。1.缩放将图像放大或缩小会得到新的图像,但是多出的像素点如何实现----插值1.1插值方法最近邻插值双线性插值cv2.resize()是OpenCV中用于调整图像大小的函数。它可以将图像......
  • CCF认证-202309-02 | 坐标变换(其二)
    对于平面直角坐标系上的坐标 (x,y),小 P 定义了如下两种操作:拉伸 k 倍:横坐标 x 变为 kx,纵坐标 y 变为 ky;旋转 θ:将坐标(x,y) 绕坐标原点(0,0) 逆时针旋转 θ 弧度(0≤θ<2π)。易知旋转后的横坐标为 xcosθ−ysinθ,纵坐标为 xsinθ+ycosθ。设定好了包含 n......
  • 我谈离散傅里叶变换的补零
    有限序列的零延拓——零延拓不会改变离散傅里叶变换的形状的续篇。L点序列可以做N点傅里叶变换,当L⩽NL\leqslantN......
  • Python蒙特卡罗MCMC:优化Metropolis-Hastings采样策略与Fisher矩阵计算参数推断应用—
    全文链接:https://tecdat.cn/?p=38397原文出处:拓端数据部落公众号本文介绍了其在过去几年中的最新开发成果,特别阐述了两种有助于提升Metropolis-Hastings采样性能的新要素:跳跃因子的自适应算法以及逆Fisher矩阵的计算,该逆Fisher矩阵可用作提议密度。通过多个示例展示,这些......
  • 【故障诊断】【连续小波变换】基于连续小波变换的轴承故障诊断研究[凯斯西储大学轴承
         ......
  • 【故障诊断】【短时傅里叶变换】基于短时傅里叶变换的轴承故障诊断研究[西储大学数据]
       ......
  • 多视图3D目标检测位置嵌入变换
    目录概述模型结构3D坐标生成器3D位置编码器查询生成器和解码器演示效果核心逻辑部署方式文章声明:非广告,仅个人体验;概述参考文献;全部资源获取地址:https://www.aspiringcode.com/content?id=17150768592647&uid=b39675726b93455aa9cc64a018950898多视角图像中的3D......
  • 具有快表的地址变换机构
    具有快表的地址变换机构理解:是对基本地址变换机构的优化,减少访存次数来提高效率。​​‍一、快表的概念快表,又称联想寄存器(TLB,translationlookasidebuffer),是一种访问速度比内存快很多的高速缓存(TLB不是内存,类比Cache,但与Cache有所不同),用来存放最近访问的页表项的......
  • 基本地址变换机构
    基本地址变换机构(属于上一节的基本分页存储管理)(是用于实现逻辑地址到物理地址转换的一组硬件机构)​​关键理解:不仅进程被分为页面存放到页框中,该进程对应建立的页表也是需要存储到内存块中的。一、页表寄存器PTR基本地址变换机构可以借助进程的页表将逻辑地址转换为物理地......
  • 图像尺寸变换scalepadding方法
    在深度学习中,当需要将图像调整到特定尺寸时,直接resize可能会导致图像失真,特别是当目标尺寸与原始图像的宽高比不一致时。为了解决这个问题,一种最常见的方法是首先按照原始图像的宽高比将图像调整到与目标尺寸最接近的尺寸,然后在剩余的空间中使用padding进行填充,以得到目标尺寸......