单点频信号的相位计算

白天想了下傅里叶变换的性质,时域平移对应的频域效果我想成了频移,但又总觉得不太对,就仿真了一下,想获得信号时移前后的相位值。一仿真,又出现了其他问题,主要是

  • 信号的相位谱非常乱,每个频率都有一个初始相位值
  • 是否是整周期采样

混乱的相位谱如下所示,
在这里插入图片描述
后来查看变量的值发现,FFT之后的实部值与虚部值有很多非常小的值(应该是由于计算机的量化误差导致),造成了相位值的混乱。在这里插入图片描述
于是将幅值较小的信号值直接赋0,相位谱就干净了许多,
在这里插入图片描述
对信号进行延迟,延迟量为d,其对应的相移与频率、采样率相关( 2 p i ∗ f ∗ d ∗ t s 2pi \ast f \ast d \ast ts 2pifdts;FFT运算之后,获得单点频信号的索引号,查询对应位置处的相位值,可以发现延迟前与延迟后的相移量与理论值相同。

在这里插入图片描述
在这里插入图片描述

%==========================================================================
% 清空一切
clc;clear all;close all;

%==========================================================================
% 生成信号
FS = 1024;
N  = 1024;                    
f  = 100;                     %为了便于观测结果,整周期采样
d = 3;

t1  = (0:N-1)/FS;
s1 = cos(2*pi*f*t1);
t2  = ((0:N-1)-d)/FS;
s2 = cos(2*pi*f*t2);

y1 = fft(s1);
y2 = fft(s2);
pse1 = angle(y1)/pi*180;
pse2 = angle(y2)/pi*180;

k = floor(f/FS*N);

%==========================================================================
% 计算时域位移对应的相移
delta_phi = 2*pi*f*d/FS/pi*180      

%==========================================================================
TH = 1e-10;
y3 = y1;
index = find(abs(y3)<TH);
y3(index) = 0;
pse3 = angle(y3)/pi*180;
y4 = y2;
index = find(abs(y4)<TH);
y4(index) = 0;
pse4 = angle(y4)/pi*180;

%==========================================================================
% 画图
figure;
hold on;
plot(s1,'r*-');
plot(s2,'bo-');
hold off;
title('时域');

figure;
hold on;
plot(20*log10(abs(y1)),'r*-');
plot(20*log10(abs(y2)),'bo-');
hold off;
title('频域');

figure;
hold on;
plot(pse1,'r*-');
plot(pse2,'bo-');
hold off;
title('相位');

figure;
hold on;
plot(pse3,'r*-');
plot(pse4,'bo-');
hold off;
title('去除较小值后的相位');
  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
基于引用\[1\]和引用\[3\]的内容,ST32 FFT测信号相位可以通过以下步骤进行计算: 1. 首先,确保采样信号是32位数据,高16位存储实部,低16位存储虚部。这是针对小端模式的情况,大端模式则相反。 2. 使用适当的FFT函数,如cr4_fft_64_stm32、cr4_fft_256_stm32或cr4_fft_1024_stm32,根据信号的长度选择合适的FFT函数。 3. 对采样信号进行FFT变换,得到域的复数表示。 4. 通过计算每个率分量的相位,可以得到信号相位信息。相位可以通过计算复数的角度来获得,可以使用函数如atan2来计算相位。 需要注意的是,FFT的分辨率取决于采样率和采样点数。为了减小误差,可以增大采样点数N,但同时也会增加计算的复杂性。另外,ADC读取数据的耗时和采样时间也可能会引入误差,因此在测量低信号时,应该降低采样率,最低要大于信号率的两倍,以确保准确性。\[2\] 综上所述,通过使用适当的FFT函数和计算复数的角度,可以在ST32上测量信号相位。 #### 引用[.reference_title] - *1* [基于STM32F4的FFT+测率幅值相位差,波形显示,示波器,时域域分析相关工程](https://blog.csdn.net/qq_50027598/article/details/126045155)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [stm32f1单片机上用FFT测量信号率(高精度、过程详细)](https://blog.csdn.net/weixin_43368814/article/details/103552114)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [STM32 FFT 汇编定点FFT库(64,256,1024点)](https://blog.csdn.net/Programmer_jzm/article/details/121010393)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值