MATLAB phase与angle的区别
文献【1】内容
phase 和 angle 在输入为单个标量数据时,没有差别,二者都是用 atan2 函数来求输入数据的四象限辐角。但是对于向量或矩阵数据输入时,二者差别非常大。
phase 只支持标量和一维(行、列)向量输入,不支持二维或高维矩阵输入。angle 可以支持标量或任意维数矩阵输入
对于向量输入,phase 会对输出结果做判断,如果相邻两个输出角度的差的绝对值超过 3.5,phase 会对其重新处理,确保相邻两个角度差值的绝对值永远不超过3.5。而 angle 函数对每个数据独立求其辐角,不会因为相邻角度差超出某个数值而做特殊处理。所以,从这个意义上讲,angle 函数是我们通常需要使用的求角度的函数,而 phase 的特殊处理,会导致得出与angle不同的结果。
输出都是弧度!!!
文献【1】内容
以下为原创内容
1 对一个滤波器做相位分析
1.1 使用phase对滤波器进行相位分析
1.2 使用angle对滤波器进行相位分析
1.3 代码
%% 滤波器
Fs = 16000; % Sampling Frequency
Fpass = 2000; % Passband Frequency
Fstop = 2500; % Stopband Frequency
Dpass = 0.057501127785; % Passband Ripple
Dstop = 0.01; % Stopband Attenuation
dens = 20; % Density Factor
% Calculate the order from the parameters using FIRPMORD.
[N, Fo, Ao, W] = firpmord([Fpass, Fstop]/(Fs/2), [1 0], [Dpass, Dstop]);
% Calculate the coefficients using the FIRPM function.
b = firpm(N, Fo, Ao, W, {dens});
Hd = dfilt.dffir(b);
data = fft(b,512);
figure
plot(angle(data))
figure
plot(phase(angle))
1.4 结论
可以看出,使用phase更能反映出FIR滤波器的线性相位
文献
【1】https://blog.csdn.net/sinat_34245100/article/details/52993203