Depende do tipo de ruído e tipo de sinal. Mostre um exemplo se você quiser uma boa resposta. Mas, dito isso, em geral você provavelmente deseja filtrar o sinal com passa-baixa. Se eu fosse você, usaria um espectro de potência Fourier para ver se a maior parte do ruído é de alta frequência e o sinal de que me preocupo principalmente em uma faixa mais baixa. Se eles se sobrepõem, bem, isso é vida. Eu teria que pensar mais sobre as coisas.
Um filtro passa-baixo que é bom para sinal ruidoso em muitos casos é o filtro Savitzky-Golay. É descrito em Receitas numéricas e, para o Python, há uma função no Python Numpy Cookbook. É apenas uma convolução com um pequeno núcleo. Você escolhe o tamanho da janela com base na largura dos picos ou em outros recursos, suficientemente largos para reduzir o ruído, mas não maiores que os recursos. Pode ser pequeno, digamos cinco pontos, ou maior como dezenas, cem talvez.
Você também escolhe uma ordem polinomial - geralmente eu uso 2 ou 4. A ordem 2 é boa para quando a janela é pequena, <10 pontos ou se estende por menos de meio ciclo (se o sinal se assemelhar a um seno), enquanto a ordem 4 é melhor na correspondência de formas de pico distorcidas, mas gosta de ter cerca de 9 ou mais pontos. Mas depende muito da forma e frequência do ruído.
Como outros dizem nos comentários, encontrar derivadas provavelmente não é a melhor estratégia, mas se você quiser encontrar derivadas de qualquer maneira, o filtro Savitzky-Golay pode fazer isso - suavizando e relatando simultaneamente a derivada em vez do sinal.