具有随机相位的全通 FIR 滤波器,MATLAB
All-pass FIR filter with random phase, MATLAB
所以我在 matlab 中有以下用于全通 FIR 滤波器的代码,我有几个问题。
首先,我将两者卷积在一起的方式是否正确?生成的信号比原始信号长几个样本。
其次,我将如何获得像这样的幅度与相位图?从我已有的系数?
%% Initialise
clear all
close all
N=256;% filter tap length
Fs = 44100; %# Samples per second
toneFreq = 50; %# Tone frequency, in Hertz
nSeconds = 2; %# Duration of the sound
y = sin(linspace(0, nSeconds*toneFreq*2*pi, round(nSeconds*Fs)));
rng(1, 'twister');%
a=pi/2;
b=-a;
%% method
A = ones(N,1);%magnitude response set to 1
B = (b-a).*rand(N,1) + a;% random phase
hf=A.*(cos(B)+1j*sin(B)); %create coefficients
hn=ifft(hf); %convert to time domain
final=conv(hn,input); %filter?
- 使用
conv(x,y,'same')
。您可以使用 help conv
或 doc conv
查看它的文档。 RTM
- 如果您有信号处理工具箱,请使用
freqz
。再一次,RTM。
所以我在 matlab 中有以下用于全通 FIR 滤波器的代码,我有几个问题。
首先,我将两者卷积在一起的方式是否正确?生成的信号比原始信号长几个样本。
其次,我将如何获得像这样的幅度与相位图?从我已有的系数?
%% Initialise
clear all
close all
N=256;% filter tap length
Fs = 44100; %# Samples per second
toneFreq = 50; %# Tone frequency, in Hertz
nSeconds = 2; %# Duration of the sound
y = sin(linspace(0, nSeconds*toneFreq*2*pi, round(nSeconds*Fs)));
rng(1, 'twister');%
a=pi/2;
b=-a;
%% method
A = ones(N,1);%magnitude response set to 1
B = (b-a).*rand(N,1) + a;% random phase
hf=A.*(cos(B)+1j*sin(B)); %create coefficients
hn=ifft(hf); %convert to time domain
final=conv(hn,input); %filter?
- 使用
conv(x,y,'same')
。您可以使用help conv
或doc conv
查看它的文档。 RTM - 如果您有信号处理工具箱,请使用
freqz
。再一次,RTM。