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);
以上。