多相滤波器及信道化处理

该文详细探讨了多相滤波器在信号处理中的作用,包括降采样、升采样以及信道化处理的两个阶段。通过MATLAB代码示例展示了不同K和D设置下对信号频谱的影响,指出K=D时可能出现的频谱盲区问题,并通过增大K来改善这一情况。
摘要由CSDN通过智能技术生成

目录

一 降采样和多相滤波器

二 升采样和多相滤波器

三 多相滤波器和信道化处理1

四 多相滤波器和信道化处理2

一 降采样和多相滤波器

二 升采样和多相滤波器

三 多相滤波器和信道化处理1

上图中从x(mD-p)可以看出,输入数据是从K到0,所以下面的代码里面是先x(K)到x(0),hp是从小到大顺序取值。

hp(l/F)中,l值是从0:1:length(h)长度,其中奇数时为0,相当于在原值基础上进行了插值,这也是重叠50%的由来。

四 多相滤波器和信道化处理2

上图重叠没有画清楚,如下图所示:

 当K=D时的代码:


clear 
close all
freqStart = 0;%app.MhzEditField.Value*1e6;
freqEnd = 0;%app.MhzEditField_2.Value*1e6;
fs     = 1600;%;app.MhzEditField_3.Value;        
%构造发送数据,实际设备中不存在
signalType = 'pulse';
bandwidth = 50;
A = 1;
Fc =100;%freqStart;%将信号放在freqStart和freqEnd之间,暂时放在freqStart位置
fsRev = 1600;%暂时按照3Ghz的采样率

%半带滤波
t = [0:1/fs:1];
receiveData = exp(1i*2*pi*Fc*t);   
% %% 参数设置
K = 8;
D =8  ;
fc = [0:K-1]*fs/K ;
load('passBand80Fc100Fs1600.mat')
h=passBand80Fc100Fs1600;
% hSub = (reshape(h,K,length(h)/K));
% 
% % =======传统方式
len = length(receiveData);
lenH = length(h);
lensubdata = len/K;
FFTNum = 8192;
for i = 1:K
     subplot(K,1,i)
     receiveDatatemp = receiveData.*exp(-1i*2*pi*fc(i)*(0:len-1)/fs);
     subchannelData = downsample(conv(receiveDatatemp,h,'same'),D);
     fftData = fft(subchannelData,FFTNum);


     plot([-FFTNum/2:FFTNum/2-1]*fs/D/FFTNum+fc(i),abs([fftData(FFTNum-FFTNum/2+1:FFTNum)  fftData(1:FFTNum/2)]));
    
end


receiveDataArray = [receiveData];
datalen = floor(length(receiveDataArray)/D)-2;
Hlen =  floor(length(h)/D)-2;
load('passBand80Fc100Fs1600.mat')
h=passBand80Fc100Fs1600;

hSub = (reshape(h,K,length(h)/K));
% % 多相滤波器信道分段为K,抽样为D=K/2
for i=1:K
    datatemp  = receiveDataArray(K-i+1:D:K-i+datalen*D);  %注意取数据的方式为倒序
    hupsample = hSub(i,:);%(upsample(hSub(i,:),2));
%     sig =(-1).^((i-1)*[0:length(datatemp)-1]);% 
    receiveDataArray2(i,:)= conv(datatemp,hupsample,'same');
end
receiveDataArray3 = ifft(receiveDataArray2);

FFTNum = 8192;
figure
fftwhole = [];

%频谱拼接
for i = 1:K
    subplot(K,1,i)
    fftData = (fft(receiveDataArray3(i,:),FFTNum));
   

    plot([-FFTNum/2:FFTNum/2-1]*fs/D/FFTNum+fc(i),abs([fftData(FFTNum-FFTNum/2+1:FFTNum)  fftData(1:FFTNum/2)]));
    
end
aa=1;




当K=2D时的代码


%宽带分段采集,频谱拼接 电平调节
% function IFSignalReceive(app)
clear 
close all
freqStart = 0;%app.MhzEditField.Value*1e6;
freqEnd = 0;%app.MhzEditField_2.Value*1e6;
fs     = 1600;%;app.MhzEditField_3.Value;
          
Fc =1200;%freqStart;%将信号放在freqStart和freqEnd之间,暂时放在freqStart位置
t = [0:1/fs:1];
receiveData = exp(1i*2*pi*Fc*t);   
% %% 参数设置
K = 8;
D =4  ;
fc = [0:K-1]*fs/K ;
load('passBand80Fc200Fs1600.mat')
h=passBand80Fc200Fs1600;
% hSub = (reshape(h,K,length(h)/K));
% 
% % =======传统方式
len = length(receiveData);
lenH = length(h);
lensubdata = len/K;
FFTNum = 8192;
for i = 1:K
     subplot(K,1,i)
     receiveDatatemp = receiveData.*exp(-1i*2*pi*fc(i)*(0:len-1)/fs);
     subchannelData = downsample(conv(receiveDatatemp,h,'same'),D);
     fftData = fft(subchannelData,FFTNum);    
     plot([-FFTNum/4:FFTNum/4-1]*fs/D/FFTNum+fc(i),abs([fftData(FFTNum-FFTNum/4+1:FFTNum)  fftData(1:FFTNum/4)]))     
end


receiveDataArray = [receiveData];
datalen = floor(length(receiveDataArray)/D)-2;
Hlen =  floor(length(h)/D)-2;
% load('passBand100Fc150Fs1600.mat')
load('passBand80Fc200Fs1600.mat')

h=passBand80Fc200Fs1600;

hSub = (reshape(h,K,length(h)/K));
% % 多相滤波器信道分段为K,抽样为D=K/2
for i=1:K
    datatemp   = receiveDataArray(K-i+1:D:K-i+datalen*D);  %注意取数据的方式为倒序
    hupsample = upsample(hSub(i,:),2);
    datatemp = datatemp;
    receiveDataArray2(i,:)=conv(datatemp,hupsample,'same');
end
receiveDataArray3 = ifft(receiveDataArray2,[],1);

FFTNum = 8192;
figure
fftwhole = [];

%频谱拼接
for i = 1:K
    subplot(K,1,i)
    datatemp =  (-1).^((i-1)*[0:length(datatemp)-1]);
    datatemp = receiveDataArray3(i,:).*datatemp;
    fftData = K*(fft(datatemp,FFTNum));  
    plot([-FFTNum/4:FFTNum/4-1]*fs/D/FFTNum+fc(i),abs([fftData(FFTNum-FFTNum/4+1:FFTNum)  fftData(1:FFTNum/4)]));
     
    
end





滤波器设置如下图:

从上面仿真可以看出,当K=D时,如果Fc为100hz时,由于频谱有盲区导致显示不到频谱,而当K=2*D时则可以显示正确的频谱

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值