matlab 自己写的DFT滤波器组(复数调制滤波器组),将信号展开成二维时频域分布图

根据胡广书《现代数字信号处理》中复数调制滤波器组理论。

先设计一个低通原型滤波器H(z),单位抽样响应为h(n),频带范围为-\pi /M\sim \pi /M

通过调制h(n)得到M个分析滤波器。调制因子{\color{Red} }{\color{Red} }exp(j\frac{2\pi }{M}kn) ,相应频谱是H(e^{^{j\omega }})做均匀位移所得。 

这里滤波器组个数M=256,滤波器阶数256。测试信号为线性调频信号。

%% DFT分析滤波器组(chirp测试文件)
%用fir1函数设计FIR滤波器
%再调制单位脉冲响应
clc
close all
clear all
%% 设计原型滤波器
M=256;        %滤波器个数
N=257;       %滤波器长度
fs=5000;    %采样频率
fc_lpf=200;
%以采样滤波的一半,对频率进行归一化处理
% wn_lpf=fc_lpf*2/fs;
wn_lpf=1/(2*M);
%采用fir1函数设计FIR滤波器
b1=fir1(N-1,wn_lpf);
%幅频响应
m1=20*log10(abs(fft(b1)));
%设置幅频响应的横坐标单位为Hz
x_f=(0:(fs/length(m1)):fs/2);% figure(1)
% plot(abs(b1));
% figure(2)
% plot(x_f,m1(1:length(x_f)));
% plot(abs(fft(b1)));
%% 测试信号
t=0:1/fs:1;
sig=chirp(t,0,1,5000);%% 调制单位脉冲响应
n=1:N;
b_out=zeros(M,N);%每个滤波器的单位抽样响应
y_out=zeros(M,length(sig));%通过滤波器组后的信号矩阵for i=1:Mk=i-1;b_channel=b1.*exp(1i*2*pi*n*(k/M));    %对原型滤波器H(z)的单位抽样响应h(n)复数调制y_channel_out=filter(b_channel,1,sig);  b_out(i,:)=b_channel;                   %每个通道的单位抽样响应y_out(i,:)=y_channel_out;               %输出时频信号矩阵%     plot(20*log10(abs(fft(b_channel))));
%     axis([0 M -30 0]);
%     hold onend
figure,imagesc(abs(y_out));

频率范围0-2*pi的chirp信号通过分析滤波器组后的结果如下图:

可以看到有通过滤波器组有延时,延时为(N-1)/2 .

把延时去掉

delay=(N-1)/2;         %群延时
y_out_delay=y_out(:,delay:length(y_out));
l=ceil(length(t)/2);
figure,imagesc(abs(y_out_delay(1:(M/2),1:l)));

结果如下图:

 横坐标为时间间隔,纵坐标为频率。

存在一些问题:是否是因为傅里叶变换而使得信号在频域对称。


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部