|
300 | 300 | MetabData = ShapeData(:,:,refframes+2:end,:) * mult / 2; |
301 | 301 |
|
302 | 302 | totalframes = totalframes - (refframes + 1); |
303 | | - |
| 303 | + |
304 | 304 | MRS_struct.p.nrows(ii) = totalframes; |
305 | 305 | MRS_struct.p.Navg(ii) = dataframes * nex; |
306 | 306 | MRS_struct.p.Nwateravg(ii) = refframes * nex; |
|
335 | 335 |
|
336 | 336 | ShapeData = reshape(raw_data, [2 MRS_struct.p.npoints(ii) totalframes nreceivers]); |
337 | 337 |
|
338 | | - [X1,X2] = ndgrid(1:refframes, 1:nechoes); |
339 | | - X1 = X1'; X1 = X1(:); |
340 | | - X2 = X2'; X2 = X2(:); |
341 | | - Y1 = (-1).^(MRS_struct.p.GE.noadd(ii) * (X1-1)); |
342 | | - Y1 = permute(repmat(Y1, [1 MRS_struct.p.npoints(ii) 2 nreceivers]), [3 2 1 4]); |
343 | | - Y2 = 1 + (totalframes/nechoes) * (X2-1) + X1; |
| 338 | + [X1,X2] = ndgrid(1:refframes, 1:nechoes); |
| 339 | + X1 = X1'; X1 = X1(:); |
| 340 | + X2 = X2'; X2 = X2(:); |
| 341 | + Y1 = (-1).^(MRS_struct.p.GE.noadd(ii) * (X1-1)); |
| 342 | + Y1 = permute(repmat(Y1, [1 MRS_struct.p.npoints(ii) 2 nreceivers]), [3 2 1 4]); |
| 343 | + Y2 = 1 + (totalframes/nechoes) * (X2-1) + X1; |
344 | 344 | WaterData = Y1 .* ShapeData(:,:,Y2,:) * multw; |
345 | 345 |
|
346 | | - [X1,X2] = ndgrid(1:dataframes, 1:nechoes); |
347 | | - X1 = X1'; X1 = X1(:); |
348 | | - X2 = X2'; X2 = X2(:); |
349 | | - Y1 = (-1).^(MRS_struct.p.GE.noadd(ii) * (X1-1)); |
350 | | - Y1 = permute(repmat(Y1, [1 MRS_struct.p.npoints(ii) 2 nreceivers]), [3 2 1 4]); |
351 | | - Y2 = 1 + refframes + (totalframes/nechoes) * (X2-1) + X1; |
| 346 | + [X1,X2] = ndgrid(1:dataframes, 1:nechoes); |
| 347 | + X1 = X1'; X1 = X1(:); |
| 348 | + X2 = X2'; X2 = X2(:); |
| 349 | + Y1 = (-1).^(MRS_struct.p.GE.noadd(ii) * (X1-1)); |
| 350 | + Y1 = permute(repmat(Y1, [1 MRS_struct.p.npoints(ii) 2 nreceivers]), [3 2 1 4]); |
| 351 | + Y2 = 1 + refframes + (totalframes/nechoes) * (X2-1) + X1; |
352 | 352 | MetabData = Y1 .* ShapeData(:,:,Y2,:) * mult; |
353 | 353 |
|
354 | 354 | totalframes = totalframes - (refframes + 1) * nechoes; % RTN 2017 |
|
362 | 362 | WaterData = permute(WaterData, [3 1 2]); |
363 | 363 |
|
364 | 364 | % Generalized least squares method (An et al., JMRI, 2013, doi:10.1002/jmri.23941) |
365 | | -[nCh, nPts, nReps] = size(WaterData); |
366 | | -noise_pts = false(1,nPts); |
| 365 | +[nCh, nPts, nReps] = size(WaterData); |
| 366 | +noise_pts = false(1,nPts); |
367 | 367 | noise_pts(ceil(0.75*nPts):end) = true; |
368 | | -noise_pts = repmat(noise_pts, [1 nReps]); |
369 | | -tmpWaterData = reshape(WaterData, [nCh nPts*nReps]); |
| 368 | +noise_pts = repmat(noise_pts, [1 nReps]); |
| 369 | +tmpWaterData = reshape(WaterData, [nCh nPts*nReps]); |
370 | 370 |
|
371 | | -e = tmpWaterData(:,noise_pts); |
372 | | -Psi = e*e'; |
| 371 | +e = tmpWaterData(:,noise_pts); |
| 372 | +Psi = e*e'; |
373 | 373 | WaterData_avg = mean(WaterData,3); |
374 | | -S = WaterData_avg(:,1); |
375 | | -w = (S'*(Psi\S))^-1 * S' / Psi; |
376 | | -WaterData = w.' .* WaterData; |
| 374 | +S = WaterData_avg(:,1); |
| 375 | +w = (S'*(Psi\S))^-1 * S' / Psi; |
| 376 | +WaterData = w.' .* WaterData; |
| 377 | + |
377 | 378 | MRS_struct.fids.data_water = mean(squeeze(sum(WaterData,1)),2); |
378 | 379 |
|
379 | | -[nCh, nPts, nReps] = size(MetabData); |
380 | | -noise_pts = false(1,nPts); |
| 380 | +[nCh, nPts, nReps] = size(MetabData); |
| 381 | +noise_pts = false(1,nPts); |
381 | 382 | noise_pts(ceil(0.75*nPts):end) = true; |
382 | | -noise_pts = repmat(noise_pts, [1 nReps]); |
383 | | -tmpMetabData = reshape(MetabData, [nCh nPts*nReps]); |
| 383 | +noise_pts = repmat(noise_pts, [1 nReps]); |
| 384 | +tmpMetabData = reshape(MetabData, [nCh nPts*nReps]); |
384 | 385 |
|
385 | | -e = tmpMetabData(:,noise_pts); |
386 | | -Psi = e*e'; |
387 | | -w = (S'*(Psi\S))^-1 * S' / Psi; |
| 386 | +e = tmpMetabData(:,noise_pts); |
| 387 | +Psi = e*e'; |
| 388 | +w = (S'*(Psi\S))^-1 * S' / Psi; |
388 | 389 | MetabData = w.' .* MetabData; |
| 390 | + |
389 | 391 | MRS_struct.fids.data = squeeze(sum(MetabData,1)); |
390 | 392 |
|
391 | 393 | end |
|
0 commit comments