Skip to content

BS67BW Fourier frequency labels are mis-scaled and off by one bin #16

Open

Description

@sdiebolt

BS67BW uses Fs=4*Fc instead of 4*Fc/3, and its negative FFT window starts at Nz/2 instead of Nz/2+1. A known transmit delay is therefore compensated with the wrong frequency. On current dev, this MWE leaves −90.35°; expected 0°.

Paste into MATLAB from the repository root (no GPU/MEX):

addpath(genpath('echoframe/matlab/core'));
fc = 1e6; dt = 1/(8*fc);
P = struct('pitch',3e-4,'nElements',8);
T = struct('c0',1540,'steer',0,'apodization',ones(8,1), ...
           'transmitDelays',dt*ones(8,1));
R = struct('samplingMode','BS67BW','nBuffers',1,'nSamples',512, ...
           'nSamplesIQ',256,'nTransmissions',1);
[~,~,~,R] = get_system_parameters( ...
    struct('Parameters',struct('numRcvChannels',128)), ...
    struct('frequency',1,'numelements',8),T,R);
S = echoframe_setup_fourier(P,T,R,struct('c0',1540,'nx',128,'nz',256));
t = (0:511)'*3/(4*fc);
pack = @(x) complex(x(1:2:end),-x(2:2:end));
a = fft(pack(cos(2*pi*fc*t)));
b = fft(pack(cos(2*pi*fc*(t-dt))));
[~,k] = max(abs(a));
q = b(k)/a(k)*exp(1i*double(S.frequencyAxis(k))*double(S.planewaveDelays(1,2)));
fprintf('Residual phase: %.6f degrees\n',angle(q)*180/pi);
assert(abs(q-1)<1e-5,'BS67BW transmit-delay compensation failed');

Activity

  1. sdiebolt commented on Oct 7, 2026

    @sdiebolt
    ContributorAuthor

    To demonstrate in Effusive (VSX simulation mode), this is what the L35-16vX sequence (using BS67W) would give with the current release of EchoFrame:

    Image

    And after the fix in #17

    Image
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions