# How to use cfirpm function to correct the phase of the system?

5 次查看（过去 30 天）
Song Shaoqin 2023-5-23

I have use b = cfirpm(n,f,fresp,w) function design filters with arbitrary phase-frequency characteristics.But I don't know how to specify the phase frequency of the target in the fresp function.Is there anyone who can help?

### 回答（1 个）

Srivardhan 2023-7-5
Hi Song,
As per my understanding, you want to specify the phase frequency of the target in the fresp function.
In MATLAB, you can specify the desired phase-frequency characteristics of the target response using the ‘fresp’ argument in “cfirpm” function. The ‘fresp’ argument can be a vector or a function handle. To specify the phase-frequency characteristics using the ‘fresp’ function we need to define a function that computes the desired phase at each frequency point.
In the below code, I have used quadratic phase function f^2 as an example. We can choose any phase function. Now, “cfirmp” function will design a filter that approximately matches the desired complex frequency response at the frequency of f.
Here is the sample code for reference:
n = 64; % Filter order
f = linspace(0, 1, 1000); % Frequency vector (0 to 1)
% Define the desired phase function
phase_function = @(f) 2*pi*f.^2; % Example: Quadratic phase
% Compute the desired complex frequency response using the phase function
desired_response = exp(1j*phase_function(f));
% Design the filter using cfirpm
b = cfirpm(n, f, desired_response);
disp(b);
I hope this resolves the issue you were facing.
##### 1 个评论显示 -1更早的评论隐藏 -1更早的评论
Song Shaoqin 2023-7-13
I've run you above the code:
clc
clear
n = 64; % Filter order
f = linspace(0, 1, 1000); % Frequency vector (0 to 1)
% Define the desired phase function
phase_function = @(f) 2*pi*f.^2; % Example: Quadratic phase
% Compute the desired complex frequency response using the phase function
desired_response = exp(1j*phase_function(f));
apm = abs(desired_response);
phase = angle(desired_response);
phase = unwrap(phase);
phase = phase * 180 / pi;
plot(f,apm,f,phase);
% Design the filter using cfirpm
b = cfirpm(n, f, desired_response);
% disp(b);
fvtool(b); I find that the phase response of the filter factor b is inconsistent with the phase of desired_response.
Do you have any good suggestions？

### 类别

Help CenterFile Exchange 中查找有关 Digital Filter Analysis 的更多信息

### Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!