Plotting convoluted and original signals on the same graph So I have a frequency response (got it by windowed fft-ing) of a note E4 played on a guitar and now I'm trying to implement a dynamic threshold for finding the peaks (fundamental frequency of the note and its harmonics).

I found an article that describes doing it by convolving normalized Hamming window with the frequency response. Now, I've done it, but I just don't know how to plot it correctly as the convoluted signal is delayed for a few samples like this (the red one):


Here's the code in Scilab:

// plot the frequency response
x_axis = linspace(0, Fs, row);
plot(x_axis(1 : $/2), win_response);

// calculate convolution on each window, siggram_n is just normalized
// matrix of windowed freq. response
[rows_sig, cols] = size(siggram_n);
conv = [];
for i = 1 : cols
    conv = [conv (convol(siggram_n(:, i), win_response))'];
end

// calculate the average of all convolutions
[rows, cols] = size(ko);
conv_n = [];
for i = 1 : rows
    conv_n = [conv_n sum(conv(i, :))/cols];
end

// raise to the power of 0.7 to flatten the threshold - from the article
conv_n = conv_n .^ 0.7;

// plot the convoluted signal
x_axis = linspace(0, Fs, 2*length(conv_n));
plot(x_axis(1 : $/2), conv_n, 'red');


It's not only important that I know how to plot this, because I'll need to find the peaks, so I have to somehow "synchronize" both signals. What am I doing wrong?
Looks like you need to do a couple of things:


Use conv instead of convol
Change the order of the parameters of convol like this: conv( win_response,siggram_n(:, i))
Tell conv that it should return an array the same size as the first parameter conv( win_response,siggram_n(:, i),"same")


If you don't use "same" then you get a convolution result back that is the length of the first array plus twice the length of the second array.  Convol has the parameters in the opposite order, and doesn't have a "same" option.

Also, change the name of your variable conv to something else.  It is bad practice to use keywords as variable names.  In this case, you have to change it else you can't use the conv method properly.

See the documentation for conv