我想改变频域中信号的相位.所以我生成了一个余弦测试信号来验证代码:
ycheck = cos(2*pi*t);
Run Code Online (Sandbox Code Playgroud)
当我想将相位移动到pi/4时,我会对信号执行fft,将其分为幅度和相位,并从中减去pi/4.
Ycheck = abs(Ycheck).*exp(1i*angle(Ycheck)-1i*pi/4); % -pi/4 shift
Run Code Online (Sandbox Code Playgroud)
绘制结果,看起来只有信号的幅度降低,但没有发生相移.我在论坛上做了一些研究,发现这个帖子在频域(MatLab)中改变信号的相位.所以我使用以下方法生成了另一个testignal:
y = exp(1i*2*pi*t);
Run Code Online (Sandbox Code Playgroud)
当我用这个信号进行相移时,它会给出所需的结果.遗憾的是我不能张贴图片:(,所以我试着描述(代码是附加的,所以你可以执行它):只有想象术语的ifft正确移动.标准余弦的ifft只降低幅度.我不明白,这里的问题是什么.
我的问题是,为什么相移对假想项中表示的信号起作用而不是对常规生成的余弦表示?我的计划是将这种相移应用于实际信号 - 我可以将频域中的相移应用于音乐信号,还是应用另一种(可能更智能)的方式?
我的代码在这里:
clear all;
close all;
clc;
N = 64; %number of samples
fs = 10; %sampling frequency
ts = 1/fs; %sample interval
tmax = (N-1)*ts;
t = 0:ts:tmax;
y = exp(1i*2*pi*t);
ycheck = cos(2*pi*t);
% plot test signals
figure
plot(t,y)
hold on
plot(t,ycheck,'r--')
% fft
Y = fft(y);
Ycheck = fft(ycheck);
% phase shift
Y = abs(Y).*exp(1i*angle(Y)-1i*pi/4); % -pi/4 …Run Code Online (Sandbox Code Playgroud)