How can I divide a signal into blocks?
3 次查看(过去 30 天)
显示 更早的评论
I have a noise signal and I want -for some integer K- to break the signal into blocks of K samples, such that the first N samples make up the first block, the next K samples make up the second block, and so on,as below.I want to know if this algorithm correct or not :
x = radar_noise; % input signal
K = 1000; % K CAPITAL is Block Size
L = length(x) - mod(length(x),K); % only full blocks
zk = reshape(x(1:L), K, []);
%M=zeros(K,K); % M ZEROS covariance matrix L*L
M=[];
for i=1:size(zk,1) % LOOP covariance matrix calculation
Mz=zk(i,:)*zk(i,:)'; %
M=M+Mz;
end
M=M/K;
0 个评论
采纳的回答
Walter Roberson
2011-12-11
x = radar_noise; % input signal
K = 1000; % K CAPITAL is Block Size
L = length(x) - mod(length(x),K); % only full blocks
zk = reshape(x(1:L), K, []);
This will create zk with each block going down a columns, as you have in your existing code.
It appears to me that in your existing code, once calculate K and L, you then immediately use them with their opposite purposes, using K as if it the number of blocks and using L as if it is a block size.
6 个评论
Walter Roberson
2011-12-11
You are still confusing block size and number of blocks. zk() has blocks running down the columns, and since you defined the size of the block as being K, size(zk,1) is going to be K. Your vector zk(:,i) is then going to be K by 1, so its conjugate transpose zk(:,i)' would be 1 by K, and the matrix multiplication of (K by 1) by (1 by K) will give you a K by K output. You are then trying to add that K x K output to an array that you defined as L x L.
I am not at all sure that you are calculating your covariance matrices the way you want, and I do not know why you would sum them, but that is a different matter.
更多回答(1 个)
Image Analyst
2011-12-11
What do you want to do with each block? If you want each block to just be a row in a new 2D matrix, simply call
zk = reshape(x, [K, L]);
2 个评论
Walter Roberson
2011-12-11
The floor() in the definition of L shows us that he does not expect that x is necessarily an exact multiple of K in length; in that situation, the plain resize() would fail as K*L might not be length(x)
另请参阅
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!