我正在尝试生成 100 个随机位(1,-1)的数据包(每个大小为 8192 的行向量),使用巴特沃斯滤波器对它们进行过滤,然后绘制它们的平均功率谱密度。我必须使用 MATLAB 来执行此操作。我的 o/p 应该是具有非常尖锐峰值的滤波 sinc。当我将此代码用于较小尺寸的数据包时,它说 100 它可以工作。但对于 8192 则不然。我希望有人检查我的代码是否有错误。
%generates a random square matrix of 8192x8192
n=rand(8192);
%initiates a row vector of 64 zeros
B=zeros(1,64);
%makes a butterworth(lowpass) filter
[num,den]=butter(20,.6);
%two for loops to generate 100 row vectors(packets) each of size 8192 that
%give 1 for any value greater than 0.5 and vice versa
for c=1:100
for k=1:8192
if n(c,k)>=0.5
n(c,k)=1;
else
n(c,k)=-1;
end
%filter the generated vectors and calculate average power spectral density
x=filter(num,den,n(c,:));
A=fftshift(fft(x,64));
psd=A.*conj(A);
B=B+psd;
end
end
plot(B./100)
xlabel 'Frequency', ylabel 'Average Power Spectral Density'