使用matlab计算两个波形的相位差

1、给两路相位差相差30度的信号

A = 2;%信号振幅
fc = 10;%信号频率
fs = 32 * fc;%信号采样率
t = 0:1/fs:2-1/fs;%采样时间间隔和步数
phase_a = 30;%a波形相位
phase_b = 0;%b波形相位
phi_a = phase_a * pi/180;%a波形变换为弧度
phi_b = phase_b * pi/180;%b波形角度变换为弧度
x_a = A * cos(2 * pi * fc * t + phi_a);%a波形表达式
x_b = A * cos(2 * pi * fc * t + phi_b);%b波形表达式

%plot(t,x_a);%绘制a波形
%plot(t,x_b);%绘制b波形

2、使a、b波形相乘生成c波形

x_c = x_a .* x_b;%c波形等于a,b波形相乘
%plot(t,x_c);

3、对C波形进行FFT变换

N = 512;%取前512个采样点进行傅里叶变换
X = 1/N * fftshift(fft(x_c,N));%fft变换

4、生成滤波值并生成相位谱

threshold = max(abs(X))/10000;%生成滤波限值
X(abs(X) < threshold)=0;%滤波
phase = atan2(imag(X),real(X))*180/pi;%使用atan2计算四个象限的相位
stem(f,phase);%绘制图形

4、还原该波形

x_recon = N * ifft(ifftshift(X),N);
t = [0:1:length(x_recon)-1]/fs;
plot(t,x_recon);

完整代码:

A = 2;%信号振幅
fc = 10;%信号频率
fs = 32 * fc;%信号采样率
t = 0:1/fs:2-1/fs;%采样时间间隔和步数
phase_a = 30;%a波形相位
phase_b = 0;%b波形相位
phi_a = phase_a * pi/180;%a波形变换为弧度
phi_b = phase_b * pi/180;%b波形角度变换为弧度
x_a = A * cos(2 * pi * fc * t + phi_a);%a波形表达式
x_b = A * cos(2 * pi * fc * t + phi_b);%b波形表达式
%plot(t,x_a);%绘制a波形
%plot(t,x_b);%绘制b波形
x_c = x_a .* x_b;%c波形等于a,b波形相乘
%plot(t,x_c);
N = 512;%取前512个采样点进行傅里叶变换
X = 1/N * fftshift(fft(x_c,N));%fft变换
%下面代码提取幅值频谱
df = fs/N;
sampleIndex = -N/2:N/2-1;
f = sampleIndex * df;
stem(f, abs(X));%显示幅值频谱
%下列代码提取相位谱
threshold = max(abs(X))/10000;%生成滤波限值
X(abs(X) < threshold)=0;%滤波
phase = atan2(imag(X),real(X))*180/pi;%使用atan2计算四个象限的相位
stem(f,phase);%绘制图形

%以下函数是把fft数据还原成图形
figure;
x_recon = N * ifft(ifftshift(X),N);
t = [0:1:length(x_recon)-1]/fs;
plot(t,x_recon);
以上。

  • 1
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值