当前位置:   article > 正文

多相滤波器及信道化处理_多相滤波器 信道化

多相滤波器 信道化

目录

一 降采样和多相滤波器

二 升采样和多相滤波器

三 多相滤波器和信道化处理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时的代码:

  1. clear
  2. close all
  3. freqStart = 0;%app.MhzEditField.Value*1e6;
  4. freqEnd = 0;%app.MhzEditField_2.Value*1e6;
  5. fs = 1600;%;app.MhzEditField_3.Value;
  6. %构造发送数据,实际设备中不存在
  7. signalType = 'pulse';
  8. bandwidth = 50;
  9. A = 1;
  10. Fc =100;%freqStart;%将信号放在freqStart和freqEnd之间,暂时放在freqStart位置
  11. fsRev = 1600;%暂时按照3Ghz的采样率
  12. %半带滤波
  13. t = [0:1/fs:1];
  14. receiveData = exp(1i*2*pi*Fc*t);
  15. % %% 参数设置
  16. K = 8;
  17. D =8 ;
  18. fc = [0:K-1]*fs/K ;
  19. load('passBand80Fc100Fs1600.mat')
  20. h=passBand80Fc100Fs1600;
  21. % hSub = (reshape(h,K,length(h)/K));
  22. %
  23. % % =======传统方式
  24. len = length(receiveData);
  25. lenH = length(h);
  26. lensubdata = len/K;
  27. FFTNum = 8192;
  28. for i = 1:K
  29. subplot(K,1,i)
  30. receiveDatatemp = receiveData.*exp(-1i*2*pi*fc(i)*(0:len-1)/fs);
  31. subchannelData = downsample(conv(receiveDatatemp,h,'same'),D);
  32. fftData = fft(subchannelData,FFTNum);
  33. plot([-FFTNum/2:FFTNum/2-1]*fs/D/FFTNum+fc(i),abs([fftData(FFTNum-FFTNum/2+1:FFTNum) fftData(1:FFTNum/2)]));
  34. end
  35. receiveDataArray = [receiveData];
  36. datalen = floor(length(receiveDataArray)/D)-2;
  37. Hlen = floor(length(h)/D)-2;
  38. load('passBand80Fc100Fs1600.mat')
  39. h=passBand80Fc100Fs1600;
  40. hSub = (reshape(h,K,length(h)/K));
  41. % % 多相滤波器信道分段为K,抽样为D=K/2
  42. for i=1:K
  43. datatemp = receiveDataArray(K-i+1:D:K-i+datalen*D); %注意取数据的方式为倒序
  44. hupsample = hSub(i,:);%(upsample(hSub(i,:),2));
  45. % sig =(-1).^((i-1)*[0:length(datatemp)-1]);%
  46. receiveDataArray2(i,:)= conv(datatemp,hupsample,'same');
  47. end
  48. receiveDataArray3 = ifft(receiveDataArray2);
  49. FFTNum = 8192;
  50. figure
  51. fftwhole = [];
  52. %频谱拼接
  53. for i = 1:K
  54. subplot(K,1,i)
  55. fftData = (fft(receiveDataArray3(i,:),FFTNum));
  56. plot([-FFTNum/2:FFTNum/2-1]*fs/D/FFTNum+fc(i),abs([fftData(FFTNum-FFTNum/2+1:FFTNum) fftData(1:FFTNum/2)]));
  57. end
  58. aa=1;

当K=2D时的代码

  1. %宽带分段采集,频谱拼接 电平调节
  2. % function IFSignalReceive(app)
  3. clear
  4. close all
  5. freqStart = 0;%app.MhzEditField.Value*1e6;
  6. freqEnd = 0;%app.MhzEditField_2.Value*1e6;
  7. fs = 1600;%;app.MhzEditField_3.Value;
  8. Fc =1200;%freqStart;%将信号放在freqStart和freqEnd之间,暂时放在freqStart位置
  9. t = [0:1/fs:1];
  10. receiveData = exp(1i*2*pi*Fc*t);
  11. % %% 参数设置
  12. K = 8;
  13. D =4 ;
  14. fc = [0:K-1]*fs/K ;
  15. load('passBand80Fc200Fs1600.mat')
  16. h=passBand80Fc200Fs1600;
  17. % hSub = (reshape(h,K,length(h)/K));
  18. %
  19. % % =======传统方式
  20. len = length(receiveData);
  21. lenH = length(h);
  22. lensubdata = len/K;
  23. FFTNum = 8192;
  24. for i = 1:K
  25. subplot(K,1,i)
  26. receiveDatatemp = receiveData.*exp(-1i*2*pi*fc(i)*(0:len-1)/fs);
  27. subchannelData = downsample(conv(receiveDatatemp,h,'same'),D);
  28. fftData = fft(subchannelData,FFTNum);
  29. plot([-FFTNum/4:FFTNum/4-1]*fs/D/FFTNum+fc(i),abs([fftData(FFTNum-FFTNum/4+1:FFTNum) fftData(1:FFTNum/4)]))
  30. end
  31. receiveDataArray = [receiveData];
  32. datalen = floor(length(receiveDataArray)/D)-2;
  33. Hlen = floor(length(h)/D)-2;
  34. % load('passBand100Fc150Fs1600.mat')
  35. load('passBand80Fc200Fs1600.mat')
  36. h=passBand80Fc200Fs1600;
  37. hSub = (reshape(h,K,length(h)/K));
  38. % % 多相滤波器信道分段为K,抽样为D=K/2
  39. for i=1:K
  40. datatemp = receiveDataArray(K-i+1:D:K-i+datalen*D); %注意取数据的方式为倒序
  41. hupsample = upsample(hSub(i,:),2);
  42. datatemp = datatemp;
  43. receiveDataArray2(i,:)=conv(datatemp,hupsample,'same');
  44. end
  45. receiveDataArray3 = ifft(receiveDataArray2,[],1);
  46. FFTNum = 8192;
  47. figure
  48. fftwhole = [];
  49. %频谱拼接
  50. for i = 1:K
  51. subplot(K,1,i)
  52. datatemp = (-1).^((i-1)*[0:length(datatemp)-1]);
  53. datatemp = receiveDataArray3(i,:).*datatemp;
  54. fftData = K*(fft(datatemp,FFTNum));
  55. plot([-FFTNum/4:FFTNum/4-1]*fs/D/FFTNum+fc(i),abs([fftData(FFTNum-FFTNum/4+1:FFTNum) fftData(1:FFTNum/4)]));
  56. end

滤波器设置如下图:

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/821430
推荐阅读
相关标签
  

闽ICP备14008679号